Files
Charon/docs/reports/qa_phase2_testdata_auth_fix_20250123.md
GitHub Actions 6593aca0ed chore: Implement authentication fixes for TestDataManager and update user management tests
- Refactored TestDataManager to use authenticated context with Playwright's newContext method.
- Updated auth-fixtures to ensure proper authentication state is inherited for API requests.
- Created constants.ts to avoid circular imports and manage shared constants.
- Fixed critical bug in auth setup that caused E2E tests to fail due to improper imports.
- Re-enabled user management tests with updated selectors and added comments regarding current issues.
- Documented environment configuration issues causing cookie domain mismatches in skipped tests.
- Generated QA report detailing test results and recommendations for further action.
2026-01-24 22:22:40 +00:00

5.9 KiB

QA Report: Phase 2 TestDataManager Authentication Fix

Date: 2025-01-23 QA Agent: QA_Security Verdict: 🔴 CONDITIONAL FAIL - Critical implementation bug fixed; 2 re-enabled tests still failing


Executive Summary

Phase 2 implementation introduced a critical bug that prevented E2E tests from running. The bug was discovered and fixed during this QA session. After the fix, the test suite runs but 2 re-enabled tests fail due to UI/test compatibility issues rather than authentication problems.


1. Bug Discovery and Fix

Critical Bug Identified

Issue: The Phase 2 changes in tests/fixtures/auth-fixtures.ts imported STORAGE_STATE from tests/auth.setup.ts:

import { STORAGE_STATE } from '../auth.setup';

This caused Playwright to fail with:

Error: test file "settings/user-management.spec.ts" should not import test file "auth.setup.ts"

Root Cause: Playwright prohibits test files from importing other test/setup files because it causes the imported file's test definitions to be loaded, breaking test isolation.

Fix Applied

  1. Created tests/constants.ts - extracted shared constants to a non-test file
  2. Updated tests/auth.setup.ts - imports from constants and re-exports for backward compatibility
  3. Updated tests/fixtures/auth-fixtures.ts - imports from constants instead of auth.setup

2. Verification Results

TypeScript Check

Check Result
npm run type-check (frontend) PASS

E2E Tests - User Management Specific

Test Result Notes
should display user list PASS
should send invite with valid email PASS
should select user role PASS
should configure permission mode PASS
should select permitted hosts PASS
should show invite URL preview PASS
should prevent self-deletion PASS
should prevent deleting last admin PASS
should be keyboard navigable PASS
should update permission mode FAIL Modal dialog not found
should enable/disable user FAIL User row/switch not visible

Summary: 10 passed, 2 failed, 17 skipped

E2E Tests - Full Suite

Metric Count
Passed 653
Failed 6
Skipped 65
Did Not Run 22

Duration: 13.3 minutes

Pre-commit Hooks

Hook Result
fix end of files PASS
trim trailing whitespace PASS (after auto-fix)
check yaml PASS
check for added large files PASS
dockerfile validation PASS
Go Vet PASS
golangci-lint PASS
Check .version matches PASS
Prevent large files PASS
Prevent CodeQL DB commits PASS
Prevent data/backups PASS
Frontend TypeScript Check PASS
Frontend Lint (Fix) PASS

3. Analysis of Test Failures

Failure 1: should update permission mode

Error:

Error: waitForModal: Could not find modal dialog or slide-out panel matching "/permissions/i"

Analysis: The test clicks a permissions button and expects a modal to appear. The modal either:

  • Uses a different UI pattern than expected
  • Has timing issues
  • The permissions button click isn't triggering the modal

Recommendation: Review the UI component for the permissions modal. This is a test/UI compatibility issue, not an authentication issue.

Failure 2: should enable/disable user

Error:

Locator: getByRole('row').filter({ hasText: 'Toggle Enable Test' }).getByRole('switch')
Expected: visible

Analysis: The test creates a user, reloads the page, and looks for a toggle switch in the user row. The user row is found but:

  • The UI may not use a switch role for enable/disable
  • The toggle may be a button, checkbox, or custom component

Recommendation: Inspect the actual UI component used for enable/disable toggle and update the test selector.

Cleanup Warnings

The test output shows "Admin access required" errors during cleanup. This is a separate issue from the Phase 2 fix scope - the authenticated API context works for the main test operations but may have cookie domain mismatches for cleanup operations.


4. Files Changed During QA

File Change Type Purpose
tests/constants.ts Created Extracted STORAGE_STATE constant
tests/auth.setup.ts Modified Import from constants, re-export
tests/fixtures/auth-fixtures.ts Modified Import from constants instead of auth.setup
docs/plans/current_spec.md Auto-fixed Trailing whitespace removed by pre-commit

5. Recommendation

Verdict: 🔴 CONDITIONAL FAIL

Blocking Issues:

  1. The 2 re-enabled tests (should update permission mode, should enable/disable user) are failing
  2. These tests were .skipped for a reason - the UI may have changed or the selectors need updating

Required Actions Before Merge:

  1. Either fix the test selectors to match current UI
  2. Or re-skip the tests with updated TODO comments explaining the UI compatibility issues

Non-Blocking Notes:

  • The core Phase 2 objective (authenticated TestDataManager) is working correctly
  • 10 tests that use testData.createUser() are passing
  • The import bug fix in this QA session is valid and should be included

6. Appendix

Git Diff Summary (Phase 2 + QA Fixes)

tests/constants.ts          | NEW    | Shared constants file
tests/auth.setup.ts         | MOD    | Import from constants
tests/fixtures/auth-fixtures.ts | MOD | Import from constants
tests/settings/user-management.spec.ts | MOD | Removed .skip from 2 tests

Test Command Used

/projects/Charon/node_modules/.bin/playwright test tests/settings/user-management.spec.ts \
  --project=chromium --reporter=list --config=/projects/Charon/playwright.config.js

Report generated by QA_Security Agent