Skip to content

Commit 1457686

Browse files
committed
Refactor Suspend-SqlDscDatabase tests to track KillAllProcesses calls and update mock behavior
1 parent 73f8b0c commit 1457686

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

tests/Unit/Public/Suspend-SqlDscDatabase.Tests.ps1

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -223,33 +223,35 @@ Describe 'Suspend-SqlDscDatabase' -Tag 'Public' {
223223
$mockDatabaseObject = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Database' -ArgumentList @($mockServerObject, 'TestDatabase')
224224
$mockDatabaseObject.Status = [Microsoft.SqlServer.Management.Smo.DatabaseStatus]::Normal
225225

226-
$script:setOfflineForceValue = $null
226+
$script:killAllProcessesCalled = $false
227227

228-
# Override SetOffline to track the Force parameter
229-
$mockDatabaseObject | Add-Member -MemberType ScriptMethod -Name SetOffline -Value {
230-
param($ForceDisconnect = $false)
228+
# Override KillAllProcesses to track if it was called
229+
$mockServerObject | Add-Member -MemberType ScriptMethod -Name KillAllProcesses -Value {
230+
param($DatabaseName)
231231

232-
$script:setOfflineForceValue = $ForceDisconnect
233-
$this.Status = [Microsoft.SqlServer.Management.Smo.DatabaseStatus]::Offline
232+
$script:killAllProcessesCalled = $true
234233
} -Force
235234

236235
Mock -CommandName 'Get-SqlDscDatabase' -MockWith {
237236
return $mockDatabaseObject
238237
}
239238
}
240239

241-
It 'Should call SetOffline with Force when Force parameter is specified' {
240+
It 'Should call KillAllProcesses when Force parameter is specified' {
241+
$script:killAllProcessesCalled = $false
242+
242243
Suspend-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -Force -Confirm:$false
243244

244-
$script:setOfflineForceValue | Should -BeTrue
245+
$script:killAllProcessesCalled | Should -BeTrue
245246
}
246247

247-
It 'Should call SetOffline without Force when Force parameter is not specified' {
248+
It 'Should not call KillAllProcesses when Force parameter is not specified' {
248249
$mockDatabaseObject.Status = [Microsoft.SqlServer.Management.Smo.DatabaseStatus]::Normal
250+
$script:killAllProcessesCalled = $false
249251

250252
Suspend-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -Confirm:$false
251253

252-
$script:setOfflineForceValue | Should -BeFalse
254+
$script:killAllProcessesCalled | Should -BeFalse
253255
}
254256
}
255257

@@ -292,7 +294,16 @@ Describe 'Suspend-SqlDscDatabase' -Tag 'Public' {
292294
}
293295

294296
It 'Should throw a terminating error when SetOffline fails' {
295-
{ Suspend-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -Force } | Should -Throw -ExpectedMessage '*Failed to take database*offline*'
297+
{ Suspend-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -Confirm:$false } | Should -Throw -ExpectedMessage '*Failed to take database*offline*'
298+
}
299+
300+
It 'Should throw a terminating error when KillAllProcesses fails' {
301+
# Override KillAllProcesses to throw an exception
302+
$mockServerObject | Add-Member -MemberType ScriptMethod -Name KillAllProcesses -Value {
303+
throw 'Failed to kill processes'
304+
} -Force
305+
306+
{ Suspend-SqlDscDatabase -ServerObject $mockServerObject -Name 'TestDatabase' -Force -Confirm:$false } | Should -Throw -ExpectedMessage '*Failed to kill processes*'
296307
}
297308
}
298309
}

tests/Unit/Stubs/SMO.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,10 @@ public void Revoke( Microsoft.SqlServer.Management.Smo.ServerPermissionSet permi
517517
{
518518
}
519519

520+
public void KillAllProcesses( string databaseName )
521+
{
522+
}
523+
520524
// Property for SQL Agent support
521525
public Microsoft.SqlServer.Management.Smo.Agent.JobServer JobServer { get; set; }
522526

@@ -985,7 +989,7 @@ public void SetOnline()
985989
this.Status = DatabaseStatus.Normal;
986990
}
987991

988-
public void SetOffline(bool forceDisconnect = false)
992+
public void SetOffline()
989993
{
990994
this.Status = DatabaseStatus.Offline;
991995
}

0 commit comments

Comments
 (0)