Private/CuiTests/Test-CuiDeb001Ux.ps1
|
# Copyright (c) 2026 Jeffrey Snover. All rights reserved. # Licensed under the MIT License. See LICENSE file in the project root. function Test-CuiDeb001Ux { [CmdletBinding()] param( [Parameter(Mandatory)][string]$BaseUrl, [Parameter()][int]$CdpPort = 9222, [Parameter()][string]$ScreenshotDir ) Set-StrictMode -Version Latest $Sw = [System.Diagnostics.Stopwatch]::StartNew() $Checks = [System.Collections.Generic.List[PSObject]]::new() $Screenshots = [System.Collections.Generic.List[string]]::new() if (-not $ScreenshotDir) { $ScreenshotDir = New-UxScreenshotDir -CuiId 'CUI-DEB-001' } $Session = Connect-CdpSession -Port $CdpPort try { Invoke-UxNavigate -Session $Session -Url $BaseUrl Invoke-UxWaitForSelector -Session $Session -Selector '.toolbar' -TimeoutMs 10000 | Out-Null # Check 1: Navigate to debate view via toolbar $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $debateViewOk = $false try { $null = Invoke-UxEvaluate -Session $Session -Expression @" (() => { const items = document.querySelectorAll('.toolbar-more-item, .toolbar-icon'); for (const item of items) { if (item.textContent?.toLowerCase().includes('debate') || item.title?.toLowerCase().includes('debate')) { item.click(); return true; } } return false; })() "@ Start-Sleep -Milliseconds 500 $debateViewOk = Invoke-UxWaitForSelector -Session $Session -Selector '.debate-session-list, .debate-action-bar, .two-column' -TimeoutMs 5000 } catch { $debateViewOk = $false } $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Debate view accessible' -Pass $debateViewOk ` -Detail $(if ($debateViewOk) { 'Debate workspace loaded' } else { 'Could not navigate to debate' }) -Ms $CheckSw.ElapsedMilliseconds)) $Screenshots.Add((Invoke-UxScreenshot -Session $Session -Path (Join-Path $ScreenshotDir 'debate-view.png'))) # Check 2: Debate session list visible $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $listOk = Invoke-UxWaitForSelector -Session $Session -Selector '.debate-session-list, .list-panel' -TimeoutMs 3000 $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Session list panel visible' -Pass $listOk ` -Detail $(if ($listOk) { 'Session list rendered' } else { 'No session list' }) -Ms $CheckSw.ElapsedMilliseconds)) # Check 3: Debate input area available $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $inputOk = Invoke-UxElementExists -Session $Session -Selector '.debate-input, textarea.debate-input' $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Debate input area present' -Pass $inputOk ` -Detail $(if ($inputOk) { 'Topic input available' } else { 'No input area found' }) -Ms $CheckSw.ElapsedMilliseconds)) # Check 4: Debater toggle pills visible $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $pillsOk = Invoke-UxElementExists -Session $Session -Selector '.debate-debater-pill' $pillCount = 0 if ($pillsOk) { $pillCount = Invoke-UxEvaluate -Session $Session -Expression "document.querySelectorAll('.debate-debater-pill').length" } $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Debater toggles visible' -Pass $pillsOk ` -Detail $(if ($pillsOk) { "$pillCount debater pills" } else { 'No debater toggles' }) -Ms $CheckSw.ElapsedMilliseconds)) $Screenshots.Add((Invoke-UxScreenshot -Session $Session -Path (Join-Path $ScreenshotDir 'debate-controls.png'))) # Check 5: Send button present $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $sendOk = Invoke-UxElementExists -Session $Session -Selector '.debate-send-btn' $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Send button present' -Pass $sendOk ` -Detail $(if ($sendOk) { 'Send button visible' } else { 'No send button' }) -Ms $CheckSw.ElapsedMilliseconds)) # Check 6: Action bar layout complete $CheckSw = [System.Diagnostics.Stopwatch]::StartNew() $actionBarOk = Invoke-UxElementExists -Session $Session -Selector '.debate-action-bar' $CheckSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Action bar renders completely' -Pass $actionBarOk ` -Detail $(if ($actionBarOk) { 'Action bar present' } else { 'No action bar' }) -Ms $CheckSw.ElapsedMilliseconds)) $Screenshots.Add((Invoke-UxScreenshot -Session $Session -Path (Join-Path $ScreenshotDir 'action-bar.png'))) } finally { Disconnect-CdpSession -Session $Session } $Sw.Stop() $Result = New-CuiTestResult -CuiId 'CUI-DEB-001' -Domain 'Debate' -Priority 'P0' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() $Result | Add-Member -NotePropertyName Screenshots -NotePropertyValue $Screenshots.ToArray() $Result } |