Files
gh-christianlouis-docuelevate/COVERAGE_REPORT.md
2026-02-14 00:10:57 +00:00

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):

  1. test_process_url_request_exception - Tests handling of generic RequestException
  2. test_process_url_oserror_during_save - Tests OSError when saving file to disk
  3. test_process_url_unexpected_exception - Tests handling of unexpected exceptions
  4. test_process_url_filename_without_extension - Tests files without extensions
  5. test_process_url_empty_path_uses_download - Tests default filename for URLs without path
  6. test_validate_url_no_hostname - Tests URL validation without hostname
  7. test_validate_file_type_by_extension_fallback - Tests file type validation by extension
  8. test_is_private_ip_ipv6_loopback - Tests IPv6 loopback detection
  9. test_is_private_ip_link_local - Tests link-local address detection
  10. test_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):

  1. test_files_page_with_search_filter - Tests search filtering
  2. test_files_page_with_mime_type_filter - Tests MIME type filtering
  3. test_files_page_with_sorting - Tests sorting (asc/desc)
  4. test_files_page_pagination - Tests pagination with different page sizes
  5. test_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_path fixture
  • No actual HTTP requests or file operations outside test environment

Files Changed

  1. tests/test_url_upload.py - Added 10 new tests
  2. tests/test_files_view_extended.py - Created new file with 27 tests
  3. 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.