Files
gh-christianlouis-docuelevate/tests/test_files_view.py

94 lines
3.7 KiB
Python

"""
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"