""" Test the /files view UI endpoint to ensure template rendering works correctly. """ import pytest from fastapi.testclient import TestClient from app.models import FileRecord def _assert_no_template_errors(content: str): """Helper function to check that min/max undefined errors are not present.""" assert "'min' is undefined" not in content assert "'max' is undefined" not in content @pytest.mark.integration @pytest.mark.requires_db class TestFilesView: """Tests for the /files UI view.""" def test_files_view_renders_without_error(self, client: TestClient, db_session): """Test that the /files view renders without 'min' undefined error.""" # Create some test files to ensure pagination works for i in range(10): file_record = FileRecord( filehash=f"hash{i}", original_filename=f"test{i}.pdf", local_filename=f"/tmp/test{i}.pdf", file_size=1024 * (i + 1), mime_type="application/pdf", ) db_session.add(file_record) db_session.commit() # Access the /files view response = client.get("/files") assert response.status_code == 200 # Check that the response is HTML assert "text/html" in response.headers.get("content-type", "") # Check that the response contains expected content content = response.text assert "File Records" in content # Ensure no 'min' or 'max' is undefined error - this is the key fix we're testing _assert_no_template_errors(content) def test_files_view_pagination_with_many_pages(self, client: TestClient, db_session): """Test that pagination works correctly with many pages and min/max functions work.""" # Create enough files to span multiple pages (e.g., 150 files with 50 per page = 3 pages) for i in range(150): file_record = FileRecord( filehash=f"hash{i}", original_filename=f"test{i}.pdf", local_filename=f"/tmp/test{i}.pdf", file_size=1024, mime_type="application/pdf", ) db_session.add(file_record) db_session.commit() # Access the /files view with pagination response = client.get("/files?page=2&per_page=50") assert response.status_code == 200 content = response.text # The key test: ensure the min/max functions work in the template # (they're used for pagination on lines 397 and 406 of files.html) _assert_no_template_errors(content) def test_files_view_includes_drag_drop_elements(self, client: TestClient, db_session): """Test that the /files view includes drag-and-drop upload elements.""" # Access the /files view response = client.get("/files") assert response.status_code == 200 content = response.text # Check that drag-and-drop elements are present assert "dropOverlay" in content, "Drop overlay element should be present" assert "uploadModal" in content, "Upload modal element should be present" assert "drop-overlay" in content, "Drop overlay CSS class should be present" assert "upload-modal" in content, "Upload modal CSS class should be present" # Check that the upload.js script is included assert "/static/js/upload.js" in content, "upload.js script should be included" # Check for drag-and-drop event handlers assert "dragenter" in content or "drag" in content, "Drag event handlers should be present" assert "Drop files or folders anywhere to upload" in content, "Drop message should be present"