tests/Test-EntraCiemConnector.ps1

param(
    [string]$CiemPath = (Join-Path (Split-Path -Parent $PSScriptRoot) 'modules/ISC.EntraCiemConnector.psm1')
)

$ErrorActionPreference = 'Stop'
$script:AssertionCount = 0

function Assert-True {
    param([bool]$Condition, [string]$Message)
    $script:AssertionCount++
    if (-not $Condition) { throw "Assertion failed: $Message" }
}

function Assert-Equal {
    param($Expected, $Actual, [string]$Message)
    $script:AssertionCount++
    if ($Expected -ne $Actual) {
        throw "Assertion failed: $Message. Expected '$Expected', got '$Actual'."
    }
}

Import-Module $CiemPath -Force -WarningAction SilentlyContinue
Initialize-EntraCiemConnectorData

Assert-True (-not (Test-EmbeddedCiemSelected -FeatureNames @('MfaManagement'))) 'Ciem not selected without Ciem'
Assert-True (Test-EmbeddedCiemSelected -FeatureNames @('Ciem')) 'Ciem selected'

$empty = @(Merge-EntraCiemPermissions -FeatureNames @('MfaManagement'))
Assert-Equal 0 $empty.Count 'no CIEM permissions without Ciem pack'

$ciemPerms = @(Merge-EntraCiemPermissions -FeatureNames @('Ciem'))
Assert-True ($ciemPerms.Count -ge 3) 'CIEM permissions merged when Ciem selected'
Assert-True (@($ciemPerms | ForEach-Object { $_.Pack }) -contains 'Ciem') 'permissions tagged with Ciem pack'

$settings = Build-EmbeddedCiemConnectionSettings -Context @{ FeatureNames = @('Ciem') }
Assert-True ($settings.Contains('Enable CIEM on SaaS source')) 'embedded CIEM connection hint'

Write-Host "PASS ($script:AssertionCount assertions)"