tests/Test-Interactive.Tests.ps1

Describe "Start-AzBootstrapInteractiveMode" {
    BeforeAll {
        # Directly import the function
        . "$PSScriptRoot/../private/Start-AzBootstrapInteractiveMode.ps1"
        . "$PSScriptRoot/../private/Test-AzStorageAccountName.ps1"
        . "$PSScriptRoot/../private/Get-ManagedIdentityName.ps1"
        . "$PSScriptRoot/../private/Write-BootstrapLog.ps1"

        # Mock Write-Host and Test-AzStorageAccountName
        Mock Write-Host {}
        Mock Test-AzStorageAccountName { $true }
        
        # Mock Get-Random to return consistent results for tests
        Mock Get-Random { return 123 }
    }

    It "Should process interactive inputs correctly" {
        # Mock Read-Host to simulate user input
        Mock Read-Host {
            param($prompt)
            
            switch -Wildcard ($prompt) {
                "*Template Repository URL*" { return "https://github.com/test/template-repo" }
                "*Target Repository Name*" { return "test-repo" }
                "*Azure Location*" { return "westus" }
                "*Resource Group Name*" { return "" } # Accept default
                "*Plan Managed Identity Name*" { return "" } # Accept default
                "*Apply Managed Identity Name*" { return "" } # Accept default
                "*Storage Account Name*" { return "testazb123" }
                "*Proceed*" { return "y" }
                default { return "" }
            }
        }
        
        $result = Start-AzBootstrapInteractiveMode -Defaults @{
            InitialEnvironmentName = 'dev';
            TemplateRepoUrl = '';
            TargetRepoName = 'my-repo';
            Location = 'eastus';
            ResourceGroupName = 'rgdev';
            PlanManagedIdentityName = 'mitest-repodev-plan';
            ApplyManagedIdentityName = 'mitest-repodev-apply';
            TerraformStateStorageAccountName = 'stdev123';
        }

        # Validate result structure
        $result | Should -Not -BeNullOrEmpty
        $result | Should -BeOfType [hashtable]
        $result.Keys | Should -Contain "TemplateRepoUrl"
        $result.Keys | Should -Contain "TargetRepoName"
        $result.Keys | Should -Contain "Location"
        
        # Validate CAF-aligned naming convention defaults
        $result.ResourceGroupName | Should -Be "rgdev" 
        $result.PlanManagedIdentityName | Should -Be "mitest-repodev-plan"
        $result.ApplyManagedIdentityName | Should -Be "mitest-repodev-apply"
    }
}