Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
6.2 KiB
Test Coverage Report
Summary
This PR increases test coverage for two files to meet the 90%+ target:
app/api/url_upload.py: Increased from 80.22% to 91.21% ✅app/views/files.py: Increased from 18.45% to 90.61% ✅
Coverage Details
app/api/url_upload.py (91.21% coverage)
Previous Coverage: 80.22% (138 statements, 20 missing, 44 branches, 12 partial)
New Coverage: 91.21% (138 statements, 6 missing, 44 branches, 10 partial)
New Tests Added (10 tests):
test_process_url_request_exception- Tests handling of generic RequestExceptiontest_process_url_oserror_during_save- Tests OSError when saving file to disktest_process_url_unexpected_exception- Tests handling of unexpected exceptionstest_process_url_filename_without_extension- Tests files without extensionstest_process_url_empty_path_uses_download- Tests default filename for URLs without pathtest_validate_url_no_hostname- Tests URL validation without hostnametest_validate_file_type_by_extension_fallback- Tests file type validation by extensiontest_is_private_ip_ipv6_loopback- Tests IPv6 loopback detectiontest_is_private_ip_link_local- Tests link-local address detectiontest_process_url_sanitizes_dangerous_filename- Tests filename sanitization security
Coverage Improvements:
- Error handling: Now covers all exception handlers (RequestException, OSError, unexpected exceptions)
- Edge cases: Covers missing hostnames, empty paths, files without extensions
- Security: IPv6 loopback, link-local addresses, dangerous filename sanitization
- File validation: Extension-based fallback validation
app/views/files.py (90.61% coverage)
Previous Coverage: 18.45% (225 statements, 173 missing, 84 branches, 3 partial)
New Coverage: 90.61% (225 statements, 14 missing, 84 branches, 13 partial)
New Tests Added (27 tests in new file test_files_view_extended.py):
Files Page Tests (5 tests):
test_files_page_with_search_filter- Tests search filteringtest_files_page_with_mime_type_filter- Tests MIME type filteringtest_files_page_with_sorting- Tests sorting (asc/desc)test_files_page_pagination- Tests pagination with different page sizestest_files_page_error_handling- Tests error handling
File Detail Page Tests (4 tests):
6. test_file_detail_page_with_existing_file - Tests detail page for existing file
7. test_file_detail_page_with_missing_file - Tests 404 handling
8. test_file_detail_page_with_processing_logs - Tests log display
9. test_file_detail_page_with_metadata - Tests metadata JSON display
File Preview Tests (6 tests):
10. test_preview_original_file_success - Tests successful preview of original file
11. test_preview_original_file_not_found - Tests 404 for non-existent file
12. test_preview_original_file_missing_on_disk - Tests missing file on disk
13. test_preview_processed_file_success - Tests successful preview of processed file
14. test_preview_processed_file_not_found - Tests 404 for non-existent file
15. test_preview_processed_file_missing_on_disk - Tests missing file on disk
Text Extraction Tests (8 tests):
16. test_get_original_text_success - Tests successful text extraction from original
17. test_get_original_text_file_not_found - Tests 404 handling
18. test_get_original_text_file_missing_on_disk - Tests missing file handling
19. test_get_original_text_extraction_error - Tests invalid PDF handling
20. test_get_processed_text_success - Tests successful text extraction from processed
21. test_get_processed_text_file_not_found - Tests 404 handling
22. test_get_processed_text_file_missing_on_disk - Tests missing file handling
23. test_get_processed_text_extraction_error - Tests invalid PDF handling
Unit Tests for Helper Functions (4 tests):
24. test_compute_processing_flow_basic - Tests processing flow computation
25. test_compute_processing_flow_with_uploads - Tests flow with upload branches
26. test_compute_step_summary_basic - Tests step summary computation
27. test_compute_step_summary_order_independent - Tests order independence
Coverage Improvements:
- Main flow: Files list page with pagination, sorting, filtering
- Detail pages: File detail with logs, metadata, file existence checks
- File serving: Preview original/processed files with error handling
- Text extraction: On-demand text extraction with error handling
- Helper functions: Processing flow and step summary computation
- Edge cases: Missing files, invalid PDFs, error conditions
Test Execution Results
All tests passing:
- url_upload tests: 39 tests passed
- files view tests: 30 tests passed
- Total: 69 tests passed, 0 failures
Test Quality
Test Structure
- Tests organized by feature using pytest classes
- Proper use of pytest markers (
@pytest.mark.unit,@pytest.mark.integration,@pytest.mark.requires_db) - Clear, descriptive test names following pattern:
test_<what>_<condition>_<expected> - Comprehensive docstrings for each test
Coverage Focus
- Main usage flows: File upload, listing, detail viewing, preview, text extraction
- Edge conditions: Missing files, invalid inputs, network errors, file system errors
- Error handling: All exception paths covered
- Security: SSRF protection, filename sanitization, input validation
Mocking Strategy
- External dependencies properly mocked (requests, Celery tasks)
- Database operations use test fixtures with in-memory SQLite
- File system operations use pytest's
tmp_pathfixture - No actual HTTP requests or file operations outside test environment
Files Changed
- tests/test_url_upload.py - Added 10 new tests
- tests/test_files_view_extended.py - Created new file with 27 tests
- Existing tests in tests/test_files_view.py - Maintained (3 tests)
Validation
Coverage validated with:
pytest tests/test_url_upload.py --cov=app/api/url_upload --cov-report=term-missing
# Result: 91.21% coverage
pytest tests/test_files_view.py tests/test_files_view_extended.py --cov=app/views/files --cov-report=term-missing
# Result: 90.61% coverage
All tests pass without failures or errors.