$repositoryRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path $localUserScriptPath = Join-Path $repositoryRoot 'scripts\Set-SguStandardLocalUser.ps1' $enrollmentTestScriptPath = Join-Path $repositoryRoot 'scripts\Test-SguClientEnrollment.ps1' $packageScriptPath = Join-Path $repositoryRoot 'scripts\New-SguBootstrapPackages.ps1' $releaseScriptPath = Join-Path $repositoryRoot 'scripts\Publish-GiteaRelease.ps1' $azureLauncherPath = Join-Path $repositoryRoot 'scripts\Start-SguAzureClientEnrollment.cmd' $tokens = $null $parseErrors = $null $scriptAst = [Management.Automation.Language.Parser]::ParseFile( $localUserScriptPath, [ref]$tokens, [ref]$parseErrors) if ($parseErrors.Count -gt 0) { throw ($parseErrors -join [Environment]::NewLine) } $descriptionAssignment = $scriptAst.Find({ param($node) $node -is [Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -eq '$description' }, $true) $description = $descriptionAssignment.Right.Extent.Text.Trim("'") Describe 'SGU Windows client enrollment scripts' { It 'keeps the local-user description within the Windows 10 limit' { ($description.Length -le 48) | Should Be $true } It 'declares the managed local student account' { $source = Get-Content -LiteralPath $localUserScriptPath -Raw $source | Should Match "\$userName = 'alumno'" $source | Should Match "\$plainTextPassword = 'ingenieria'" } It 'uses the cross-version Windows account flag for password expiration' { $localUserSource = Get-Content -LiteralPath $localUserScriptPath -Raw $enrollmentTestSource = Get-Content -LiteralPath $enrollmentTestScriptPath -Raw $localUserSource | Should Match '\$passwordNeverExpiresFlag = 0x10000' $enrollmentTestSource | Should Match '\$passwordNeverExpiresFlag = 0x10000' $localUserSource | Should Not Match '\$verifiedUser\.PasswordNeverExpires' $enrollmentTestSource | Should Not Match '\$standardLocalUser\.PasswordNeverExpires' } It 'publishes separate legacy Windows 10 and modern Windows 11 artifacts' { $packageSource = Get-Content -LiteralPath $packageScriptPath -Raw $releaseSource = Get-Content -LiteralPath $releaseScriptPath -Raw $packageSource | Should Match 'sgu-windows10-legacy-client-bootstrap-\$Version' $packageSource | Should Match 'sgu-windows11-client-bootstrap-\$Version' $packageSource | Should Match '-CompatibilityProfile Windows10Legacy' $packageSource | Should Match '-CompatibilityProfile Windows11Modern' $releaseSource | Should Match 'sgu-windows10-legacy-client-bootstrap-\$Version\.zip' $releaseSource | Should Match 'sgu-windows11-client-bootstrap-\$Version\.zip' } It 'keeps Azure P2S in the modern Windows 11 artifact' { $packageSource = Get-Content -LiteralPath $packageScriptPath -Raw $azureLauncher = Get-Content -LiteralPath $azureLauncherPath -Raw $packageSource.Contains("Join-Path `$windows11ClientRoot 'Start-SguAzureClientEnrollment.cmd'") | Should Be $true $packageSource.Contains("Join-Path `$windows10ClientRoot 'Start-SguAzureClientEnrollment.cmd'") | Should Be $false $azureLauncher | Should Match '-PauseOnError' } }