Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
913e672
`Set-SqlDscDatabase`: Refactor command
johlju Oct 26, 2025
8d3f53c
Update Get-SqlDscDatabase calls to include ErrorAction parameter for …
johlju Oct 27, 2025
4b60d19
Remove CatalogCollation parameter and update documentation for read-o…
johlju Oct 27, 2025
8633f82
Update CHANGELOG.md to clarify removal of OwnerName parameter and add…
johlju Oct 27, 2025
31bd4b7
Enhance Set-SqlDscDatabaseOwner with idempotence check and error hand…
johlju Oct 27, 2025
cfad5dd
Update Set-SqlDscDatabase documentation to clarify output behavior fo…
johlju Oct 27, 2025
c42783f
Fix error handling in Set-SqlDscDatabase to use correct database obje…
johlju Oct 27, 2025
a707b2a
Update compatibility level in Set-SqlDscDatabase tests to Version140 …
johlju Oct 27, 2025
6ae63ed
Add integration tests for Get-SqlDscCompatibilityLevel to verify comp…
johlju Oct 27, 2025
5586319
Refactor assertions in Set-SqlDscDatabase integration tests to use Sh…
johlju Oct 27, 2025
5f69cce
Add ErrorAction parameter to Get-SqlDscDatabase calls for improved er…
johlju Oct 27, 2025
929a663
Fix build script path in test files for correct dependency resolution
johlju Oct 27, 2025
914d116
Refactor Set-SqlDscDatabase tests to improve readability and add para…
johlju Oct 27, 2025
8a5caae
Add parameter validation tests for Set-SqlDscDatabaseOwner to ensure …
johlju Oct 27, 2025
baea0a7
Add Refresh parameter to Set-SqlDscDatabase call in test for desired …
johlju Oct 27, 2025
e8b5bc3
Refactor Get-SqlDscCompatibilityLevel function to improve readability…
johlju Oct 27, 2025
81587d9
Add suppression message for ScriptAnalyzer rule in Get-SqlDscCompatib…
johlju Oct 27, 2025
cfa078c
Add Refresh parameter to Set-SqlDscDatabase calls in tests for improv…
johlju Oct 27, 2025
b5af528
Add AfterAll block to disconnect from SQL database engine in Get-SqlD…
johlju Oct 27, 2025
1bf9a9d
Update stream redirection in test scripts to use the correct error st…
johlju Oct 27, 2025
a358150
Refactor Set-SqlDscDatabase to support all settable SMO Database prop…
johlju Oct 27, 2025
54ba3af
Add VersionMajor property to object initialization in SMO stub for en…
johlju Oct 27, 2025
0a6cc35
Add ErrorAction parameter to database connection and disconnection fo…
johlju Oct 27, 2025
8ac28ba
Add ErrorAction parameter to Connect-SqlDscDatabaseEngine and Disconn…
johlju Oct 27, 2025
77db78a
Add justification for suppressing PSUseDeclaredVarsMoreThanAssignment…
johlju Oct 27, 2025
063a2d0
Add tests for validating parameter sets in Get-SqlDscCompatibilityLevel
johlju Oct 27, 2025
806c6fc
Enhance mock server object by adding Refresh method to database colle…
johlju Oct 27, 2025
f29221f
Refactor Set-SqlDscDatabase to remove deprecated parameters and updat…
johlju Oct 27, 2025
308841f
Remove unused SetOwner method from mock database object in Set-SqlDsc…
johlju Oct 27, 2025
589c804
Add IsReadCommittedSnapshotOn parameter to Set-SqlDscDatabase and upd…
johlju Oct 28, 2025
5f22e1f
Add Set-SqlDscDatabaseProperty function to manage SQL Server database…
johlju Oct 28, 2025
da74cd8
Rename Set-SqlDscDatabase to Set-SqlDscDatabaseProperty and update re…
johlju Oct 28, 2025
03d87de
Add integration tests for Set-SqlDscDatabaseProperty to validate data…
johlju Oct 28, 2025
bf0579b
Add unit tests for Set-SqlDscDatabaseProperty to validate database pr…
johlju Oct 28, 2025
a9cbc61
Add parameters for DatabaseSnapshotBaseName, IsLedger, IsParameteriza…
johlju Oct 28, 2025
91f92e8
Add CatalogCollation parameter to New-SqlDscDatabase for system catal…
johlju Oct 28, 2025
c67fb70
Update type assertion for Set-SqlDscDatabaseProperty result to use ty…
johlju Oct 28, 2025
141c8fd
Remove OwnerName parameter from Set-SqlDscDatabaseProperty tests afte…
johlju Oct 28, 2025
eef8600
Add detailed status messages for Set-SqlDscDatabaseProperty and Set-S…
johlju Oct 28, 2025
17ba394
Add localized error message for property not found in Set-SqlDscDatab…
johlju Oct 28, 2025
f9bf9ca
Add Set-SqlDscDatabaseOwner integration tests to pipeline
johlju Oct 28, 2025
57b181b
Remove DefaultFullTextCatalog parameter and update MaxSizeInBytes typ…
johlju Oct 28, 2025
0bdc7fb
Update MaxSizeInBytes type to Double in parameter sets for Set-SqlDsc…
johlju Oct 28, 2025
9d98844
Fix Describe block name in Set-SqlDscDatabaseProperty tests
johlju Oct 28, 2025
d754bb3
Add note about SQL Server version requirement for CatalogCollation pa…
johlju Oct 28, 2025
d638be6
Add validation for CatalogCollation parameter and error message for u…
johlju Oct 28, 2025
6d34ecb
Add DelayedDurability parameter to Set-SqlDscDatabaseProperty and def…
johlju Oct 28, 2025
5a4f5ac
Fix error handling in Set-SqlDscDatabaseProperty to target the databa…
johlju Oct 28, 2025
be7d199
Change DelayedDurability property to use enum type in SMO stub
johlju Oct 28, 2025
d6b18d5
Update parameter sets in Set-SqlDscDatabaseProperty tests to include …
johlju Oct 28, 2025
c5cd62b
Add CatalogCollationType enum and update parameter set in New-SqlDscD…
johlju Oct 28, 2025
f29296f
Add refresh logic for database owner in Set-SqlDscDatabaseOwner funct…
johlju Oct 28, 2025
e191872
Implement feature X to enhance user experience and fix bug Y in module Z
johlju Oct 28, 2025
ff38703
Change CatalogCollation property to use CatalogCollationType enum for…
johlju Oct 28, 2025
4554951
Fix comments for clarity in BeforeDiscovery block of Set-SqlDscDataba…
johlju Oct 28, 2025
df95655
Refactor Set-SqlDscDatabaseOwner test to ensure SetOwner is not calle…
johlju Oct 28, 2025
d7a512a
Add CatalogCollation property to enum properties in database property…
johlju Oct 28, 2025
527ae77
Update Get-SqlDscDatabase calls to include Refresh parameter for accu…
johlju Oct 28, 2025
1878d66
Enhance Set-SqlDscDatabaseOwner to call Alter after setting owner for…
johlju Oct 28, 2025
810fe69
Add refresh logic to Get-SqlDscDatabase for updated database object r…
johlju Oct 29, 2025
75271aa
Add verbose logging for original database owner and update Set-SqlDsc…
johlju Oct 29, 2025
689fdfe
Add DropExistingUser parameter to Set-SqlDscDatabaseOwner for user ac…
johlju Oct 29, 2025
4959ec0
Add Refresh method to SMO class for improved state management
johlju Oct 29, 2025
9559d31
Refactor Set-SqlDscDatabaseOwner to ensure database object is refresh…
johlju Oct 29, 2025
a7ba2b8
Remove obsolete test case for non-existent database in Set-SqlDscData…
johlju Oct 29, 2025
480db6b
Update error code in Set-SqlDscDatabaseOwner for improved error handling
johlju Oct 29, 2025
a00092a
Fix formatting in documentation for Set-SqlDscDatabaseOwner parameter…
johlju Oct 30, 2025
1f2dd60
Comment out Alter method calls in Set-SqlDscDatabaseOwner for debuggi…
johlju Oct 30, 2025
4a7a5d3
Remove commented Alter method calls in Set-SqlDscDatabaseOwner for cl…
johlju Oct 30, 2025
9a86402
Add Get-SqlDscCompatibilityLevel integration test to pipeline and doc…
johlju Oct 31, 2025
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
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- BREAKING CHANGE: Removed public command `Test-SqlDscDatabase`. Use
`Test-SqlDscIsDatabase` to check existence. For property checks, use
`Test-SqlDscDatabaseProperty`. See [issue #2201](https://github.com/dsccommunity/SqlServerDsc/issues/2201).
- BREAKING CHANGE: `Set-SqlDscDatabase`
- Removed parameter `OwnerName`. Use the new command `Set-SqlDscDatabaseOwner`
to change database ownership instead.

### Added

- Added public command `Set-SqlDscDatabaseOwner` to change the owner of a SQL Server
database. This command uses the SMO `SetOwner()` method and supports both
`ServerObject` and `DatabaseObject` parameter sets. It replaces the `OwnerName`
parameter that was removed from `Set-SqlDscDatabase`.
- Added public command `Test-SqlDscIsDatabase` to test if a database exists on a
SQL Server Database Engine instance ([issue #2201](https://github.com/dsccommunity/SqlServerDsc/issues/2201)).
- Added public command `Get-SqlDscSetupLog` to retrieve SQL Server setup bootstrap
Expand Down Expand Up @@ -220,6 +227,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- `Set-SqlDscDatabase`
- BREAKING CHANGE: Completely refactored to support all 85+ settable SMO Database
properties as parameters. The command now uses a generic property-setting loop
instead of hard-coded property handling. This allows setting any writable
property of the `Microsoft.SqlServer.Management.Smo.Database` class, including:
- 46 Boolean properties (e.g., `AnsiNullDefault`, `AutoClose`, `AutoShrink`,
`IsSystemObject`, `RecursiveTriggersEnabled`)
- 8 Int32 properties (e.g., `AutoCreateStatisticsIncremental`, `DataSpaceUsage`,
`IndexSpaceUsage`, `TargetRecoveryTime`)
- 1 Int64 property (`MaxSizeInBytes`)
- 19 String properties (e.g., `Collation`, `DefaultFileGroup`, `DefaultSchema`,
`PrimaryFilePath`)
- 11 Enum properties (e.g., `CompatibilityLevel`, `PageVerify`, `RecoveryModel`,
`UserAccess`)
- Removed all property-specific validation logic - SMO now handles validation
- Removed individual property update messages - now uses generic
`Database_UpdatingProperty` message
- Added check to skip updating properties that are already set to the desired value
- Properties are only modified if they differ from the current value, reducing
unnecessary database operations
- `Remove-SqlDscAgentAlert`
- Now uses `$PSCmdlet.ThrowTerminatingError()` instead of exception helper
functions for proper terminating error handling ([issue #2193](https://github.com/dsccommunity/SqlServerDsc/issues/2193)).
Expand Down
780 changes: 664 additions & 116 deletions source/Public/Set-SqlDscDatabase.ps1

Large diffs are not rendered by default.

151 changes: 151 additions & 0 deletions source/Public/Set-SqlDscDatabaseOwner.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
<#
.SYNOPSIS
Sets the owner of a database in a SQL Server Database Engine instance.

.DESCRIPTION
This command sets the owner of a database in a SQL Server Database Engine instance.

The owner must be a valid login on the SQL Server instance. The command uses
the SetOwner() method on the SMO Database object to change the ownership.

.PARAMETER ServerObject
Specifies current server connection object.

.PARAMETER Name
Specifies the name of the database to modify.

.PARAMETER DatabaseObject
Specifies the database object to modify (from Get-SqlDscDatabase).

.PARAMETER Refresh
Specifies that the **ServerObject**'s databases should be refreshed before
trying to get the database object. This is helpful when databases could have been
modified outside of the **ServerObject**, for example through T-SQL. But
on instances with a large amount of databases it might be better to make
sure the **ServerObject** is recent enough.

This parameter is only used when setting owner using **ServerObject** and
**Name** parameters.

.PARAMETER OwnerName
Specifies the name of the login that should be the owner of the database.

.PARAMETER Force
Specifies that the database owner should be modified without any confirmation.

.PARAMETER PassThru
Specifies that the database object should be returned after modification.

.EXAMPLE
$serverObject = Connect-SqlDscDatabaseEngine -InstanceName 'MyInstance'
Set-SqlDscDatabaseOwner -ServerObject $serverObject -Name 'MyDatabase' -OwnerName 'sa'

Sets the owner of the database named **MyDatabase** to **sa**.

.EXAMPLE
$serverObject = Connect-SqlDscDatabaseEngine -InstanceName 'MyInstance'
$databaseObject = $serverObject | Get-SqlDscDatabase -Name 'MyDatabase'
Set-SqlDscDatabaseOwner -DatabaseObject $databaseObject -OwnerName 'DOMAIN\SqlAdmin' -Force

Sets the owner of the database using a database object without prompting for confirmation.

.EXAMPLE
$serverObject = Connect-SqlDscDatabaseEngine -InstanceName 'MyInstance'
Set-SqlDscDatabaseOwner -ServerObject $serverObject -Name 'MyDatabase' -OwnerName 'sa' -PassThru

Sets the owner and returns the updated database object.

.INPUTS
`[Microsoft.SqlServer.Management.Smo.Database]`

The database object to modify (from Get-SqlDscDatabase).

.OUTPUTS
None. But when **PassThru** is specified the output is `[Microsoft.SqlServer.Management.Smo.Database]`.
#>
function Set-SqlDscDatabaseOwner
{
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('UseSyntacticallyCorrectExamples', '', Justification = 'Because the rule does not yet support parsing the code when a parameter type is not available. The ScriptAnalyzer rule UseSyntacticallyCorrectExamples will always error in the editor due to https://github.com/indented-automation/Indented.ScriptAnalyzerRules/issues.')]
[OutputType()]
[OutputType([Microsoft.SqlServer.Management.Smo.Database])]
[CmdletBinding(DefaultParameterSetName = 'ServerObjectSet', SupportsShouldProcess = $true, ConfirmImpact = 'Medium')]
param
(
[Parameter(ParameterSetName = 'ServerObjectSet', Mandatory = $true)]
[Microsoft.SqlServer.Management.Smo.Server]
$ServerObject,

[Parameter(ParameterSetName = 'ServerObjectSet', Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[System.String]
$Name,

[Parameter(ParameterSetName = 'ServerObjectSet')]
[System.Management.Automation.SwitchParameter]
$Refresh,

[Parameter(ParameterSetName = 'DatabaseObjectSet', Mandatory = $true, ValueFromPipeline = $true)]
[Microsoft.SqlServer.Management.Smo.Database]
$DatabaseObject,

[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[System.String]
$OwnerName,

[Parameter()]
[System.Management.Automation.SwitchParameter]
$Force,

[Parameter()]
[System.Management.Automation.SwitchParameter]
$PassThru
)

begin
{
if ($Force.IsPresent -and -not $Confirm)
{
$ConfirmPreference = 'None'
}
}

process
{
# Get the database object based on the parameter set
switch ($PSCmdlet.ParameterSetName)
{
'ServerObjectSet'
{
$previousErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'Stop'

$sqlDatabaseObject = $ServerObject |
Get-SqlDscDatabase -Name $Name -Refresh:$Refresh -ErrorAction 'Stop'

$ErrorActionPreference = $previousErrorActionPreference
}

'DatabaseObjectSet'
{
$sqlDatabaseObject = $DatabaseObject
}
}

$verboseDescriptionMessage = $script:localizedData.DatabaseOwner_Set_ShouldProcessVerboseDescription -f $sqlDatabaseObject.Name, $OwnerName, $sqlDatabaseObject.Parent.InstanceName
$verboseWarningMessage = $script:localizedData.DatabaseOwner_Set_ShouldProcessVerboseWarning -f $sqlDatabaseObject.Name, $OwnerName
$captionMessage = $script:localizedData.DatabaseOwner_Set_ShouldProcessCaption

if ($PSCmdlet.ShouldProcess($verboseDescriptionMessage, $verboseWarningMessage, $captionMessage))
{
Write-Debug -Message ($script:localizedData.DatabaseOwner_Updating -f $sqlDatabaseObject.Name, $OwnerName)
$sqlDatabaseObject.SetOwner($OwnerName)
Write-Debug -Message ($script:localizedData.DatabaseOwner_Updated -f $sqlDatabaseObject.Name, $OwnerName)

if ($PassThru.IsPresent)
{
return $sqlDatabaseObject
}
}
}
}
17 changes: 13 additions & 4 deletions source/en-US/SqlServerDsc.strings.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -367,14 +367,23 @@ ConvertFrom-StringData @'
Database_Updating = Updating database '{0}'.
Database_Updated = Database '{0}' was updated successfully.
Database_SetFailed = Failed to set properties of database '{0}' on instance '{1}'.
Database_UpdatingCollation = Changing the database collation to '{0}'.
Database_UpdatingCompatibilityLevel = Changing the database compatibility level to '{0}'.
Database_UpdatingRecoveryModel = Changing the database recovery model to '{0}'.
Database_UpdatingOwner = Changing the database owner to '{0}'.
Database_UpdatingProperty = Setting property '{0}' to '{1}'.
Database_PropertyAlreadySet = Property '{0}' is already set to '{1}'.
Database_NoPropertiesChanged = No properties were changed for database '{0}'.
Database_Set_ShouldProcessVerboseDescription = Setting properties of the database '{0}' on the instance '{1}'.
Database_Set_ShouldProcessVerboseWarning = Are you sure you want to modify the database '{0}'?
# This string shall not end with full stop (.) since it is used as a title of ShouldProcess messages.
Database_Set_ShouldProcessCaption = Set database properties on instance
Set_SqlDscDatabase_InvalidCompatibilityLevel = The specified compatibility level '{0}' is not a valid compatibility level for the instance '{1}'.
Set_SqlDscDatabase_InvalidCollation = The specified collation '{0}' is not a valid collation for the instance '{1}'.

## Set-SqlDscDatabaseOwner
DatabaseOwner_Updating = Setting owner of database '{0}' to '{1}'.
DatabaseOwner_Updated = Owner of database '{0}' was set to '{1}'.
DatabaseOwner_Set_ShouldProcessVerboseDescription = Setting the owner of the database '{0}' to '{1}' on the instance '{2}'.
DatabaseOwner_Set_ShouldProcessVerboseWarning = Are you sure you want to change the owner of the database '{0}' to '{1}'?
# This string shall not end with full stop (.) since it is used as a title of ShouldProcess messages.
DatabaseOwner_Set_ShouldProcessCaption = Set database owner on instance

## Remove-SqlDscDatabase
Database_RemoveFailed = Failed to remove database '{0}' from instance '{1}'.
Expand Down
1 change: 1 addition & 0 deletions tests/Integration/Commands/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ Get-SqlDscDatabase | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTES
ConvertFrom-SqlDscDatabasePermission | 4 | 0 (Prerequisites) | - | -
New-SqlDscDatabase | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | SqlDscIntegrationTestDatabase_Persistent database
Set-SqlDscDatabase | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Set-SqlDscDatabaseOwner | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Test-SqlDscIsDatabase | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Test-SqlDscDatabaseProperty | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | -
Get-SqlDscDatabasePermission | 4 | 1 (Install-SqlDscServer), 0 (Prerequisites) | DSCSQLTEST | Test database, Test user
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,21 +76,68 @@ Describe 'Set-SqlDscDatabase' -Tag @('Integration_SQL2017', 'Integration_SQL2019
$updatedDb.RecoveryModel | Should -Be 'Simple'
}

It 'Should set owner name successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -OwnerName ('{0}\SqlAdmin' -f $script:mockComputerName) -Force -ErrorAction 'Stop'
It 'Should set compatibility level successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -CompatibilityLevel 'Version150' -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -ErrorAction 'Stop'
$updatedDb.Owner | Should -Be ('{0}\SqlAdmin' -f $script:mockComputerName)
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName
$updatedDb.CompatibilityLevel | Should -Be 'Version150'
}

It 'Should set AutoClose successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -AutoClose $true -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName
$updatedDb.AutoClose | Should -Be $true

# Reset to default
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -AutoClose $false -Force -ErrorAction 'Stop'
}

It 'Should set AutoShrink successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -AutoShrink $true -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName
$updatedDb.AutoShrink | Should -Be $true

# Reset to default
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -AutoShrink $false -Force -ErrorAction 'Stop'
}

It 'Should set PageVerify successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -PageVerify 'TornPageDetection' -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName
$updatedDb.PageVerify | Should -Be 'TornPageDetection'

# Reset to default
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -PageVerify 'Checksum' -Force -ErrorAction 'Stop'
}

It 'Should set multiple properties successfully' {
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -RecoveryModel 'Full' -OwnerName ('{0}\SqlAdmin' -f $script:mockComputerName) -Force -ErrorAction 'Stop'
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -RecoveryModel 'Full' -AutoClose $false -AutoShrink $false -PageVerify 'Checksum' -Force -ErrorAction 'Stop'

# Verify the changes
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -ErrorAction 'Stop'
$updatedDb.RecoveryModel | Should -Be 'Full'
$updatedDb.Owner | Should -Be ('{0}\SqlAdmin' -f $script:mockComputerName)
$updatedDb.AutoClose | Should -Be $false
$updatedDb.AutoShrink | Should -Be $false
$updatedDb.PageVerify | Should -Be 'Checksum'
}

It 'Should be idempotent when property is already set' {
# Set property
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -RecoveryModel 'Simple' -Force -ErrorAction 'Stop'

# Set same property again - should not throw
$null = Set-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName -RecoveryModel 'Simple' -Force -ErrorAction 'Stop'

# Verify the value is still correct
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseName
$updatedDb.RecoveryModel | Should -Be 'Simple'
}

It 'Should throw error when trying to set properties of non-existent database' {
Expand All @@ -110,23 +157,37 @@ Describe 'Set-SqlDscDatabase' -Tag @('Integration_SQL2017', 'Integration_SQL2019
$updatedDb.RecoveryModel | Should -Be 'Simple'
}

It 'Should set owner name using database object' {
It 'Should set AutoClose using database object' {
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'

$null = Set-SqlDscDatabase -DatabaseObject $databaseObject -OwnerName ('{0}\SqlAdmin' -f $script:mockComputerName) -Force -ErrorAction 'Stop'
$null = Set-SqlDscDatabase -DatabaseObject $databaseObject -AutoClose $true -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb.Owner | Should -Be ('{0}\SqlAdmin' -f $script:mockComputerName)
$updatedDb.AutoClose | Should -Be $true

# Reset to default
$null = Set-SqlDscDatabase -DatabaseObject $databaseObject -AutoClose $false -Force -ErrorAction 'Stop'
}

It 'Should set multiple properties using database object' {
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'

$null = Set-SqlDscDatabase -DatabaseObject $databaseObject -RecoveryModel 'Full' -PageVerify 'TornPageDetection' -Force -ErrorAction 'Stop'

# Verify the changes
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb.RecoveryModel | Should -Be 'Full'
$updatedDb.PageVerify | Should -Be 'TornPageDetection'
}

It 'Should support pipeline input with database object' {
$databaseObject = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$null = $databaseObject | Set-SqlDscDatabase -RecoveryModel 'Full' -Force -ErrorAction 'Stop'
$null = $databaseObject | Set-SqlDscDatabase -RecoveryModel 'BulkLogged' -Force -ErrorAction 'Stop'

# Verify the change
$updatedDb = Get-SqlDscDatabase -ServerObject $script:serverObject -Name $script:testDatabaseNameForObject -ErrorAction 'Stop'
$updatedDb.RecoveryModel | Should -Be 'Full'
$updatedDb.RecoveryModel | Should -Be 'BulkLogged'
}
}

Expand Down
Loading
Loading