tests/Test-IWCore.ps1

#Requires -Version 7
$ErrorActionPreference = 'Stop'
. (Join-Path $PSScriptRoot '_TestHelpers.ps1')

$wizardRoot = Split-Path $PSScriptRoot -Parent
Import-Module (Join-Path $wizardRoot 'modules/IW.Core.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Aws.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Aws.Entro.psm1') -Force

Register-IntegrationWizardPlatform -Name 'AWS' -Title 'AWS' -CoreOptions @('SaaSConnector', 'CiemConnector', 'Entro') -CliName 'aws' `
    -EntroCompanions @{ SaaSConnector = @{ EntroSwitch = 'Entro' } }
Register-AwsConnectorDefinitions
Register-AwsEntroDefinitions

$def = Get-IntegrationWizardDefinition -Id 'aws-saas-connector'
Assert-True ($null -ne $def) 'aws-saas-connector registered'

$ctx = @{ SaaSConnector = $true; IscExternalId = '11111111-2222-3333-4444-555555555555'; Action = 'BuildRequirements' }
$missing = Test-IntegrationWizardRequiredInputs -Definition $def -Context $ctx
Assert-True ($missing.Count -eq 0) 'IscExternalId satisfies required inputs'

$ctx2 = @{ SaaSConnector = $true; Action = 'Run' }
$missing2 = Test-IntegrationWizardRequiredInputs -Definition $def -Context $ctx2
Assert-True ($missing2 -contains 'IscExternalId') 'IscExternalId required when absent'

$compositeCtx = @{
    SaaSConnector   = $true
    Entro           = $true
    IscExternalId   = '11111111-2222-3333-4444-555555555555'
    EntroExternalId = '22222222-3333-4444-5555-666666666666'
    Method          = 'AssumeRole'
    Action          = 'BuildRequirements'
}
$plan = Resolve-IntegrationWizardPlan -Platform 'AWS' -Context $compositeCtx
Assert-True ($plan.IsComposite) 'SaaS + Entro resolves to composite plan'
Assert-True ($plan.Inputs.Name -contains 'IscExternalId') 'composite includes IscExternalId'
Assert-True ($plan.Inputs.Name -contains 'EntroExternalId') 'composite includes EntroExternalId'

$missingComposite = Test-IntegrationWizardRequiredInputs -Definition $plan -Context $compositeCtx
Assert-True ($missingComposite.Count -eq 0) 'both external IDs satisfy composite required inputs'

$compositeCtxMissing = @{ SaaSConnector = $true; Entro = $true; IscExternalId = '11111111-2222-3333-4444-555555555555'; Action = 'Run' }
$missingEntro = Test-IntegrationWizardRequiredInputs -Definition $plan -Context $compositeCtxMissing
Assert-True ($missingEntro -contains 'EntroExternalId') 'EntroExternalId required in composite when absent'

$ciemEntroThrown = $false
try {
    $null = Resolve-IntegrationWizardPlan -Platform 'AWS' -Context @{ CiemConnector = $true; Entro = $true }
}
catch {
    $ciemEntroThrown = $true
}
Assert-True $ciemEntroThrown 'CIEM + Entro rejected'

Assert-Equal 'Run: aws login (or aws sso login / aws configure)' (Get-IntegrationWizardLoginHint -CliName 'aws') 'aws login hint points to aws login, sso, and configure'

Write-Host 'PASS (11 assertions)'