tests/Test-DbaDatabaseOwner.Tests.ps1
$CommandName = $MyInvocation.MyCommand.Name.Replace(".Tests.ps1", "") Write-Host -Object "Running $PSCommandpath" -ForegroundColor Cyan . "$PSScriptRoot\constants.ps1" Describe "$CommandName Unit Tests" -Tag "UnitTests" { Context "Validate parameters" { <# The $paramCount is adjusted based on the parameters your command will have. The $defaultParamCount is adjusted based on what type of command you are writing the test for: - Commands that *do not* include SupportShouldProcess, set defaultParamCount = 11 - Commands that *do* include SupportShouldProcess, set defaultParamCount = 13 #> $paramCount = 7 $defaultParamCount = 11 [object[]]$params = (Get-ChildItem function:\Test-DbaDatabaseOwner).Parameters.Keys $knownParameters = 'SqlInstance', 'SqlCredential', 'Database', 'ExcludeDatabase', 'TargetLogin', 'EnableException', 'Detailed' It "Should contain our specific parameters" { ( (Compare-Object -ReferenceObject $knownParameters -DifferenceObject $params -IncludeEqual | Where-Object SideIndicator -eq "==").Count ) | Should Be $paramCount } It "Should only contain $paramCount parameters" { $params.Count - $defaultParamCount | Should Be $paramCount } } InModuleScope 'dbatools' { Context "Connects to SQL Server" { It -Skip "Should not throw" { Mock Connect-SQLInstance -MockWith { [object]@{ Name = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'sa' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver { Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' } | Should Not throw } #It It -Skip "Should not return if no wrong owner for default" { Mock Connect-SQLInstance -MockWith { [object]@{ Name = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'sa' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver { Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' } | Should Not throw } #It It -Skip "Should return wrong owner information for one database with no owner specified" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'WrongOWner' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver $Result = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' $Result[0].SqlInstance | Should Be 'SQLServerName' $Result[0].Database | Should Be 'db1'; $Result[0].DBState | Should Be 'Normal'; $Result[0].CurrentOwner | Should Be 'WrongOWner'; $Result[0].TargetOwner | Should Be 'sa'; $Result[0].OwnerMatch | Should Be $False } # it It -Skip "Should return information for one database with correct owner with detail parameter" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'sa' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver $Result = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' $Result.SqlInstance | Should Be 'SQLServerName' $Result.Database | Should Be 'db1'; $Result.DBState | Should Be 'Normal'; $Result.CurrentOwner | Should Be 'sa'; $Result.TargetOwner | Should Be 'sa'; $Result.OwnerMatch | Should Be $True } # it It -Skip "Should return wrong owner information for one database with no owner specified and multiple databases" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'WrongOWner' } @{ Name = 'db2'; Status = 'Normal'; Owner = 'sa' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver $Result = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' $Result[0].SqlInstance | Should Be 'SQLServerName' $Result[0].Database | Should Be 'db1'; $Result[0].DBState | Should Be 'Normal'; $Result[0].CurrentOwner | Should Be 'WrongOWner'; $Result[0].TargetOwner | Should Be 'sa'; $Result[0].OwnerMatch | Should Be $False } # it It -Skip "Should return wrong owner information for two databases with no owner specified and multiple databases" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'WrongOWner' } @{ Name = 'db2'; Status = 'Normal'; Owner = 'WrongOWner' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver $Result = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' $Result[0].SqlInstance | Should Be 'SQLServerName' $Result[1].SqlInstance | Should Be 'SQLServerName' $Result[0].Database | Should Be 'db1'; $Result[1].Database | Should Be 'db2'; $Result[0].DBState | Should Be 'Normal'; $Result[1].DBState | Should Be 'Normal'; $Result[0].CurrentOwner | Should Be 'WrongOWner'; $Result[1].CurrentOwner | Should Be 'WrongOWner'; $Result[0].TargetOwner | Should Be 'sa'; $Result[1].TargetOwner | Should Be 'sa'; $Result[0].OwnerMatch | Should Be $False $Result[1].OwnerMatch | Should Be $False } # it It -Skip "Should call Stop-Function one time if Target Login does not exist on Server" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'WrongOwner' } @{ Name = 'db2'; Status = 'Normal'; Owner = 'WrongOwner' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver Mock Stop-Function {} $null = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' -TargetLogin 'WrongLogin' $assertMockParams = @{ 'CommandName' = 'Stop-Function' 'Times' = 1 'Exactly' = $true } Assert-MockCalled @assertMockParams } # it It -Skip "Returns all information with detailed for correct and incorrect owner" { Mock Connect-SQLInstance -MockWith { [object]@{ DomainInstanceName = 'SQLServerName'; Databases = [object]@( @{ Name = 'db1'; Status = 'Normal'; Owner = 'WrongOWner' } @{ Name = 'db2'; Status = 'Normal'; Owner = 'sa' } ); #databases Logins = [object]@( @{ ID = 1; Name = 'sa'; } ) #logins } #object } #mock connect-sqlserver $Result = Test-DbaDatabaseOwner -SqlInstance 'SQLServerName' $Result[0].SqlInstance | Should Be 'SQLServerName' $Result[1].SqlInstance | Should Be 'SQLServerName' $Result[0].Database | Should Be 'db1' $Result[1].Database | Should Be 'db2' $Result[0].DBState | Should Be 'Normal' $Result[1].DBState | Should Be 'Normal' $Result[0].CurrentOwner | Should Be 'WrongOWner' $Result[1].CurrentOwner | Should Be 'sa' $Result[0].TargetOwner | Should Be 'sa' $Result[1].TargetOwner | Should Be 'sa' $Result[0].OwnerMatch | Should Be $False $Result[1].OwnerMatch | Should Be $true } # it } # Context } #modulescope } #describe |