Private/CuiTests/Test-CuiDeb005.ps1
|
# Copyright (c) 2026 Jeffrey Snover. All rights reserved. # Licensed under the MIT License. See LICENSE file in the project root. function Test-CuiDeb005 { [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('/') $DebateId = "cui-del-test-$(Get-Date -Format 'yyyyMMddHHmmss')" # Check 1: Create a test debate to delete $CreateSw = [System.Diagnostics.Stopwatch]::StartNew() $CreateOk = $false try { $DebateObj = @{ id = $DebateId topic = 'CUI delete test — should be removed' transcript = @() } | ConvertTo-Json -Compress $PutResp = Invoke-WebRequest -Uri "$BaseUrl/api/debates" -Method PUT ` -Body $DebateObj -ContentType 'application/json' -TimeoutSec $TimeoutSec ` -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $CreateOk = $PutResp.StatusCode -eq 200 } catch { } $CreateSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Create test debate' -Pass $CreateOk ` -Detail $(if ($CreateOk) { "Created $DebateId" } else { 'Create failed (may need auth)' }) -Ms $CreateSw.ElapsedMilliseconds)) # Check 2: Verify it exists $VerifySw = [System.Diagnostics.Stopwatch]::StartNew() $ExistsOk = $false if ($CreateOk) { $vr = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path "/api/debates/$DebateId" -TimeoutSec $TimeoutSec $ExistsOk = $vr.Success -and ($null -ne $vr.Body) } $VerifySw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Verify debate exists' -Pass $ExistsOk ` -Detail $(if ($ExistsOk) { 'Found' } elseif (-not $CreateOk) { 'Skipped — create failed' } else { 'Not found after create' }) -Ms $VerifySw.ElapsedMilliseconds)) # Check 3: DELETE the debate $DelSw = [System.Diagnostics.Stopwatch]::StartNew() $DeleteOk = $false if ($CreateOk) { try { $DelResp = Invoke-WebRequest -Uri "$BaseUrl/api/debates/$DebateId" -Method DELETE ` -TimeoutSec $TimeoutSec -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $DeleteOk = $DelResp.StatusCode -eq 200 } catch { } } $DelSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'DELETE debate' -Pass $DeleteOk ` -Detail $(if ($DeleteOk) { "Deleted $DebateId" } elseif (-not $CreateOk) { 'Skipped — create failed' } else { 'Delete failed' }) -Ms $DelSw.ElapsedMilliseconds)) # Check 4: Verify it's gone $GoneSw = [System.Diagnostics.Stopwatch]::StartNew() $GoneOk = $false if ($DeleteOk) { $gr = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path "/api/debates/$DebateId" -TimeoutSec $TimeoutSec -AcceptableStatusCodes @(404) $GoneOk = -not $gr.Success -or $gr.StatusCode -eq 404 -or ($gr.Success -and $gr.Body -eq $null) } $GoneSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Verify debate deleted' -Pass $GoneOk ` -Detail $(if ($GoneOk) { 'Confirmed removed' } elseif (-not $DeleteOk) { 'Skipped — delete failed' } else { 'Still exists after delete' }) -Ms $GoneSw.ElapsedMilliseconds)) $Sw.Stop() New-CuiTestResult -CuiId 'CUI-DEB-005' -Domain 'Debate' -Priority 'P2' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() } |