Private/CuiTests/Test-CuiDeb002.ps1
|
# Copyright (c) 2026 Jeffrey Snover. All rights reserved. # Licensed under the MIT License. See LICENSE file in the project root. function Test-CuiDeb002 { [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: Load existing debates list $r = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path '/api/debates' -TimeoutSec $TimeoutSec $HasDebates = $r.Success -and $r.Body -and @($r.Body).Count -gt 0 $Checks.Add((New-CuiCheckResult -Check 'Debates list loads' -Pass $r.Success ` -Detail $(if ($HasDebates) { "$(@($r.Body).Count) debates" } elseif ($r.Success) { 'Empty list' } else { "Failed: $($r.Error)" }) -Ms $r.ResponseMs)) # Check 2: Load a specific debate (first one, or create a test one) $DebateId = $null if ($HasDebates) { $FirstDebate = @($r.Body)[0] if ($FirstDebate.PSObject.Properties['id']) { $DebateId = $FirstDebate.id } } $LoadOk = $false if ($DebateId) { $dr = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path "/api/debates/$DebateId" -TimeoutSec $TimeoutSec $LoadOk = $dr.Success $Checks.Add((New-CuiCheckResult -Check 'Load specific debate' -Pass $LoadOk ` -Detail $(if ($LoadOk) { "Loaded $DebateId" } else { "Failed: $($dr.Error)" }) -Ms $dr.ResponseMs)) } else { $Checks.Add((New-CuiCheckResult -Check 'Load specific debate' -Pass $false ` -Detail 'No debates available to load')) } # Check 3: AI generation with debate context $GenSw = [System.Diagnostics.Stopwatch]::StartNew() $GenOk = $false try { $GenBody = @{ prompt = 'In one sentence, argue for AI regulation.'; maxTokens = 100 } | ConvertTo-Json -Compress $GenResp = Invoke-WebRequest -Uri "$BaseUrl/api/ai/generate" -Method POST ` -Body $GenBody -ContentType 'application/json' -TimeoutSec 60 ` -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $GenOk = $GenResp.StatusCode -eq 200 $GenJson = $GenResp.Content | ConvertFrom-Json if (-not ($GenJson.PSObject.Properties['text'] -and $GenJson.text.Length -gt 0)) { $GenOk = $false } } catch { } $GenSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'AI generation with context' -Pass $GenOk ` -Detail $(if ($GenOk) { 'Generated' } else { 'Generation failed' }) -Ms $GenSw.ElapsedMilliseconds)) # Check 4: Save updated debate (PUT) $SaveOk = $false if ($DebateId -and $LoadOk) { $SaveSw = [System.Diagnostics.Stopwatch]::StartNew() try { $SaveResp = Invoke-WebRequest -Uri "$BaseUrl/api/debates" -Method PUT ` -Body ($dr.Body | ConvertTo-Json -Depth 20 -Compress) -ContentType 'application/json' ` -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $SaveOk = $SaveResp.StatusCode -eq 200 } catch { } $SaveSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Save debate (PUT)' -Pass $SaveOk ` -Detail $(if ($SaveOk) { 'Saved' } else { 'Save failed (may need auth)' }) -Ms $SaveSw.ElapsedMilliseconds)) } else { $Checks.Add((New-CuiCheckResult -Check 'Save debate (PUT)' -Pass $false ` -Detail 'Skipped — no debate loaded')) } $Sw.Stop() New-CuiTestResult -CuiId 'CUI-DEB-002' -Domain 'Debate' -Priority 'P0' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() } |