diff --git a/CHANGELOG.md b/CHANGELOG.md index 2163ff3677..11fee37684 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - SqlDatabase - Fixed logic in `Set-SqlDscDatabaseProperty` so pipeline input is properly handled in the cmdlet's `Process` block. ([issue #2456](https://github.com/dsccommunity/SqlServerDsc/issues/2456)) +- SqlRole + - `Get-TargetResource` and `Test-TargetResource` always return successfully. + - Fix if statements checking the parameters are present. ([issue #1702](https://github.com/dsccommunity/SqlServerDsc/issues/1702)) ### Changed diff --git a/source/DSCResources/DSC_SqlRole/DSC_SqlRole.psm1 b/source/DSCResources/DSC_SqlRole/DSC_SqlRole.psm1 index 36ae7b302f..73206b49e4 100644 --- a/source/DSCResources/DSC_SqlRole/DSC_SqlRole.psm1 +++ b/source/DSCResources/DSC_SqlRole/DSC_SqlRole.psm1 @@ -50,15 +50,14 @@ function Get-TargetResource $ServerRoleName ) - $sqlServerObject = Connect-SQL -ServerName $ServerName -InstanceName $InstanceName -ErrorAction 'Stop' + $sqlServerObject = Connect-SQL -ServerName $ServerName -InstanceName $InstanceName -ErrorAction 'SilentlyContinue' $ensure = 'Absent' $membersInRole = $null if ($sqlServerObject) { Write-Verbose -Message ( - $script:localizedData.GetProperties ` - -f $ServerRoleName + $script:localizedData.GetProperties -f $ServerRoleName ) if ($sqlServerRoleObject = $sqlServerObject.Roles[$ServerRoleName]) @@ -70,10 +69,8 @@ function Get-TargetResource } catch { - $errorMessage = $script:localizedData.EnumMemberNamesServerRoleGetError ` - -f $ServerName, $InstanceName, $ServerRoleName - - New-InvalidOperationException -Message $errorMessage -ErrorRecord $_ + Write-Verbose -Message ($script:localizedData.EnumMemberNamesServerRoleGetError ` + -f $ServerName, $InstanceName, $ServerRoleName) } } } @@ -237,7 +234,7 @@ function Set-TargetResource $correctedParameters = Get-CorrectedMemberParameters @originalParameters - if ($Members) + if ($PSBoundParameters.ContainsKey('Members')) { $memberNamesInRoleObject = $sqlServerObject.Roles[$ServerRoleName].EnumMemberNames() @@ -263,7 +260,7 @@ function Set-TargetResource } else { - if ($MembersToInclude) + if ($PSBoundParameters.ContainsKey('MembersToInclude')) { $memberNamesInRoleObject = $sqlServerObject.Roles[$ServerRoleName].EnumMemberNames() @@ -278,7 +275,7 @@ function Set-TargetResource } } - if ($MembersToExclude) + if ($PSBoundParameters.ContainsKey('MembersToExclude')) { $memberNamesInRoleObject = $sqlServerObject.Roles[$ServerRoleName].EnumMemberNames() @@ -428,9 +425,9 @@ function Test-TargetResource } else { - if ($Members) + if ($PSBoundParameters.ContainsKey('Members')) { - if ( $null -ne (Compare-Object -ReferenceObject $getTargetResourceResult.Members -DifferenceObject $correctedParameters.Members)) + if ($null -ne (Compare-Object -ReferenceObject $getTargetResourceResult.Members -DifferenceObject $correctedParameters.Members)) { Write-Verbose -Message ( $script:localizedData.DesiredMembersNotPresent ` @@ -442,7 +439,7 @@ function Test-TargetResource } else { - if ($MembersToInclude) + if ($PSBoundParameters.ContainsKey('MembersToInclude')) { foreach ($memberToInclude in $correctedParameters.MembersToInclude) { @@ -458,7 +455,7 @@ function Test-TargetResource } } - if ($MembersToExclude) + if ($PSBoundParameters.ContainsKey('MembersToExclude')) { foreach ($memberToExclude in $correctedParameters.MembersToExclude) { diff --git a/tests/Unit/DSC_SqlRole.Tests.ps1 b/tests/Unit/DSC_SqlRole.Tests.ps1 index c9bf50307b..439f9becfe 100644 --- a/tests/Unit/DSC_SqlRole.Tests.ps1 +++ b/tests/Unit/DSC_SqlRole.Tests.ps1 @@ -311,24 +311,24 @@ Describe "DSC_SqlRole\Get-TargetResource" -Tag 'Get' { $mockInvalidOperationForEnumMethod = $true } - It 'Should throw the correct error' { + It 'Should not throw an error and return the correct result' { InModuleScope -ScriptBlock { Set-StrictMode -Version 1.0 $mockTestParameters.ServerRoleName = 'AdminSqlForBI' - $mockErrorMessage = $script:localizedData.EnumMemberNamesServerRoleGetError -f @( - 'localhost', - 'MSSQLSERVER', - 'AdminSqlForBI' - ) + $result = Get-TargetResource @mockTestParameters - { Get-TargetResource @mockTestParameters } | Should -Throw -ExpectedMessage ('*' + $mockErrorMessage + '*') + $result.ServerName | Should -Be $mockTestParameters.ServerName + $result.InstanceName | Should -Be $mockTestParameters.InstanceName + $result.ServerRoleName | Should -Be $mockTestParameters.ServerRoleName + $result.Ensure | Should -Be 'Absent' + $result.Members | Should -BeNullOrEmpty + $result.MembersToInclude | Should -BeNullOrEmpty + $result.MembersToExclude | Should -BeNullOrEmpty } - } - It 'Should call the mock function Connect-SQL' { - Should -Invoke -CommandName Connect-SQL -Exactly -Times 1 -Scope Context + Should -Invoke -CommandName Connect-SQL -Exactly -Times 1 -Scope It } } }