Skip to content

Commit 84d04f8

Browse files
Refactor Pester tests for Get-DbaDefaultPath and Get-DbaErrorLog
Simplifies and modernizes the test scripts for Get-DbaDefaultPath and Get-DbaErrorLog by removing parameter blocks, using dynamic command name resolution, and streamlining parameter validation. Integration tests are updated for clarity and conciseness, with improved variable usage and reduced reliance on global state.
1 parent e5c1f22 commit 84d04f8

File tree

2 files changed

+69
-136
lines changed

2 files changed

+69
-136
lines changed

tests/Get-DbaDefaultPath.Tests.ps1

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,32 @@
1-
#Requires -Module @{ ModuleName="Pester"; ModuleVersion="5.0" }
2-
param(
3-
$ModuleName = "dbatools",
4-
$CommandName = "Get-DbaDefaultPath",
5-
$PSDefaultParameterValues = $TestConfig.Defaults
6-
)
7-
1+
$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "")
82
Write-Host -Object "Running $PSCommandPath" -ForegroundColor Cyan
93
$global:TestConfig = Get-TestConfig
104

11-
Describe $CommandName -Tag UnitTests {
12-
Context "Parameter validation" {
13-
BeforeAll {
14-
$hasParameters = (Get-Command $CommandName).Parameters.Values.Name | Where-Object { $PSItem -notin ("WhatIf", "Confirm") }
15-
$expectedParameters = $TestConfig.CommonParameters
16-
$expectedParameters += @(
17-
"SqlInstance",
18-
"SqlCredential",
19-
"EnableException"
20-
)
21-
}
22-
23-
It "Should have the expected parameters" {
24-
Compare-Object -ReferenceObject $expectedParameters -DifferenceObject $hasParameters | Should -BeNullOrEmpty
5+
Describe "$CommandName Unit Tests" -Tag 'UnitTests' {
6+
Context "Validate parameters" {
7+
[object[]]$params = (Get-Command $CommandName).Parameters.Keys | Where-Object {$_ -notin ('whatif', 'confirm')}
8+
[object[]]$knownParameters = 'SqlInstance', 'SqlCredential', 'EnableException'
9+
$knownParameters += [System.Management.Automation.PSCmdlet]::CommonParameters
10+
It "Should only contain our specific parameters" {
11+
(@(Compare-Object -ReferenceObject ($knownParameters | Where-Object {$_}) -DifferenceObject $params).Count ) | Should Be 0
2512
}
2613
}
2714
}
2815

29-
Describe $CommandName -Tag IntegrationTests {
16+
Describe "$CommandName Integration Tests" -Tag "IntegrationTests" {
3017
Context "returns proper information" {
31-
BeforeAll {
32-
$results = Get-DbaDefaultPath -SqlInstance $TestConfig.instance1
18+
$results = Get-DbaDefaultPath -SqlInstance $TestConfig.instance1
19+
It "Data returns a value that contains :\" {
20+
$results.Data -match "\:\\"
3321
}
34-
35-
It "Data returns a value that contains :\\" {
36-
$results.Data -match "\\:\\\\" | Should -BeTrue
22+
It "Log returns a value that contains :\" {
23+
$results.Log -match "\:\\"
3724
}
38-
39-
It "Log returns a value that contains :\\" {
40-
$results.Log -match "\\:\\\\" | Should -BeTrue
25+
It "Backup returns a value that contains :\" {
26+
$results.Backup -match "\:\\"
4127
}
42-
43-
It "Backup returns a value that contains :\\" {
44-
$results.Backup -match "\\:\\\\" | Should -BeTrue
45-
}
46-
47-
It "ErrorLog returns a value that contains :\\" {
48-
$results.ErrorLog -match "\\:\\\\" | Should -BeTrue
28+
It "ErrorLog returns a value that contains :\" {
29+
$results.ErrorLog -match "\:\\"
4930
}
5031
}
51-
}
32+
}

tests/Get-DbaErrorLog.Tests.ps1

Lines changed: 50 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,82 @@
1-
#Requires -Module @{ ModuleName="Pester"; ModuleVersion="5.0" }
2-
param(
3-
$ModuleName = "dbatools",
4-
$CommandName = "Get-DbaErrorLog",
5-
$PSDefaultParameterValues = $TestConfig.Defaults
6-
)
7-
1+
$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "")
82
Write-Host -Object "Running $PSCommandPath" -ForegroundColor Cyan
93
$global:TestConfig = Get-TestConfig
104

11-
Describe $CommandName -Tag UnitTests {
12-
Context "Parameter validation" {
13-
BeforeAll {
14-
$hasParameters = (Get-Command $CommandName).Parameters.Values.Name | Where-Object { $PSItem -notin ("WhatIf", "Confirm") }
15-
$expectedParameters = $TestConfig.CommonParameters
16-
$expectedParameters += @(
17-
"SqlInstance",
18-
"SqlCredential",
19-
"LogNumber",
20-
"Source",
21-
"Text",
22-
"After",
23-
"Before",
24-
"EnableException"
25-
)
26-
}
27-
28-
It "Should have the expected parameters" {
29-
Compare-Object -ReferenceObject $expectedParameters -DifferenceObject $hasParameters | Should -BeNullOrEmpty
5+
Describe "$CommandName Unit Tests" -Tag 'UnitTests' {
6+
Context "Validate parameters" {
7+
[object[]]$params = (Get-Command $CommandName).Parameters.Keys | Where-Object {$_ -notin ('whatif', 'confirm')}
8+
[object[]]$knownParameters = 'SqlInstance', 'SqlCredential', 'LogNumber', 'Source', 'Text', 'After', 'Before', 'EnableException'
9+
$knownParameters += [System.Management.Automation.PSCmdlet]::CommonParameters
10+
It "Should only contain our specific parameters" {
11+
(@(Compare-Object -ReferenceObject ($knownParameters | Where-Object {$_}) -DifferenceObject $params).Count ) | Should Be 0
3012
}
3113
}
3214
}
3315

34-
Describe $CommandName -Tag IntegrationTests {
16+
Describe "$CommandName Integration Tests" -Tags "IntegrationTests" {
3517
Context "Correctly gets error log messages" {
18+
$sourceFilter = "Logon"
19+
$textFilter = "All rights reserved"
3620
BeforeAll {
37-
# We want to run all commands in the BeforeAll block with EnableException to ensure that the test fails if the setup fails.
38-
$PSDefaultParameterValues['*-Dba*:EnableException'] = $true
39-
40-
$global:sourceFilter = "Logon"
41-
$global:textFilter = "All rights reserved"
42-
$testLogin = "DaperDan"
43-
44-
$existingLogin = Get-DbaLogin -SqlInstance $TestConfig.instance1 -Login $testLogin
45-
if ($existingLogin) {
46-
Get-DbaProcess -SqlInstance $TestConfig.instance1 -Login $testLogin | Stop-DbaProcess
47-
$existingLogin.Drop()
21+
$login = 'DaperDan'
22+
$l = Get-DbaLogin -SqlInstance $TestConfig.instance1 -Login $login
23+
if ($l) {
24+
Get-DbaProcess -SqlInstance $instance -Login $login | Stop-DbaProcess
25+
$l.Drop()
4826
}
49-
5027
# (1) Cycle errorlog message: The error log has been reinitialized
51-
$sqlCycleLog = "EXEC sp_cycle_errorlog;"
52-
$serverConnection = Connect-DbaInstance -SqlInstance $TestConfig.instance1
53-
$null = $serverConnection.Query($sqlCycleLog)
28+
$sql = "EXEC sp_cycle_errorlog;"
29+
$server = Connect-DbaInstance -SqlInstance $TestConfig.instance1
30+
$null = $server.Query($sql)
5431

5532
# (2) Need a login failure, source would be Logon
56-
$testPassword = "p0w3rsh3llrules" | ConvertTo-SecureString -Force -AsPlainText
57-
$testCredential = New-Object System.Management.Automation.PSCredential($testLogin, $testPassword)
33+
$pwd = "p0w3rsh3llrules" | ConvertTo-SecureString -Force -AsPlainText
34+
$sqlCred = New-Object System.Management.Automation.PSCredential($login, $pwd)
5835
try {
59-
Connect-DbaInstance -SqlInstance $TestConfig.instance1 -SqlCredential $testCredential -ErrorVariable $null
60-
} catch { }
61-
62-
# Get sample data for date filtering tests
63-
$global:sampleLogEntry = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 | Select-Object -First 1
64-
$global:lastLogEntry = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 | Select-Object -Last 1
65-
66-
# We want to run all commands outside of the BeforeAll block without EnableException to be able to test for specific warnings.
67-
$PSDefaultParameterValues.Remove('*-Dba*:EnableException')
68-
}
69-
70-
AfterAll {
71-
# We want to run all commands in the AfterAll block with EnableException to ensure that the test fails if the cleanup fails.
72-
$PSDefaultParameterValues['*-Dba*:EnableException'] = $true
73-
74-
# Cleanup test login if it still exists
75-
$cleanupLogin = Get-DbaLogin -SqlInstance $TestConfig.instance1 -Login "DaperDan" -ErrorAction SilentlyContinue
76-
if ($cleanupLogin) {
77-
$cleanupLogin.Drop()
78-
}
36+
Connect-DbaInstance -SqlInstance $TestConfig.instance1 -SqlCredential $sqlCred -ErrorVariable $whatever
37+
} catch {}
7938
}
8039
It "Has the correct default properties" {
81-
$expectedProps = "ComputerName,InstanceName,SqlInstance,LogDate,Source,Text".Split(",")
40+
$expectedProps = 'ComputerName,InstanceName,SqlInstance,LogDate,Source,Text'.Split(',')
8241
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 0
83-
($results[0].PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames | Sort-Object) | Should -Be ($expectedProps | Sort-Object)
42+
($results[0].PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames | Sort-Object) | Should Be ($expectedProps | Sort-Object)
8443
}
85-
86-
It "Returns filtered results for [Source = $global:sourceFilter]" {
87-
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -Source $global:sourceFilter
88-
$results[0].Source | Should -Be $global:sourceFilter
44+
It "Returns filtered results for [Source = $sourceFilter]" {
45+
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -Source $sourceFilter
46+
$results[0].Source | Should Be $sourceFilter
8947
}
90-
91-
It "Returns filtered result for [LogNumber = 0] and [Source = $global:sourceFilter]" {
92-
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 0 -Source $global:sourceFilter
93-
$results[0].Source | Should -Be $global:sourceFilter
48+
It "Returns filtered result for [LogNumber = 0] and [Source = $sourceFilter]" {
49+
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 0 -Source $sourceFilter
50+
$results[0].Source | Should Be $sourceFilter
9451
}
95-
96-
It "Returns filtered results for [Text = $global:textFilter]" {
97-
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -Text $global:textFilter
98-
($results[0].Text -like "*$global:textFilter*") | Should -BeTrue
52+
It "Returns filtered results for [Text = $textFilter]" {
53+
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -Text $textFilter
54+
{$results[0].Text -like "*$textFilter*"} | Should Be $true
9955
}
100-
101-
It "Returns filtered result for [LogNumber = 0] and [Text = $global:textFilter]" {
102-
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 0 -Text $global:textFilter
103-
($results[0].Text -like "*$global:textFilter*") | Should -BeTrue
56+
It "Returns filtered result for [LogNumber = 0] and [Text = $textFilter]" {
57+
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 0 -Text $textFilter
58+
{$results[0].Text -like "*$textFilter"} | Should Be $true
10459
}
60+
$after = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 | Select-Object -First 1
61+
$before = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 | Select-Object -Last 1
10562

106-
It "Returns filtered results for After parameter" {
107-
$afterFilter = $global:sampleLogEntry.LogDate.AddMinutes(+1)
63+
$afterFilter = $after.LogDate.AddMinutes(+1)
64+
It "Returns filtered results for [After = $afterFilter" {
10865
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -After $afterFilter
109-
($results[0].LogDate -ge $afterFilter) | Should -BeTrue
66+
{$results[0].LogDate -ge $afterFilter} | Should Be $true
11067
}
111-
112-
It "Returns filtered results for [LogNumber = 1] and After parameter" {
113-
$afterFilter = $global:sampleLogEntry.LogDate.AddMinutes(+1)
68+
It "Returns filtered results for [LogNumber = 1] and [After = $afterFilter" {
11469
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 -After $afterFilter
115-
($results[0].LogDate -ge $afterFilter) | Should -BeTrue
70+
{$results[0].LogDate -ge $afterFilter} | Should Be $true
11671
}
117-
118-
It "Returns filtered result for Before parameter" {
119-
$beforeFilter = $global:lastLogEntry.LogDate.AddMinutes(-1)
72+
$beforeFilter = $before.LogDate.AddMinutes(-1)
73+
It "Returns filtered result for [Before = $beforeFilter]" {
12074
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -Before $beforeFilter
121-
($results[-1].LogDate -le $beforeFilter) | Should -BeTrue
75+
{$results[-1].LogDate -le $beforeFilter} | Should Be $true
12276
}
123-
124-
It "Returns filtered result for [LogNumber = 1] and Before parameter" {
125-
$beforeFilter = $global:lastLogEntry.LogDate.AddMinutes(-1)
77+
It "Returns filtered result for [LogNumber = 1] and [Before = $beforeFilter]" {
12678
$results = Get-DbaErrorLog -SqlInstance $TestConfig.instance1 -LogNumber 1 -Before $beforeFilter
127-
($results[-1].LogDate -le $beforeFilter) | Should -BeTrue
79+
{$results[-1].LogDate -le $beforeFilter} | Should Be $true
12880
}
12981
}
130-
}
82+
}

0 commit comments

Comments
 (0)