Tests/Unit/Public/Access/Revoke-SCASession.Tests.ps1

Import-Module (Join-Path $PSScriptRoot '../../../../psSCA.psd1') -Force

Describe 'Revoke-SCASession' {
    InModuleScope psSCA {
        It 'revokes sessions by ID, collecting pipeline input into a single request' {
            Mock Invoke-SCARequest { }

            'session-1', 'session-2' | Revoke-SCASession -Confirm:$false | Out-Null

            Should -Invoke Invoke-SCARequest -Times 1 -Exactly -ParameterFilter {
                $Path -eq '/access/sessions/revoke' -and
                (Compare-Object $Body['sessionIds'] @('session-1', 'session-2') | Measure-Object).Count -eq 0
            }
        }

        It 'revokes all sessions for a user via -UserId' {
            Mock Invoke-SCARequest { }

            Revoke-SCASession -UserId 'user-123' -Confirm:$false | Out-Null

            Should -Invoke Invoke-SCARequest -ParameterFilter {
                $Path -eq '/access/users/{userId}/sessions/revoke' -and $PathParameters['userId'] -eq 'user-123'
            }
        }

        It 'makes no call when no session IDs are piped in' {
            Mock Invoke-SCARequest { }

            @() | Revoke-SCASession -Confirm:$false | Out-Null

            Should -Invoke Invoke-SCARequest -Times 0 -Exactly
        }

        It 'does not call Invoke-SCARequest when -WhatIf is specified' {
            Mock Invoke-SCARequest { }

            Revoke-SCASession -SessionId 'session-1' -WhatIf | Out-Null

            Should -Invoke Invoke-SCARequest -Times 0 -Exactly
        }
    }
}