tests/functions/Test-MtCaEnforceNonPersistentBrowserSession.Tests.ps1


Describe 'Test-MtCaEnforceNonPersistentBrowserSession' {
    BeforeAll {
        Mock -ModuleName Maester Get-MtLicenseInformation { return "P1" }

        function Get-BaselinePolicy {
            return [PSCustomObject]@{
                state = "enabled"
                conditions = @{
                    users = @{
                        includeUsers = "All"
                    }
                    applications = @{
                        includeApplications = "All"
                    }
                    devices = @{
                        deviceFilter = @{
                            mode = "include"
                            rule = 'device.trustType -ne "ServerAD" -or device.isCompliant -ne True'
                        }
                    }
                }
                sessionControls = @{
                    persistentBrowser = @{
                        isEnabled = $true
                        mode = "never"
                    }
                }
            }
        }
    }

    Context "CA: Enforce non persistent browser session" {

        It 'Policy without non persistent browser session should fail' {
            $policy = Get-BaselinePolicy
            $policy.sessionControls.persistentBrowser.isEnabled = $false

            Mock -ModuleName Maester Get-MtConditionalAccessPolicy { return $policy }

            Test-MtCaEnforceNonPersistentBrowserSession | Should -BeFalse
        }

        It 'Include: Non Hybrid or Non-compliant device filter should Pass' {
            $policy = Get-BaselinePolicy
            $policy.conditions.devices.deviceFilter.mode = "include"
            $policy.conditions.devices.deviceFilter.rule = 'device.trustType -ne "ServerAD" -or device.isCompliant -ne True'
            Mock -ModuleName Maester Get-MtConditionalAccessPolicy { return $policy }

            Test-MtCaEnforceNonPersistentBrowserSession | Should -BeTrue
        }

        It 'Include: Non Compliant device filter (no-hybrid) should Pass' {
            # Should work with CA policies that only check for compliant devices
            # See https://github.com/maester365/maester/issues/433
            $policy = Get-BaselinePolicy
            $policy.conditions.devices.deviceFilter.mode = "include"
            $policy.conditions.devices.deviceFilter.rule = 'device.isCompliant -ne True'
            Mock -ModuleName Maester Get-MtConditionalAccessPolicy { return $policy }

            Test-MtCaEnforceNonPersistentBrowserSession | Should -BeTrue
        }

        It 'Exclude: Hybrid or compliant device filter should Pass' {
            $policy = Get-BaselinePolicy
            $policy.conditions.devices.deviceFilter.mode = "exclude"
            $policy.conditions.devices.deviceFilter.rule = 'device.trustType -eq "ServerAD" -or device.isCompliant -eq True'
            Mock -ModuleName Maester Get-MtConditionalAccessPolicy { return $policy }

            Test-MtCaEnforceNonPersistentBrowserSession | Should -BeTrue
        }

        It 'Exclude: Compliant device filter (no-hybrid) should Pass' {
            # Should work with CA policies that only check for compliant devices
            # See https://github.com/maester365/maester/issues/433
            $policy = Get-BaselinePolicy
            $policy.conditions.devices.deviceFilter.mode = "exclude"
            $policy.conditions.devices.deviceFilter.rule = 'device.isCompliant -eq True'
            Mock -ModuleName Maester Get-MtConditionalAccessPolicy { return $policy }

            Test-MtCaEnforceNonPersistentBrowserSession | Should -BeTrue
        }
    }
}