Cmdlets/Enable-FusionLogger.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
. .\Cmdlets\Get-FusionLogger.ps1
. .\Cmdlets\Disable-FusionLogger.ps1
. .\Cmdlets\Enable-FusionLogger.ps1
. .\TestHelpers\Mutations.ps1

Describe "Enable-FusionLogger" {

    Context "When Logging Path is required" {

        MutationRemoveAllFusionLoggerSettings
        Remove-Item "C:\ts\tsss" -Force -ErrorAction SilentlyContinue -Recurse        

        It "will create the LogPath" {
            $result = Enable-FusionLogger -LogPath "C:\ts\tsss\"

            $result.LogPath | Should Be "C:\ts\tsss\"
            Test-Path "C:\ts\tsss" | Should Be $true
        }

        It "will create the LogPath and append the trailing \ as required by the fusion logger" {
            $result = Enable-FusionLogger -LogPath "C:\ts\tsss"

            $result.LogPath | Should Be "C:\ts\tsss\"
            Test-Path "C:\ts\tsss" | Should Be $true
        }        

        It "will fail if LogPath is passed as null" {
            { Enable-FusionLogger -LogPath $null } | Should -Throw
        }        
    }

    Context "Whenever Fusion Logger is configured" {
        
        Mock Disable-FusionLogger { return $null }

        It "Will disable (and clear up) any previous Fusion Logging settings" {
            MutationRemoveAllFusionLoggerSettings
            
            Enable-FusionLogger -LogPath "C:\ts\fuslog\" | Out-Null
            
            Assert-MockCalled Disable-FusionLogger -Times 1
        }
    }

    Context "When just the LogPath is specified" {
        
        MutationRemoveAllFusionLoggerSettings

        It "Will revert to logging binding failures only" {
            $result = Enable-FusionLogger -LogPath "C:\ts\fuslog\"

            $result.LogAll | Should Be $false
            $result.LogFailures | Should Be $true
            $result.LogPath | Should Be "C:\ts\fuslog\"
            $result.LogInExceptionText | Should Be $false
            $result.LogImmersive | Should be $false    
        }

    }
    
    Context "When ImmersiveLogging is specified" {

        MutationRemoveAllFusionLoggerSettings

        It "Will enable Immersive Logging" {
            $result = Enable-FusionLogger -LogPath "C:\ts\fuslog\" -LogImmersive

            $result.LogPath | Should Be "C:\ts\fuslog\"
            $result.LogImmersive | Should Be $true
        }

    }

    Context "When different logging levels are specified" {

        MutationRemoveAllFusionLoggerSettings

        It "can enable just binding failures" {
            $result = Enable-FusionLogger -LogPath "C:\ts\fuslog\" -Log 'Failures'

            $result.LogAll | Should Be $false
            $result.LogFailures | Should Be $true
            $result.LogPath | Should Be "C:\ts\fuslog\"
            $result.LogInExceptionText | Should Be $false
            $result.LogImmersive | Should be $false               
        }

        It "can enable all bindings" {
            $result = Enable-FusionLogger -LogPath "C:\ts\fuslog\" -Log 'All'

            $result.LogAll | Should Be $true
            $result.LogFailures | Should Be $false
            $result.LogPath | Should Be "C:\ts\fuslog\"
            $result.LogInExceptionText | Should Be $false
            $result.LogImmersive | Should be $false               
        }    
        
        It "can enable just exception in text" {
            $result = Enable-FusionLogger -LogPath "C:\ts\fuslog\" -Log 'ExceptionText'

            $result.LogAll | Should Be $false
            $result.LogFailures | Should Be $false
            $result.LogPath | Should Be "C:\ts\fuslog\"
            $result.LogInExceptionText | Should Be $true
            $result.LogImmersive | Should be $false               
        }                

    }
}