private/core-cache/Update-RecastOSDCloudUSBCache.Tests.ps1
|
BeforeAll { . "$PSScriptRoot\Update-RecastOSDCloudUSBCache.ps1" . "$PSScriptRoot\..\core-license\Get-OSDCoreLicense.ps1" . "$PSScriptRoot\..\core-license\Test-OSDCoreLicense.ps1" . "$PSScriptRoot\..\core-license\Show-OSDCoreLicenseHelp.ps1" . "$PSScriptRoot\..\core-license\Initialize-OSDCoreLicense.ps1" . "$PSScriptRoot\..\core-device\Initialize-OSDCoreDevice.ps1" . "$PSScriptRoot\..\core\Convert-KeyboardLayoutToLanguageCode.ps1" . "$PSScriptRoot\Get-OSDCoreCacheUSBPath.ps1" $originalDevice = $global:OSDCoreDevice $originalLicense = $global:OSDCoreLicense } AfterAll { $global:OSDCoreDevice = $originalDevice $global:OSDCoreLicense = $originalLicense } Describe 'USB cache language inference license boundary' { BeforeEach { $global:OSDCoreLicense = [pscustomobject]@{ IsRegistered = $false } $global:OSDCoreDevice = [pscustomobject]@{ KeyboardLayout = '0000040C' } Mock Get-OSDCoreLicense { [pscustomobject]@{ IsValid = $true } } Mock Show-OSDCoreLicenseHelp {} Mock Initialize-OSDCoreLicense {} Mock Initialize-OSDCoreDevice {} Mock Get-OSDCoreCacheUSBPath { 'E:\OSDCloud' } Mock Write-Host {} Mock Convert-KeyboardLayoutToLanguageCode { throw 'Synthetic selection boundary reached' } } It 'allows a valid unregistered license to reach keyboard conversion' { { Update-RecastOSDCloudUSBCache -OSArchitecture amd64 } | Should -Throw '*Synthetic selection boundary reached*' Should -Invoke Convert-KeyboardLayoutToLanguageCode -Times 1 -Exactly -ParameterFilter { $KeyboardLayout -eq '0000040C' -and $FallbackLanguageCode -eq 'en-US' } Should -Invoke Show-OSDCoreLicenseHelp -Times 0 -Exactly } It 'denies <Case> before USB discovery or keyboard conversion' -TestCases @( @{ Case = 'missing' } @{ Case = 'invalid registered' } @{ Case = 'registration only' } @{ Case = 'failed lookup' } ) { param ($Case) $global:OSDCoreLicense.IsRegistered = $true Mock Get-OSDCoreLicense { switch ($Case) { 'missing' { $null } 'invalid registered' { [pscustomobject]@{ IsValid = $false } } 'registration only' { [pscustomobject]@{ IsRegistered = $true } } 'failed lookup' { throw 'synthetic-private-license-data' } } } $output = @(Update-RecastOSDCloudUSBCache -OSArchitecture amd64 -Verbose 4>&1 3>&1 2>&1) "$output" | Should -Not -Match 'synthetic-private-license-data' Should -Invoke Show-OSDCoreLicenseHelp -Times 1 -Exactly Should -Invoke Get-OSDCoreCacheUSBPath -Times 0 -Exactly Should -Invoke Convert-KeyboardLayoutToLanguageCode -Times 0 -Exactly } } |