Skip to content

Commit 72a112e

Browse files
Copilotjohlju
andcommitted
Add SMO stub enhancements and unit tests for Enable/Disable commands
Co-authored-by: johlju <7189721+johlju@users.noreply.github.com>
1 parent e8c3673 commit 72a112e

3 files changed

Lines changed: 202 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
2+
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Suppressing this rule because Script Analyzer does not understand Pester syntax.')]
3+
param ()
4+
5+
BeforeDiscovery {
6+
try
7+
{
8+
if (-not (Get-Module -Name 'DscResource.Test'))
9+
{
10+
# Assumes dependencies have been resolved, so if this module is not available, run 'noop' task.
11+
if (-not (Get-Module -Name 'DscResource.Test' -ListAvailable))
12+
{
13+
# Redirect all streams to $null, except the error stream (stream 2)
14+
& "$PSScriptRoot/../../../build.ps1" -Tasks 'noop' 3>&1 4>&1 5>&1 6>&1 > $null
15+
}
16+
17+
# If the dependencies have not been resolved, this will throw an error.
18+
Import-Module -Name 'DscResource.Test' -Force -ErrorAction 'Stop'
19+
}
20+
}
21+
catch [System.IO.FileNotFoundException]
22+
{
23+
throw 'DscResource.Test module dependency not found. Please run ".\build.ps1 -ResolveDependency -Tasks build" first.'
24+
}
25+
}
26+
27+
BeforeAll {
28+
$script:dscModuleName = 'SqlServerDsc'
29+
30+
Import-Module -Name $script:dscModuleName -Force -ErrorAction 'Stop'
31+
32+
# Load SMO stub types
33+
Add-Type -Path "$PSScriptRoot/../Stubs/SMO.cs"
34+
35+
$PSDefaultParameterValues['Mock:ModuleName'] = $script:dscModuleName
36+
$PSDefaultParameterValues['Should:ModuleName'] = $script:dscModuleName
37+
}
38+
39+
AfterAll {
40+
$PSDefaultParameterValues.Remove('Mock:ModuleName')
41+
$PSDefaultParameterValues.Remove('Should:ModuleName')
42+
43+
# Unload the module being tested so that it doesn't impact any other tests.
44+
Get-Module -Name $script:dscModuleName -All | Remove-Module -Force
45+
}
46+
47+
Describe 'Disable-SqlDscAgentOperator' -Tag 'Public' {
48+
Context 'When command has correct parameter sets' {
49+
It 'Should have the correct parameters in parameter set <ExpectedParameterSetName>' -ForEach @(
50+
@{
51+
ExpectedParameterSetName = 'ServerObject'
52+
ExpectedParameters = '-ServerObject <Server> -Name <string> [-Force] [-Refresh] [-WhatIf] [-Confirm] [<CommonParameters>]'
53+
}
54+
@{
55+
ExpectedParameterSetName = 'OperatorObject'
56+
ExpectedParameters = '-OperatorObject <Operator> [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]'
57+
}
58+
) {
59+
$result = (Get-Command -Name 'Disable-SqlDscAgentOperator').ParameterSets |
60+
Where-Object -FilterScript { $_.Name -eq $ExpectedParameterSetName } |
61+
Select-Object -Property @(
62+
@{ Name = 'ParameterSetName'; Expression = { $_.Name } },
63+
@{ Name = 'ParameterListAsString'; Expression = { $_.ToString() } }
64+
)
65+
$result.ParameterSetName | Should -Be $ExpectedParameterSetName
66+
$result.ParameterListAsString | Should -Be $ExpectedParameters
67+
}
68+
}
69+
70+
Context 'When command has correct parameter properties' {
71+
It 'Should have ServerObject as a mandatory parameter in ServerObject parameter set' {
72+
$parameterInfo = (Get-Command -Name 'Disable-SqlDscAgentOperator').Parameters['ServerObject']
73+
$parameterInfo.ParameterSets['ServerObject'].IsMandatory | Should -BeTrue
74+
}
75+
76+
It 'Should have OperatorObject as a mandatory parameter in OperatorObject parameter set' {
77+
$parameterInfo = (Get-Command -Name 'Disable-SqlDscAgentOperator').Parameters['OperatorObject']
78+
$parameterInfo.ParameterSets['OperatorObject'].IsMandatory | Should -BeTrue
79+
}
80+
81+
It 'Should have Name as a mandatory parameter in ServerObject parameter set' {
82+
$parameterInfo = (Get-Command -Name 'Disable-SqlDscAgentOperator').Parameters['Name']
83+
$parameterInfo.ParameterSets['ServerObject'].IsMandatory | Should -BeTrue
84+
}
85+
}
86+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')]
2+
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Suppressing this rule because Script Analyzer does not understand Pester syntax.')]
3+
param ()
4+
5+
BeforeDiscovery {
6+
try
7+
{
8+
if (-not (Get-Module -Name 'DscResource.Test'))
9+
{
10+
# Assumes dependencies have been resolved, so if this module is not available, run 'noop' task.
11+
if (-not (Get-Module -Name 'DscResource.Test' -ListAvailable))
12+
{
13+
# Redirect all streams to $null, except the error stream (stream 2)
14+
& "$PSScriptRoot/../../../build.ps1" -Tasks 'noop' 3>&1 4>&1 5>&1 6>&1 > $null
15+
}
16+
17+
# If the dependencies have not been resolved, this will throw an error.
18+
Import-Module -Name 'DscResource.Test' -Force -ErrorAction 'Stop'
19+
}
20+
}
21+
catch [System.IO.FileNotFoundException]
22+
{
23+
throw 'DscResource.Test module dependency not found. Please run ".\build.ps1 -ResolveDependency -Tasks build" first.'
24+
}
25+
}
26+
27+
BeforeAll {
28+
$script:dscModuleName = 'SqlServerDsc'
29+
30+
Import-Module -Name $script:dscModuleName -Force -ErrorAction 'Stop'
31+
32+
# Load SMO stub types
33+
Add-Type -Path "$PSScriptRoot/../Stubs/SMO.cs"
34+
35+
$PSDefaultParameterValues['Mock:ModuleName'] = $script:dscModuleName
36+
$PSDefaultParameterValues['Should:ModuleName'] = $script:dscModuleName
37+
}
38+
39+
AfterAll {
40+
$PSDefaultParameterValues.Remove('Mock:ModuleName')
41+
$PSDefaultParameterValues.Remove('Should:ModuleName')
42+
43+
# Unload the module being tested so that it doesn't impact any other tests.
44+
Get-Module -Name $script:dscModuleName -All | Remove-Module -Force
45+
}
46+
47+
Describe 'Enable-SqlDscAgentOperator' -Tag 'Public' {
48+
Context 'When command has correct parameter sets' {
49+
It 'Should have the correct parameters in parameter set <ExpectedParameterSetName>' -ForEach @(
50+
@{
51+
ExpectedParameterSetName = 'ServerObject'
52+
ExpectedParameters = '-ServerObject <Server> -Name <string> [-Force] [-Refresh] [-WhatIf] [-Confirm] [<CommonParameters>]'
53+
}
54+
@{
55+
ExpectedParameterSetName = 'OperatorObject'
56+
ExpectedParameters = '-OperatorObject <Operator> [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]'
57+
}
58+
) {
59+
$result = (Get-Command -Name 'Enable-SqlDscAgentOperator').ParameterSets |
60+
Where-Object -FilterScript { $_.Name -eq $ExpectedParameterSetName } |
61+
Select-Object -Property @(
62+
@{ Name = 'ParameterSetName'; Expression = { $_.Name } },
63+
@{ Name = 'ParameterListAsString'; Expression = { $_.ToString() } }
64+
)
65+
$result.ParameterSetName | Should -Be $ExpectedParameterSetName
66+
$result.ParameterListAsString | Should -Be $ExpectedParameters
67+
}
68+
}
69+
70+
Context 'When command has correct parameter properties' {
71+
It 'Should have ServerObject as a mandatory parameter in ServerObject parameter set' {
72+
$parameterInfo = (Get-Command -Name 'Enable-SqlDscAgentOperator').Parameters['ServerObject']
73+
$parameterInfo.ParameterSets['ServerObject'].IsMandatory | Should -BeTrue
74+
}
75+
76+
It 'Should have OperatorObject as a mandatory parameter in OperatorObject parameter set' {
77+
$parameterInfo = (Get-Command -Name 'Enable-SqlDscAgentOperator').Parameters['OperatorObject']
78+
$parameterInfo.ParameterSets['OperatorObject'].IsMandatory | Should -BeTrue
79+
}
80+
81+
It 'Should have Name as a mandatory parameter in ServerObject parameter set' {
82+
$parameterInfo = (Get-Command -Name 'Enable-SqlDscAgentOperator').Parameters['Name']
83+
$parameterInfo.ParameterSets['ServerObject'].IsMandatory | Should -BeTrue
84+
}
85+
}
86+
}

tests/Unit/Stubs/SMO.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,6 +1530,25 @@ public enum CompletionAction
15301530
Always = 3
15311531
}
15321532

1533+
// TypeName: Microsoft.SqlServer.Management.Smo.Agent.WeekDays
1534+
// Used by:
1535+
// SQL Agent Operator commands unit tests
1536+
// New-SqlDscAgentOperator.Tests.ps1
1537+
// Set-SqlDscAgentOperator.Tests.ps1
1538+
public enum WeekDays
1539+
{
1540+
Monday = 2,
1541+
Tuesday = 4,
1542+
Wednesday = 8,
1543+
Thursday = 16,
1544+
Friday = 32,
1545+
Saturday = 64,
1546+
Sunday = 1,
1547+
Weekdays = 62,
1548+
WeekEnds = 65,
1549+
EveryDay = 127
1550+
}
1551+
15331552
#endregion
15341553

15351554
#region Public Classes
@@ -1711,6 +1730,17 @@ public Operator(Microsoft.SqlServer.Management.Smo.Agent.JobServer jobServer, Sy
17111730
// Property
17121731
public System.String Name { get; set; }
17131732
public System.String EmailAddress { get; set; }
1733+
public System.String CategoryName { get; set; }
1734+
public System.String NetSendAddress { get; set; }
1735+
public System.String PagerAddress { get; set; }
1736+
public Microsoft.SqlServer.Management.Smo.Agent.WeekDays PagerDays { get; set; }
1737+
public System.TimeSpan SaturdayPagerEndTime { get; set; }
1738+
public System.TimeSpan SaturdayPagerStartTime { get; set; }
1739+
public System.TimeSpan SundayPagerEndTime { get; set; }
1740+
public System.TimeSpan SundayPagerStartTime { get; set; }
1741+
public System.TimeSpan WeekdayPagerEndTime { get; set; }
1742+
public System.TimeSpan WeekdayPagerStartTime { get; set; }
1743+
public System.Boolean Enabled { get; set; }
17141744
public Microsoft.SqlServer.Management.Sdk.Sfc.Urn Urn { get; set; }
17151745
public Microsoft.SqlServer.Management.Smo.PropertyCollection Properties { get; set; }
17161746
public System.Object UserData { get; set; }

0 commit comments

Comments
 (0)