Private/CuiTests/Test-CuiCom002.ps1
|
# Copyright (c) 2026 Jeffrey Snover. All rights reserved. # Licensed under the MIT License. See LICENSE file in the project root. function Test-CuiCom002 { [CmdletBinding()] param( [Parameter(Mandatory)][string]$BaseUrl, [Parameter()][int]$TimeoutSec = 15, [Parameter()][hashtable]$AuthHeaders = @{} ) Set-StrictMode -Version Latest $Sw = [System.Diagnostics.Stopwatch]::StartNew() $Checks = [System.Collections.Generic.List[PSObject]]::new() $BaseUrl = $BaseUrl.TrimEnd('/') # Check 1: Verify authenticated (community submission requires auth) $r = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path '/api/auth/me' -TimeoutSec $TimeoutSec $IdentityOk = $r.Success -and ($null -ne $r.Body) $IsAnon = $true if ($IdentityOk -and $r.Body.PSObject.Properties['anonymous']) { $IsAnon = [bool]$r.Body.anonymous } if ($IsAnon) { $Checks.Add((New-CuiCheckResult -Check 'Auth check' -Pass $false ` -Detail 'Anonymous — submission requires auth' -Ms $r.ResponseMs)) $Sw.Stop() return New-CuiTestResult -CuiId 'CUI-COM-002' -Domain 'Community' -Priority 'P2' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() -Error 'Skipped — no auth credentials' } $Checks.Add((New-CuiCheckResult -Check 'Auth check' -Pass $true ` -Detail 'Authenticated user' -Ms $r.ResponseMs)) # Check 2: POST /api/community/submit — submit a test item (will be pending review) $SubSw = [System.Diagnostics.Stopwatch]::StartNew() $SubmitOk = $false try { $SubBody = @{ type = 'debate' id = "cui-com-test-$(Get-Date -Format 'yyyyMMddHHmmss')" } | ConvertTo-Json -Compress $SubResp = Invoke-WebRequest -Uri "$BaseUrl/api/community/submit" -Method POST ` -Body $SubBody -ContentType 'application/json' -TimeoutSec $TimeoutSec ` -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $SubmitOk = $SubResp.StatusCode -eq 200 } catch { $StatusCode = 0 if ($_.Exception.PSObject.Properties['Response'] -and $_.Exception.Response) { $StatusCode = [int]$_.Exception.Response.StatusCode } $SubmitOk = $StatusCode -in @(200, 400, 404, 429) } $SubSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Community submission endpoint' -Pass $SubmitOk ` -Detail $(if ($SubmitOk) { 'Submission accepted or rate-limited' } else { 'Submission endpoint unreachable' }) -Ms $SubSw.ElapsedMilliseconds)) $Sw.Stop() New-CuiTestResult -CuiId 'CUI-COM-002' -Domain 'Community' -Priority 'P2' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() } |