| 4-01-01 |
01 |
1 |
FOLD-01..05, SHARE-01..05, DOC-02, ADMIN-06, SEC-08, SEC-09 |
T-4-00 / — |
Wave 0 test stubs created across test_folders.py, test_shares.py, test_audit.py, test_documents.py, test_security.py |
unit |
pytest backend/tests/ -x |
✅ |
✅ green |
| 4-02-01 |
02 |
2 |
STORE-01 |
— |
Alembic migration tests exist in test_alembic.py (SQLite-based xfail/skip — alembic not installed in local env) |
integration |
pytest backend/tests/test_alembic.py -x |
✅ |
⚠️ skipped (alembic not in test env) |
| 4-03-01 |
03 |
2 |
FOLD-01 |
T-4-01 |
Create folder returns 201; duplicate name returns 409 |
integration |
pytest backend/tests/test_folders.py::test_create_root_folder backend/tests/test_folders.py::test_create_folder_duplicate_name_409 -x |
✅ |
✅ green |
| 4-03-02 |
03 |
2 |
FOLD-01 |
T-4-01 |
Rename folder returns 200; wrong owner returns 404 |
integration |
pytest backend/tests/test_folders.py::test_rename_folder backend/tests/test_folders.py::test_rename_folder_wrong_owner_404 -x |
✅ |
✅ green |
| 4-03-03 |
03 |
2 |
FOLD-01 |
T-4-01 |
Delete empty folder returns 204 |
integration |
pytest backend/tests/test_folders.py::test_delete_empty_folder -x |
✅ |
✅ green |
| 4-03-04 |
03 |
2 |
FOLD-01, FOLD-02 |
T-4-01 |
Delete non-empty folder cascade-deletes all docs; quota decrements |
integration |
pytest backend/tests/test_folders.py::test_delete_folder_cascade_documents backend/tests/test_folders.py::test_delete_folder_cascade_quota -x |
✅ |
✅ green |
| 4-03-05 |
03 |
2 |
FOLD-02 |
T-4-04 |
Move document — ownership assertion on both doc and target folder (404) |
integration |
pytest backend/tests/test_folders.py::test_move_document_wrong_owner_404 backend/tests/test_folders.py::test_move_document_to_other_users_folder_404 -x |
✅ |
✅ green |
| 4-03-06 |
03 |
2 |
FOLD-03 |
— |
Breadcrumb path returned from folder endpoint |
unit |
pytest backend/tests/test_folders.py::test_get_folder_breadcrumb_single backend/tests/test_folders.py::test_get_folder_breadcrumb_deep -x |
✅ |
✅ green |
| 4-03-07 |
03 |
2 |
FOLD-04 |
— |
Document list sort by name/date/size returns correctly ordered results |
integration |
pytest backend/tests/test_documents.py::test_document_sort_by_name_asc backend/tests/test_documents.py::test_document_sort_by_size_desc -x |
✅ |
✅ green |
| 4-03-08 |
03 |
2 |
FOLD-05 |
T-4-05 |
?q= search returns 200 + user-isolated results; cross-user docs never leak |
integration |
pytest backend/tests/test_documents.py::test_fts_search_returns_200 backend/tests/test_documents.py::test_fts_search_cross_user_isolation -x |
✅ |
✅ green |
| 4-04-01 |
04 |
3 |
SHARE-01 |
T-4-02 |
Share by handle — success; handle not found returns 404 |
integration |
pytest backend/tests/test_shares.py::test_share_success backend/tests/test_shares.py::test_share_handle_not_found -x |
✅ |
✅ green |
| 4-04-02 |
04 |
3 |
SHARE-02 |
T-4-02 |
Shared doc appears in recipient virtual folder; zero quota charged |
integration |
pytest backend/tests/test_shares.py::test_shared_with_me backend/tests/test_shares.py::test_share_no_quota_impact -x |
✅ |
✅ green |
| 4-04-03 |
04 |
3 |
SHARE-04 |
T-4-02 |
Revoke share — immediate; recipient can no longer access |
integration |
pytest backend/tests/test_shares.py::test_revoke_share -x |
✅ |
✅ green |
| 4-04-04 |
04 |
3 |
SHARE-01..04 |
T-4-02 |
Share IDOR — wrong owner cannot revoke (404) |
security (negative) |
pytest backend/tests/test_shares.py::test_share_revoke_wrong_owner_404 -x |
✅ |
✅ green |
| 4-05-01 |
05 |
3 |
DOC-02 |
T-4-03 |
PDF proxy streams bytes; no presigned URL in response; Content-Disposition: inline |
integration |
pytest backend/tests/test_documents.py::test_content_stream_200 -x |
✅ |
✅ green |
| 4-05-02 |
05 |
3 |
DOC-02 |
T-4-03 |
Range header → 206 with Content-Range header |
integration |
pytest backend/tests/test_documents.py::test_content_stream_206_range -x |
✅ |
✅ green |
| 4-05-03 |
05 |
3 |
DOC-02 |
T-4-03 |
Admin blocked from proxy (403) |
security (negative) |
pytest backend/tests/test_documents.py::test_content_stream_admin_403 -x |
✅ |
✅ green |
| 4-05-04 |
05 |
3 |
DOC-02 |
T-4-03 |
No presigned URL generated or returned in proxy response |
security (negative) |
pytest backend/tests/test_documents.py::test_content_stream_no_presigned_url -x |
✅ |
✅ green |
| 4-06-01 |
06 |
4 |
ADMIN-06 |
T-4-06 |
Audit log viewer returns paginated entries; filters work |
integration |
pytest backend/tests/test_audit.py::test_audit_log_viewer -x |
✅ |
✅ green |
| 4-06-02 |
06 |
4 |
ADMIN-06 |
T-4-06 |
Audit log entries contain no document content, filename, or extracted_text |
security (negative) |
pytest backend/tests/test_audit.py::test_audit_log_no_doc_content -x |
✅ |
✅ green |
| 4-06-03 |
06 |
4 |
ADMIN-06 |
T-4-06 |
Regular user cannot access audit log (403) |
security (negative) |
pytest backend/tests/test_audit.py::test_audit_log_regular_user_403 -x |
✅ |
✅ green |
| 4-07-01 |
07 |
4 |
SEC-08 |
T-4-07 |
credentials_enc absent from all API responses (documents list, document detail) |
security (negative) |
pytest backend/tests/test_security.py::test_credentials_enc_not_in_response -x |
✅ |
✅ green |
| 4-07-02 |
07 |
4 |
SEC-09 |
T-4-08 |
Admin delete user triggers MinIO object deletion before DB removal |
integration |
pytest backend/tests/test_security.py::test_delete_user_cleans_files -x |
✅ |
✅ green |