import pytest from fastapi.testclient import TestClient from main import app from routes.translate_routes import TranslateEndpointError client = TestClient(app) def test_validate_unsupported_extension(): # Test with .txt file files = {"file": ("test.txt", b"some text content", "text/plain")} response = client.post( "/api/v1/translate", files=files, data={"target_lang": "fr"} ) assert response.status_code == 400 assert response.json()["error"] == "INVALID_FORMAT" # Updated message to French assert "Formats acceptes" in response.json()["message"] def test_validate_invalid_magic_bytes(): # Test with .docx extension but invalid content (should trigger CORRUPTED_FILE) files = {"file": ("test.docx", b"not a zip file", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")} response = client.post( "/api/v1/translate", files=files, data={"target_lang": "fr"} ) assert response.status_code == 400 assert response.json()["error"] == "CORRUPTED_FILE" assert "corrompu" in response.json()["message"] def test_validate_valid_file_header(): # Test with a minimal valid-looking zip (Office files are ZIPs) # FileValidator checks for b"PK\x03\x04" files = {"file": ("test.docx", b"PK\x03\x04" + b"\x00" * 20, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")} response = client.post( "/api/v1/translate", files=files, data={"target_lang": "fr"} ) # Should be 202 (Accepted) if validation passes assert response.status_code == 202 assert response.json()["data"]["status"] == "processing" def test_validate_too_large_file(): # Test with file larger than 50MB large_content = b"PK\x03\x04" + b"0" * (51 * 1024 * 1024) files = {"file": ("large.docx", large_content, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")} response = client.post( "/api/v1/translate", files=files, data={"target_lang": "fr"} ) assert response.status_code == 413 assert response.json()["error"] == "FILE_TOO_LARGE" assert "volumineux" in response.json()["message"]