test/settings/New-PowerBoltConfigFile.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
using module ..\.\TestRunnerSupportModule.psm1

Describe "Test New-PowerBoltConfigFile" {
    BeforeAll {
        $TestSupportModule = [TestRunnerSupportModule]::new('MockModuleA')
    }
    
    AfterAll {
        $TestSupportModule.Teardown()
    }
    
    Context "Call New-PowerBoltConfigFile when no file exists" {
        BeforeEach {
            $FullName = Join-Path -Path $TestDrive -ChildPath '\MK.PowerShell\' -AdditionalChildPath 'PowerBolt-config.json'
        }
        AfterEach {

        }

        It "Should copy a new file to the destination folder ('MK.PowerShell')" {
            New-PowerBoltConfigFile -Path $TestDrive

            Get-Item $FullName | Should -Exist 
        }
    }

    Context "Call New-PowerBoltConfigFile when file exists" {
        It "Should prompt user about exisiting file" {
            InModuleScope PowerBolt {
                ### HACK: Before and After block is inside here since Pester seems to not like
                # nested Before and After
                ### Before
                $FullName = Join-Path -Path $TestDrive -ChildPath '\MK.PowerShell\' -AdditionalChildPath 'PowerBolt-config.json'
                Get-Module PowerBolt | `
                    Select-Object -ExpandProperty FileList | `
                    ForEach-Object {if ($_ -like '*PowerBolt-config.json') {$_}} -OutVariable ModuleConfigFile
                New-Item -Path "$TestDrive\MK.PowerShell" -ItemType Directory -OutVariable ModuleConfigFolder
                Copy-Item -Path $ModuleConfigFile -Destination $ModuleConfigFolder.FullName 

                ### TEST
                Mock WriteWarningWrapper { $true }
                
                Get-Item $FullName | Should -Exist
                
                New-PowerBoltConfigFile -Path $TestDrive
                
                Assert-MockCalled WriteWarningWrapper 1
                
                Get-Item $FullName | Should -Exist

                ### After
                Remove-Item -Path "$TestDrive\MK.PowerShell" -Recurse
            }
        }

        It "Should not prompt user about exisiting file" {
            InModuleScope PowerBolt {
                ### HACK: Before and After block is inside here since Pester seems to not like
                # nested Before and After

                ### Before
                $FullName = Join-Path -Path $TestDrive -ChildPath '\MK.PowerShell\' -AdditionalChildPath 'PowerBolt-config.json'
                Get-Module PowerBolt | `
                    Select-Object -ExpandProperty FileList | `
                    ForEach-Object {if ($_ -like '*PowerBolt-config.json') {$_}} -OutVariable ModuleConfigFile
                New-Item -Path "$TestDrive\MK.PowerShell" -ItemType Directory -OutVariable ModuleConfigFolder
                Copy-Item -Path $ModuleConfigFile -Destination $ModuleConfigFolder.FullName 

                ### TEST
                Mock WriteWarningWrapper { $true }

                Get-Item $FullName | Should -Exist 

                New-PowerBoltConfigFile -Path $TestDrive -Force
                # NOTE: although this mock wasnt called '1' time in this 'It', this is from the
                # previous 'It' block
                Assert-MockCalled WriteWarningWrapper 1

                Get-Item $FullName | Should -Exist
                
                ### After
                Remove-Item -Path "$TestDrive\MK.PowerShell" -Recurse
            } 
        }
    }
}