chore: merge executor worktree (06.1-02 audit tests)
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
---
|
||||
phase: 06.1-close-v1-audit-gaps
|
||||
plan: "02"
|
||||
subsystem: testing
|
||||
tags: [pytest, audit-log, admin, asyncio, csv-export, security-invariants]
|
||||
|
||||
# Dependency graph
|
||||
requires:
|
||||
- phase: 06.1-close-v1-audit-gaps
|
||||
provides: api/audit.py fully implemented with paginated viewer and CSV export
|
||||
provides:
|
||||
- Real integration tests for GET /api/admin/audit-log (viewer + export)
|
||||
- ADMIN-06 test coverage: 4 passing tests, 0 xfail stubs
|
||||
affects: [06.1-close-v1-audit-gaps, security-gate]
|
||||
|
||||
# Tech tracking
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "_seed_audit() helper pattern: call write_audit_log() directly in tests to seed rows without endpoint overhead"
|
||||
- "pytestmark = pytest.mark.asyncio at module level eliminates per-test decorator boilerplate"
|
||||
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- backend/tests/test_audit.py
|
||||
|
||||
key-decisions:
|
||||
- "Import write_audit_log inside _seed_audit() body to avoid module-load ordering issues with conftest patches"
|
||||
- "Use content-type.startswith('text/csv') for robustness against 'text/csv; charset=utf-8' variants"
|
||||
|
||||
patterns-established:
|
||||
- "Seed pattern: write_audit_log() + await db_session.commit() in helper, not through endpoint"
|
||||
|
||||
requirements-completed: [ADMIN-06]
|
||||
|
||||
# Metrics
|
||||
duration: 8min
|
||||
completed: 2026-05-30
|
||||
---
|
||||
|
||||
# Phase 6.1 Plan 02: Promote test_audit.py Stubs to Real Tests Summary
|
||||
|
||||
**Four xfail audit log stubs replaced with real assertions covering paginated viewer shape, ADMIN-06 no-doc-content invariant, admin gate (403), and CSV export headers.**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 8 min
|
||||
- **Started:** 2026-05-30T21:09:00Z
|
||||
- **Completed:** 2026-05-30T21:17:00Z
|
||||
- **Tasks:** 1
|
||||
- **Files modified:** 1
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Removed all 4 `@pytest.mark.xfail` decorators and `pytest.xfail("not implemented yet")` calls
|
||||
- Implemented `_seed_audit()` helper that calls `write_audit_log()` directly and commits
|
||||
- `test_audit_log_viewer`: verifies 200, pagination envelope keys, total >= 1, item field shape
|
||||
- `test_audit_log_no_doc_content`: asserts filename / extracted_text / password_hash / credentials_enc absent from all items and nested metadata_
|
||||
- `test_audit_log_regular_user_403`: proves admin gate blocks regular users with 403
|
||||
- `test_audit_log_export_csv`: asserts content-type starts with "text/csv", disposition contains "audit-export.csv", and CSV header row is present
|
||||
- Removed unused `import os`
|
||||
- Added `pytestmark = pytest.mark.asyncio` at module level
|
||||
- All 4 tests pass in Docker: `4 passed in 0.79s`
|
||||
|
||||
## Task Commits
|
||||
|
||||
1. **Task 1: Implement real tests in test_audit.py** - `bda123d` (feat)
|
||||
|
||||
**Plan metadata:** (docs commit to follow)
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
- `backend/tests/test_audit.py` - Rewrote from xfail stubs to 4 real integration tests
|
||||
|
||||
## Decisions Made
|
||||
|
||||
- Imported `write_audit_log` inside the `_seed_audit()` helper body rather than at module top-level, to avoid import-ordering issues when conftest patches DB model types before this module loads.
|
||||
- Used `content_type.startswith("text/csv")` instead of exact equality, matching the plan's note about potential `"text/csv; charset=utf-8"` variants from httpx.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None — plan executed exactly as written.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
Docker mounts the main repo's `backend/` directory via bind mount, not the worktree path. Used `docker cp` to push the worktree's updated file into the running container for verification. The `docker cp` wrote through the bind mount, updating both the container overlay and the main repo file simultaneously — which is the correct end state (both locations now contain the updated tests).
|
||||
|
||||
## Known Stubs
|
||||
|
||||
None — this plan specifically eliminates stubs. All 4 tests now make real HTTP calls and real assertions.
|
||||
|
||||
## Threat Flags
|
||||
|
||||
None — test-only changes; no new network endpoints, auth paths, or schema changes introduced.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- `backend/tests/test_audit.py` exists and contains real assertions: FOUND
|
||||
- Task commit `bda123d` exists: FOUND
|
||||
- 4 passed, 0 failed, 0 xfailed in Docker verification: CONFIRMED
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
- ADMIN-06 test coverage is complete and green
|
||||
- No blockers for remaining 06.1 wave plans
|
||||
|
||||
---
|
||||
*Phase: 06.1-close-v1-audit-gaps*
|
||||
*Completed: 2026-05-30*
|
||||
Reference in New Issue
Block a user