forked from dataplat/dbatools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGet-DbaDatabase.Tests.ps1
112 lines (107 loc) · 3.59 KB
/
Get-DbaDatabase.Tests.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
$commandname = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "")
Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan
. "$PSScriptRoot\constants.ps1"
Describe "$commandname Integration Tests" -Tags "IntegrationTests" {
Context "Count system databases on localhost" {
$results = Get-DbaDatabase -SqlInstance $script:instance1 -ExcludeAllUserDb
It "reports the right number of databases" {
$results.Count | Should Be 4
}
}
Context "Check that temppb database is in Simple recovery mode" {
$results = Get-DbaDatabase -SqlInstance $script:instance1 -Database tempdb
It "tempdb's recovery mode is Simple" {
$results.RecoveryModel | Should Be "Simple"
}
}
Context "Check that master database is accessible" {
$results = Get-DbaDatabase -SqlInstance $script:instance1 -Database master
It "master is accessible" {
$results.IsAccessible | Should Be $true
}
}
}
Describe "$commandname Unit Tests" -Tags "UnitTests", Get-DBADatabase {
BeforeAll {
## Ensure it is the module that is being coded that is in the session when running just this Pester test
# Remove-Module dbatools -Force -ErrorAction SilentlyContinue
# $Base = Split-Path -parent $PSCommandPath
# Import-Module $Base\..\dbatools.psd1
}
Context "Input validation" {
BeforeAll {
Mock Stop-Function { } -ModuleName dbatools
Mock Test-FunctionInterrupt { } -ModuleName dbatools
}
It "Should Call Stop-Function if NoUserDbs and NoSystemDbs are specified" {
Get-DbaDatabase -SqlInstance Dummy -ExcludeAllSystemDb -ExcludeAllUserDb -ErrorAction SilentlyContinue | Should Be
}
It "Validates that Stop Function Mock has been called" {
## Nope I have no idea why it's two either - RMS
$assertMockParams = @{
'CommandName' = 'Stop-Function'
'Times' = 2
'Exactly' = $true
'Module' = 'dbatools'
}
Assert-MockCalled @assertMockParams
}
It "Validates that Test-FunctionInterrupt Mock has been called" {
$assertMockParams = @{
'CommandName' = 'Test-FunctionInterrupt'
'Times' = 1
'Exactly' = $true
'Module' = 'dbatools'
}
Assert-MockCalled @assertMockParams
}
}
Context "Output" {
It "Should have Last Read and Last Write Property when IncludeLastUsed switch is added" {
Mock Connect-SQLInstance -MockWith {
[object]@{
Name = 'SQLServerName';
Databases = [object]@(
@{
Name = 'db1';
Status = 'Normal';
ReadOnly = 'false';
IsSystemObject = 'false';
RecoveryModel = 'Full';
Owner = 'sa'
}
); #databases
} #object
} -ModuleName dbatools #mock connect-sqlserver
function Invoke-QueryDBlastUsed { }
Mock Invoke-QueryDBlastUsed -MockWith {
[object]
@{
dbname = 'db1';
last_read = (Get-Date).AddHours(-1);
last_write = (Get-Date).AddHours(-1)
}
} -ModuleName dbatools
(Get-DbaDatabase -SqlInstance SQLServerName -IncludeLastUsed).LastRead -ne $null | Should Be $true
(Get-DbaDatabase -SqlInstance SQLServerName -IncludeLastUsed).LastWrite -ne $null | Should Be $true
}
It "Validates that Connect-SqlInstance Mock has been called" {
$assertMockParams = @{
'CommandName' = 'Connect-SqlInstance'
'Times' = 2
'Exactly' = $true
'Module' = 'dbatools'
}
Assert-MockCalled @assertMockParams
}
It "Validates that Invoke-QueryDBlastUsed Mock has been called" {
$assertMockParams = @{
'CommandName' = 'Invoke-QueryDBlastUsed'
'Times' = 2
'Exactly' = $true
'Module' = 'dbatools'
}
Assert-MockCalled @assertMockParams
}
}
}