tests/Copy-DbaLogin.Tests.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$commandname = $MyInvocation.MyCommand.Name.Replace(".ps1","")
Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan
. "$PSScriptRoot\constants.ps1"

Describe "$commandname Integration Tests" -Tags "IntegrationTests" {
$logins = "claudio", "port", "tester"

foreach ($instance in $instances) {
foreach ($login in $logins) {
if ($l = Get-DbaLogin -SqlInstance $instance -Login $login) {
Get-DbaProcess -SqlInstance $instance -Login $login | Stop-DbaProcess
$l.Drop()
}
}
}

$null = Invoke-Sqlcmd2 -ServerInstance $script:instance1 -InputFile $script:appeyorlabrepo\sql2008-scripts\logins.sql

Context "Copy login with the same properties." {
It "Should copy successfully" {
$results = Copy-DbaLogin -Source $script:instance1 -Destination $script:instance2 -Login Tester
$results.Status | Should Be "Successful"
}

It "Should retain its same properties" {

$login1 = Get-Dbalogin -SqlInstance $script:instance1 -login Tester
$login2 = Get-Dbalogin -SqlInstance $script:instance2 -login Tester

$login2 | Should Not BeNullOrEmpty

# Compare its value
$login1.Name | Should Be $login2.Name
$login1.Language | Should Be $login2.Language
$login1.Credential | Should be $login2.Credential
$login1.DefaultDatabase | Should be $login2.DefaultDatabase
$login1.IsDisabled | Should be $login2.IsDisabled
$login1.IsLocked | Should be $login2.IsLocked
$login1.IsPasswordExpired | Should be $login2.IsPasswordExpired
$login1.PasswordExpirationEnabled | Should be $login2.PasswordExpirationEnabled
$login1.PasswordPolicyEnforced | Should be $login2.PasswordPolicyEnforced
$login1.Sid | Should be $login2.Sid
$login1.Status | Should be $login2.Status
}

It "Should login with newly created Sql Login (also tests credential login) and gets name" {
$password = ConvertTo-SecureString -Force -AsPlainText tester1
$cred = New-Object System.Management.Automation.PSCredential ("tester", $password)
$s = Connect-DbaSqlServer -SqlInstance $script:instance1 -Credential $cred
$s.Name | Should Be $script:instance1
}
}

Context "No overwrite" {
$results = Copy-DbaLogin -Source $script:instance1 -Destination $script:instance2 -Login tester -WarningVariable warning  3>&1
It "Should not attempt overwrite" {
$warning | Should Match "already exists in destination"
}
}
}