Koans/Modules/dbatools/AboutDbaDatabase.Koans.ps1

#Requires -Modules dbatools
using module PSKoans
[Koan(Position = 1001, Module = 'dbatools')]
param()
<#
    Get-DbaDatabase

    The Get-DbaDatabase command gets SQL database information for each database
    that is present on the target instance(s) of SQL Server by default. If the
    name of the database is provided, the command will return only the specific
    database.
#>

Describe 'Get-DbaDatabase' {

    #region Mocks
    <#
        Let's setup the environment for you. Unless you want your Koans to
        nearly always fail I'd suggest not messing with this bit.
    #>

    BeforeAll {
        Mock -CommandName Get-DbaDatabase -MockWith {
            Import-Clixml -Path .\PSKoans\Koans\dbatools\Mocks\Database_All.xml
        } -ParameterFilter { $_.SqlInstance -eq 'localhost' }
        
        Mock -CommandName Get-DbaDatabase -MockWith {
            Import-Clixml -Path .\PSKoans\Koans\dbatools\Mocks\Database_TestDb.xml
        } -ParameterFilter { $_.SqlInstance -eq 'localhost' -and $_.Database -eq 'testdb' }

        Mock -CommandName Get-DbaDatabase -MockWith {
            Import-Clixml -Path .\PSKoans\Koans\dbatools\Mocks\Database_System.xml
        } -ParameterFilter { $_.SqlInstance -eq 'localhost' -and $_.ExcludeUser }

        Mock -CommandName Get-DbaDatabase -MockWith {
            Import-Clixml -Path .\PSKoans\Koans\dbatools\Mocks\Database_TestDb.xml
        } -ParameterFilter { $_.SqlInstance -eq 'localhost' -and $_.ExludeSystem }
    }
    #endregion

    It 'Gathers databases by SQL Server instance...' {
        <#
            Get-DbaDatabase requires one thing; A SQL Server instance name.
            You can pass in "localhost" for the default name for a SQL Server
            instance.
            The simplest usage of Get-DbaDatabase is to run it and passing in the
            name of the SQL Server instance. This will get information about all
            the databases on the instance.
        #>

        $AllDatabases = Get-DbaDatabase -SqlInstance ____
        $AllDatabases.Count | Should -Be 5
    }

    It 'Gathers database by SQL Server instance and specific name...' {
        <#
            By passing in the SQL Server instance and the name of a specific
            database, using the -Database parameter, we can get information on
            that single database instead.
        #>

        $MasterDatabase = Get-DbaDatabase -SqlInstance localhost -Database ____
        $MasterDatabase.Name | Should -Be 'testdb'
    }

    It 'Gathers system databases only if specified...' {
        <#
            You may want to get only the system databases on an instance.
            While you can pass in the specific names of the system databases, it
            would be easier if there was a parameter you could add that would
            return the system databases.

            A switch parameter like -ExcludeUser.
        #>

        $UserDbParams = @{
            SqlInstance = 'localhost'
            ExcludeUser = $____
        }
        $UserDbsExcluded = Get-DbaDatabase @UserDbParams
        $UserDbsExcluded.Name | Should -BeIn 'tempdb', 'master', 'model', 'msdb'
    }

    It 'Excludes system databases if specified...' {
        <#
            The same can be done to exclude system databases by providing the
            -ExcludeSystem parameter switch.
        #>

        $SystemDbParams = @{
            SqlInstance = 'localhost'
            ExludeSystem = ____
        }
        $SystemDbsExluded = Get-DbaDatabase @SystemDbParams
        $SystemDbsExluded.Name | Should -Be 'testdb'
    }

    It 'Gathers databases based on their recovery model...' {
        <#
            Some common questions that people who work with databases
            may have getting databases that are in the 'Full', 'Simple', or
            'BulkLogged' recovery models.
        #>

        $FullRecoveryDbs = Get-DbaDatabase -SqlInstance localhost -RecoveryModel ____
        $FullRecoveryDbs.RecoveryModel | Should -Be 'Full'
    }
}