Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added integration tests for `Remove-SqlDscAudit` command to ensure it functions
correctly in real environments
[issue #2241](https://github.com/dsccommunity/SqlServerDsc/issues/2241).
- Added integration tests for `ConvertFrom-SqlDscDatabasePermission` command to
ensure it functions correctly in real environments
[issue #2211](https://github.com/dsccommunity/SqlServerDsc/issues/2211).
- Added integration tests for `Get-SqlDscStartupParameter` command to ensure it
functions correctly in real environments
[issue #2217](https://github.com/dsccommunity/SqlServerDsc/issues/2217).
Expand Down
1 change: 1 addition & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ stages:
'tests/Integration/Commands/Deny-SqlDscServerPermission.Integration.Tests.ps1'
'tests/Integration/Commands/Revoke-SqlDscServerPermission.Integration.Tests.ps1'
'tests/Integration/Commands/Get-SqlDscDatabase.Integration.Tests.ps1'
'tests/Integration/Commands/ConvertFrom-SqlDscDatabasePermission.Integration.Tests.ps1'
'tests/Integration/Commands/New-SqlDscDatabase.Integration.Tests.ps1'
'tests/Integration/Commands/Set-SqlDscDatabase.Integration.Tests.ps1'
'tests/Integration/Commands/Test-SqlDscDatabase.Integration.Tests.ps1'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Suppressing this rule because Script Analyzer does not understand Pester syntax.')]
param ()

BeforeDiscovery {
try
{
if (-not (Get-Module -Name 'DscResource.Test'))
{
# Assumes dependencies have been resolved, so if this module is not available, run 'noop' task.
if (-not (Get-Module -Name 'DscResource.Test' -ListAvailable))
{
# Redirect all streams to $null, except the error stream (stream 2)
& "$PSScriptRoot/../../../build.ps1" -Tasks 'noop' 3>&1 4>&1 5>&1 6>&1 > $null
}

# If the dependencies have not been resolved, this will throw an error.
Import-Module -Name 'DscResource.Test' -Force -ErrorAction 'Stop'
}
}
catch [System.IO.FileNotFoundException]
{
throw 'DscResource.Test module dependency not found. Please run ".\build.ps1 -ResolveDependency -Tasks noop" first.'
}
}

BeforeAll {
$script:moduleName = 'SqlServerDsc'

Import-Module -Name $script:moduleName -Force -ErrorAction 'Stop'
}

Describe 'ConvertFrom-SqlDscDatabasePermission' -Tag @('Integration_SQL2017', 'Integration_SQL2019', 'Integration_SQL2022') {
Context 'When converting DatabasePermission objects' {
Context 'When converting a single permission Grant state' {
It 'Should return a DatabasePermissionSet with correct permissions set' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Grant'
Permission = @('Connect', 'Select')
}
}

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Connect | Should -BeTrue
$result.Select | Should -BeTrue
$result.Update | Should -BeFalse
$result.Insert | Should -BeFalse
$result.Delete | Should -BeFalse
}
}

Context 'When converting multiple permissions' {
It 'Should return a DatabasePermissionSet with all specified permissions set' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Grant'
Permission = @('Connect', 'Select', 'Update', 'Insert')
}
}

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Connect | Should -BeTrue
$result.Select | Should -BeTrue
$result.Update | Should -BeTrue
$result.Insert | Should -BeTrue
$result.Delete | Should -BeFalse
$result.Alter | Should -BeFalse
}
}

Context 'When converting permission with GrantWithGrant state' {
It 'Should return a DatabasePermissionSet with correct permissions set regardless of state' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'GrantWithGrant'
Permission = @('Alter', 'CreateTable')
}
}

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Alter | Should -BeTrue
$result.CreateTable | Should -BeTrue
$result.Connect | Should -BeFalse
$result.Select | Should -BeFalse
}
}

Context 'When converting permission with Deny state' {
It 'Should return a DatabasePermissionSet with correct permissions set regardless of state' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Deny'
Permission = @('Delete', 'Execute')
}
}

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Delete | Should -BeTrue
$result.Execute | Should -BeTrue
$result.Connect | Should -BeFalse
$result.Select | Should -BeFalse
}
}

Context 'When using pipeline input' {
It 'Should accept DatabasePermission objects from the pipeline' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Grant'
Permission = @('Connect', 'ViewDefinition')
}
}

$result = $databasePermission | ConvertFrom-SqlDscDatabasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Connect | Should -BeTrue
$result.ViewDefinition | Should -BeTrue
$result.Select | Should -BeFalse
}
}

Context 'When processing multiple DatabasePermission objects through pipeline' {
It 'Should process each permission object and combine them into single DatabasePermissionSet object' {
$databasePermissions = & (Get-Module -Name $script:moduleName) {
@(
[DatabasePermission] @{
State = 'Grant'
Permission = @('Connect')
},
[DatabasePermission] @{
State = 'Grant'
Permission = @('Select', 'Update')
}
)
}

$result = $databasePermissions | ConvertFrom-SqlDscDatabasePermission -ErrorAction 'Stop'

# The command combines all permissions into a single DatabasePermissionSet
$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]

# All permissions from both objects should be set to true
$result.Connect | Should -BeTrue
$result.Select | Should -BeTrue
$result.Update | Should -BeTrue
$result.Insert | Should -BeFalse
$result.Delete | Should -BeFalse
}
}

Context 'When converting with empty permission array' {
It 'Should return a DatabasePermissionSet with no permissions set' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Grant'
Permission = @()
}
}

# Verify the DatabasePermission object was created successfully
$databasePermission | Should -Not -BeNullOrEmpty
$databasePermission.State | Should -Be 'Grant'
$databasePermission.Permission | Should -Be @()

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]
$result.Connect | Should -BeFalse
$result.Select | Should -BeFalse
$result.Update | Should -BeFalse
$result.Insert | Should -BeFalse
$result.Delete | Should -BeFalse
}
}

Context 'When verifying SMO object compatibility' {
It 'Should return a DatabasePermissionSet that can be used with SMO database operations' {
$databasePermission = & (Get-Module -Name $script:moduleName) {
[DatabasePermission] @{
State = 'Grant'
Permission = @('Connect', 'Select')
}
}

$result = ConvertFrom-SqlDscDatabasePermission -Permission $databasePermission -ErrorAction 'Stop'

# Verify the result has the expected SMO properties
$result | Should -Not -BeNullOrEmpty
$result | Should -BeOfType [Microsoft.SqlServer.Management.Smo.DatabasePermissionSet]

# Verify it has the correct SMO properties and methods available
$result | Get-Member -Name 'Connect' -MemberType Property | Should -Not -BeNullOrEmpty
$result | Get-Member -Name 'Select' -MemberType Property | Should -Not -BeNullOrEmpty
$result | Get-Member -Name 'ToString' -MemberType Method | Should -Not -BeNullOrEmpty

# Verify ToString() method works
$result.ToString() | Should -Not -BeNullOrEmpty
}
}
}
}
1 change: 1 addition & 0 deletions tests/Integration/Commands/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ Test-SqlDscServerPermission | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) |
Deny-SqlDscServerPermission | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | Denies AlterTrace permission to login (persistent)
Revoke-SqlDscServerPermission | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Get-SqlDscDatabase | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
ConvertFrom-SqlDscDatabasePermission | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
New-SqlDscDatabase | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | Test databases
Set-SqlDscDatabase | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Test-SqlDscDatabase | 2 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Expand Down
Loading