Skip to content

Commit 140973a

Browse files
Copilotjohlju
andcommitted
Fix PSScriptAnalyzer issues in Get-SqlDscRole - remove trailing whitespace and fix OutputType consistency
Co-authored-by: johlju <7189721+johlju@users.noreply.github.com>
1 parent bd29e3c commit 140973a

2 files changed

Lines changed: 38 additions & 19 deletions

File tree

source/Public/Get-SqlDscRole.ps1

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,28 +65,39 @@ function Get-SqlDscRole
6565

6666
Write-Verbose -Message ($script:localizedData.Role_Get -f $ServerObject.InstanceName)
6767

68+
$roleObject = @()
69+
6870
if ($PSBoundParameters.ContainsKey('Name'))
6971
{
70-
$serverRole = $ServerObject.Roles[$Name]
72+
$roleObject = $ServerObject.Roles[$Name]
7173

72-
if ($serverRole)
74+
if (-not $roleObject)
7375
{
74-
Write-Verbose -Message ($script:localizedData.Role_Found -f $Name)
75-
76-
return $serverRole
76+
Write-Verbose -Message ($script:localizedData.Role_NotFound -f $Name)
77+
78+
$missingRoleMessage = $script:localizedData.Role_NotFound -f $Name
79+
80+
$writeErrorParameters = @{
81+
Message = $missingRoleMessage
82+
Category = 'ObjectNotFound'
83+
ErrorId = 'GSDR0001' # cspell: disable-line
84+
TargetObject = $Name
85+
}
86+
87+
Write-Error @writeErrorParameters
7788
}
7889
else
7990
{
80-
Write-Verbose -Message ($script:localizedData.Role_NotFound -f $Name)
81-
82-
return $null
91+
Write-Verbose -Message ($script:localizedData.Role_Found -f $Name)
8392
}
8493
}
8594
else
8695
{
8796
Write-Verbose -Message ($script:localizedData.Role_GetAll)
88-
89-
return , $ServerObject.Roles
97+
98+
$roleObject = $ServerObject.Roles
9099
}
100+
101+
return [Microsoft.SqlServer.Management.Smo.ServerRole[]] $roleObject
91102
}
92103
}

tests/Unit/Public/Get-SqlDscRole.Tests.ps1

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ Describe 'Get-SqlDscRole' -Tag 'Public' {
5656
$mockServerObject | Add-Member -MemberType 'NoteProperty' -Name 'InstanceName' -Value 'TestInstance' -Force
5757
$mockServerObject | Add-Member -MemberType 'ScriptProperty' -Name 'Roles' -Value {
5858
$roleCollection = @(
59-
(New-Object -TypeName Object | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value 'sysadmin' -PassThru -Force),
60-
(New-Object -TypeName Object | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value 'CustomRole1' -PassThru -Force)
59+
(New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.ServerRole' -ArgumentList @($mockServerObject, 'sysadmin')),
60+
(New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.ServerRole' -ArgumentList @($mockServerObject, 'CustomRole1'))
6161
)
6262
return $roleCollection | Add-Member -MemberType 'ScriptMethod' -Name 'Refresh' -Value {
6363
# Mock implementation
@@ -83,7 +83,7 @@ Describe 'Get-SqlDscRole' -Tag 'Public' {
8383
$mockServerObjectWithRefresh | Add-Member -MemberType 'NoteProperty' -Name 'InstanceName' -Value 'TestInstance' -Force
8484
$mockServerObjectWithRefresh | Add-Member -MemberType 'ScriptProperty' -Name 'Roles' -Value {
8585
$roleCollection = @(
86-
(New-Object -TypeName Object | Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value 'sysadmin' -PassThru -Force)
86+
(New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.ServerRole' -ArgumentList @($mockServerObjectWithRefresh, 'sysadmin'))
8787
)
8888
return $roleCollection | Add-Member -MemberType 'ScriptMethod' -Name 'Refresh' -Value {
8989
$script:refreshCalled = $true
@@ -103,10 +103,8 @@ Describe 'Get-SqlDscRole' -Tag 'Public' {
103103
$mockServerObject | Add-Member -MemberType 'NoteProperty' -Name 'InstanceName' -Value 'TestInstance' -Force
104104
$mockServerObject | Add-Member -MemberType 'ScriptProperty' -Name 'Roles' -Value {
105105
return @{
106-
'sysadmin' = New-Object -TypeName Object |
107-
Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value 'sysadmin' -PassThru -Force
108-
'CustomRole1' = New-Object -TypeName Object |
109-
Add-Member -MemberType 'NoteProperty' -Name 'Name' -Value 'CustomRole1' -PassThru -Force
106+
'sysadmin' = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.ServerRole' -ArgumentList @($mockServerObject, 'sysadmin')
107+
'CustomRole1' = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.ServerRole' -ArgumentList @($mockServerObject, 'CustomRole1')
110108
} | Add-Member -MemberType 'ScriptMethod' -Name 'Refresh' -Value {
111109
# Mock implementation
112110
} -PassThru -Force
@@ -122,10 +120,20 @@ Describe 'Get-SqlDscRole' -Tag 'Public' {
122120
$result.Name | Should -Be 'sysadmin'
123121
}
124122

125-
It 'Should return null when the specified role does not exist' {
123+
It 'Should throw the correct error when the specified role does not exist' {
126124
Mock -CommandName 'Write-Verbose'
127125

128-
$result = Get-SqlDscRole -ServerObject $mockServerObject -Name 'NonExistentRole'
126+
# Test the exact error message first
127+
$expectedMessage = 'Server role ''NonExistentRole'' was not found.'
128+
129+
{ Get-SqlDscRole -ServerObject $mockServerObject -Name 'NonExistentRole' -ErrorAction 'Stop' } |
130+
Should -Throw -ExpectedMessage $expectedMessage
131+
}
132+
133+
It 'Should return empty result when ignoring the error' {
134+
Mock -CommandName 'Write-Verbose'
135+
136+
$result = Get-SqlDscRole -ServerObject $mockServerObject -Name 'NonExistentRole' -ErrorAction 'SilentlyContinue'
129137

130138
$result | Should -BeNullOrEmpty
131139
}

0 commit comments

Comments
 (0)