tests/Test-IWBuildScript.ps1

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

$wizardRoot = Split-Path $PSScriptRoot -Parent
Import-Module (Join-Path $wizardRoot 'modules/ISC.OperatorConsole.psm1') -Force -Global -WarningAction SilentlyContinue
Import-Module (Join-Path $wizardRoot 'modules/IW.Core.psm1') -Force -Global
Import-Module (Join-Path $wizardRoot 'modules/IW.Render.psm1') -Force -Global
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Aws.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Azure.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Google.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Databricks.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/Salesforce.Connector.psm1') -Force
Import-Module (Join-Path $wizardRoot 'modules/Definitions/GitHub.Connector.psm1') -Force

Initialize-OperatorConsole -NonInteractive
Register-AwsConnectorDefinitions
Register-AzureConnectorDefinitions
Register-GoogleConnectorDefinitions
Register-DatabricksConnectorDefinitions
Register-SalesforceConnectorDefinitions
Register-GitHubConnectorDefinitions

$tempRoot = if ($env:TEMP) { $env:TEMP } elseif ($env:TMPDIR) { $env:TMPDIR } else { '/tmp' }
$outDir = Join-Path $tempRoot ("iw-buildscript-test-" + [guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $outDir -Force | Out-Null

try {
    # 1. AWS SaaS BuildScript
    $awsDef = Get-IntegrationWizardDefinition -Id 'aws-saas-connector'
    $awsCtx = @{ IscExternalId = 'ext-123'; Access = 'ReadOnly'; RoleName = 'SailPointAWSRole'; Region = 'us-east-1' }
    $awsPath = Join-Path $outDir 'aws-saas.ps1'
    New-IntegrationWizardBuildScript -Definition $awsDef -Context $awsCtx -OutputPath $awsPath
    $awsContent = Get-Content -LiteralPath $awsPath -Raw
    Assert-True ($awsContent -like '*AWS.ps1*') 'AWS SaaS script contains AWS.ps1 invocation'
    Assert-True ($awsContent -like '*-SaaSConnector*') 'AWS SaaS script passes -SaaSConnector'

    # 2. Azure BuildScript
    $azDef = Get-IntegrationWizardDefinition -Id 'azure-connector'
    $azCtx = @{ ApplicationName = 'MyEntraApp'; Access = 'ReadOnly'; TenantId = 'tenant-1' }
    $azPath = Join-Path $outDir 'azure.ps1'
    New-IntegrationWizardBuildScript -Definition $azDef -Context $azCtx -OutputPath $azPath
    $azContent = Get-Content -LiteralPath $azPath -Raw
    Assert-True ($azContent -like '*Azure.ps1*') 'Azure script contains Azure.ps1 invocation'
    Assert-True ($azContent -like '*-ApplicationName ''MyEntraApp''*') 'Azure script passes application name'

    # 3. Google Cloud BuildScript
    $gDef = Get-IntegrationWizardDefinition -Id 'google-saas-connector'
    $gCtx = @{ OrganizationId = 'org-1'; ProjectId = 'proj-1'; ImpersonateUser = 'admin@corp.com'; Access = 'ReadOnly' }
    $gPath = Join-Path $outDir 'google.ps1'
    New-IntegrationWizardBuildScript -Definition $gDef -Context $gCtx -OutputPath $gPath
    $gContent = Get-Content -LiteralPath $gPath -Raw
    Assert-True ($gContent -like '*Google Cloud.ps1*') 'Google script contains Google Cloud.ps1 invocation'

    # 4. Salesforce BuildScript
    $sfDef = Get-IntegrationWizardDefinition -Id 'salesforce-connector'
    $sfCtx = @{ InstanceUrl = 'https://acme.my.salesforce.com'; ConsumerKey = 'key-1'; ConsumerSecret = 'sec-1'; Feature = 'AgentDiscovery' }
    $sfPath = Join-Path $outDir 'salesforce.ps1'
    New-IntegrationWizardBuildScript -Definition $sfDef -Context $sfCtx -OutputPath $sfPath
    $sfContent = Get-Content -LiteralPath $sfPath -Raw
    Assert-True ($sfContent -like '*Validating Salesforce Connected App*') 'Salesforce script validates connected app'
    Assert-True ($sfContent -like '*Agentforce*') 'Salesforce script configures Agentforce'

    # 5. GitHub BuildScript
    $ghDef = Get-IntegrationWizardDefinition -Id 'github-connector'
    $ghCtx = @{ Organization = 'acme-corp'; Feature = 'AgentDiscovery' }
    $ghPath = Join-Path $outDir 'github.ps1'
    New-IntegrationWizardBuildScript -Definition $ghDef -Context $ghCtx -OutputPath $ghPath
    $ghContent = Get-Content -LiteralPath $ghPath -Raw
    Assert-True ($ghContent -like '*Validating GitHub organization*') 'GitHub script validates org'
    Assert-True ($ghContent -like '*Copilot*') 'GitHub script configures Copilot'
}
finally {
    if (Test-Path -LiteralPath $outDir) {
        Remove-Item -LiteralPath $outDir -Recurse -Force -ErrorAction SilentlyContinue
    }
}

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