From 19fd938a6cecc5053f5a71fd3d108fb1b404de86 Mon Sep 17 00:00:00 2001 From: Shankar Date: Mon, 27 Apr 2026 03:08:18 +0000 Subject: [PATCH] =?UTF-8?q?M-029=20Pass=203=20batch=20C=20(FINAL):=20T-1?= =?UTF-8?q?=20tests=20for=205=20list=20pages=20=E2=80=94=20Pass=203=20comp?= =?UTF-8?q?lete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes M-029 Pass 3 fully. Every src/pages/*.tsx now has a *.test.tsx peer. Audit recon: 'comm -23 ' returns zero (all 14 T-1-deferred pages now covered). Test files added (each ships render-coverage + an XSS-hardening contract): - HealthMonitorPage.test.tsx endpoint URL + last_error payloads - JobsPage.test.tsx type / certificate_id / agent_id / error_message payloads - NetworkScanPage.test.tsx network_range / agent_id / last_scan_message payloads - ProfilesPage.test.tsx profile name / description / EKUs payloads - AgentFleetPage.test.tsx agent name / hostname / OS / arch / IP payloads (mirrors the M-003 MCP fence shape) Pass 3 totals across batches A + B + C: 14 new test files, 14/14 T-1-deferred pages closed. Each test pins three invariants: 1. The page renders against mock data without crashing. 2. No live '; + +const xssAgent = { + id: 'a-xss-001', + name: xssPayload, + hostname: xssPayload, + os: xssPayload, + architecture: xssPayload, + ip_address: xssPayload, + version: xssPayload, + status: 'online', + last_heartbeat_at: new Date().toISOString(), + agent_group_id: 'ag-xss', +}; + +describe('AgentFleetPage — render + XSS hardening (M-026 / M-029 Pass 3)', () => { + beforeEach(() => { + vi.clearAllMocks(); + cleanup(); + delete (window as unknown as { __xss_pwned__?: number }).__xss_pwned__; + }); + + it('renders the page header when getAgents resolves', async () => { + vi.mocked(client.getAgents).mockResolvedValue({ data: [], total: 0, page: 1, per_page: 50 } as never); + renderWithQuery(); + await waitFor(() => { + expect(screen.getByText(/Agent/i)).toBeInTheDocument(); + }); + }); + + it('does NOT execute '; + +const xssCheck = { + id: 'hc-xss-001', + endpoint: xssPayload, + status: 'failing', + last_error: xssPayload, + last_checked_at: new Date().toISOString(), + acknowledged: false, +}; + +describe('HealthMonitorPage — render + XSS hardening (M-026 / M-029 Pass 3)', () => { + beforeEach(() => { + vi.clearAllMocks(); + cleanup(); + delete (window as unknown as { __xss_pwned__?: number }).__xss_pwned__; + vi.mocked(client.getHealthCheckSummary).mockResolvedValue({ total: 0, failing: 0, ok: 0 } as never); + }); + + it('renders the page header when listHealthChecks resolves', async () => { + vi.mocked(client.listHealthChecks).mockResolvedValue({ data: [], total: 0, page: 1, per_page: 100 } as never); + renderWithQuery(); + await waitFor(() => { + expect(screen.getByText(/Health/i)).toBeInTheDocument(); + }); + }); + + it('does NOT execute '; + +const xssJob = { + id: 'j-xss-001', + type: xssPayload, + status: 'Failed', + certificate_id: xssPayload, + agent_id: xssPayload, + error_message: xssPayload, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), +}; + +describe('JobsPage — render + XSS hardening (M-026 / M-029 Pass 3)', () => { + beforeEach(() => { + vi.clearAllMocks(); + cleanup(); + delete (window as unknown as { __xss_pwned__?: number }).__xss_pwned__; + }); + + it('renders the page header when getJobs resolves', async () => { + vi.mocked(client.getJobs).mockResolvedValue({ data: [], total: 0, page: 1, per_page: 50 } as never); + renderWithQuery(); + await waitFor(() => { + expect(screen.getByText(/Jobs/i)).toBeInTheDocument(); + }); + }); + + it('does NOT execute '; + +const xssScanTarget = { + id: 'ns-xss-001', + name: xssPayload, + network_range: xssPayload, + ports: '443,8443', + agent_id: xssPayload, + enabled: true, + last_scan_at: new Date().toISOString(), + last_scan_status: 'failed', + last_scan_message: xssPayload, +}; + +describe('NetworkScanPage — render + XSS hardening (M-026 / M-029 Pass 3)', () => { + beforeEach(() => { + vi.clearAllMocks(); + cleanup(); + delete (window as unknown as { __xss_pwned__?: number }).__xss_pwned__; + }); + + it('renders the page header when getNetworkScanTargets resolves', async () => { + vi.mocked(client.getNetworkScanTargets).mockResolvedValue({ data: [], total: 0, page: 1, per_page: 50 } as never); + renderWithQuery(); + await waitFor(() => { + expect(screen.getByText(/Network/i)).toBeInTheDocument(); + }); + }); + + it('does NOT execute '; + +const xssProfile = { + id: 'cp-xss-001', + name: xssPayload, + description: xssPayload, + max_ttl_seconds: 3600, + allow_short_lived: false, + ekus: [xssPayload], + key_usages: [xssPayload], + san_types: [xssPayload], + created_at: new Date().toISOString(), +}; + +describe('ProfilesPage — render + XSS hardening (M-026 / M-029 Pass 3)', () => { + beforeEach(() => { + vi.clearAllMocks(); + cleanup(); + delete (window as unknown as { __xss_pwned__?: number }).__xss_pwned__; + }); + + it('renders the page header when getProfiles resolves', async () => { + vi.mocked(client.getProfiles).mockResolvedValue({ data: [], total: 0, page: 1, per_page: 50 } as never); + renderWithQuery(); + await waitFor(() => { + expect(screen.getByText(/Profile/i)).toBeInTheDocument(); + }); + }); + + it('does NOT execute