import pytest import io import zipfile import os from fastapi.testclient import TestClient from sqlalchemy.orm import Session from app.models.domain import Domain def test_read_reports_empty(client: TestClient): """Test reading reports when none exist""" response = client.get("/api/v1/reports") assert response.status_code == 200 data = response.json() assert data == [] def test_upload_report_no_domain(client: TestClient): """Test uploading a report when domain doesn't exist""" # Create a simple XML report xml_content = """ google.com noreply-dmarc-support@google.com 123456789 1597449600 1597535999 nonexistentdomain.com r r

none

none 100
203.0.113.1 2 none pass fail nonexistentdomain.com nonexistentdomain.com pass default nonexistentdomain.com fail
""" # Create an in-memory zip file zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w') as zip_file: zip_file.writestr('report.xml', xml_content) zip_buffer.seek(0) # Upload the zip file response = client.post( "/api/v1/reports/upload", files={"file": ("report.zip", zip_buffer, "application/zip")} ) # Should return an error since domain doesn't exist assert response.status_code == 404 data = response.json() assert "domain not found" in data["detail"].lower() def test_upload_report_success(client: TestClient, db_session: Session): """Test successfully uploading a report""" # Create a domain first domain = Domain(name="example.com", active=True) db_session.add(domain) db_session.commit() # Create a simple XML report xml_content = """ google.com noreply-dmarc-support@google.com 123456789 1597449600 1597535999 example.com r r

none

none 100
203.0.113.1 2 none pass fail example.com example.com pass default example.com fail
""" # Create an in-memory zip file zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w') as zip_file: zip_file.writestr('report.xml', xml_content) zip_buffer.seek(0) # Upload the zip file response = client.post( "/api/v1/reports/upload", files={"file": ("report.zip", zip_buffer, "application/zip")} ) # Should be successful assert response.status_code == 201 data = response.json() assert data["success"] is True assert "report_id" in data # Check that the report was actually created response = client.get("/api/v1/reports") assert response.status_code == 200 reports = response.json() assert len(reports) == 1 assert reports[0]["report_id"] == "123456789" assert reports[0]["org_name"] == "google.com"