from __future__ import annotations

from datetime import datetime, timezone

from django.test import SimpleTestCase

from istat.xml_export.http.responses import build_xml_download_response
from istat.xml_export.models.export_result import IstatXmlExportResult


class XmlDownloadResponseTests(SimpleTestCase):
    def test_build_xml_download_response_sets_headers_and_content(self):
        export_result = IstatXmlExportResult(
            filename="istat_movimenti_2_2026_05_13.xml",
            content='<?xml version="1.0" encoding="UTF-8"?><root>ciao</root>',
            content_type="application/xml",
            generated_at=datetime.now(timezone.utc),
            byte_size=57,
        )

        response = build_xml_download_response(export_result)

        self.assertEqual(response["Content-Type"], "application/xml")
        self.assertEqual(
            response["Content-Disposition"],
            'attachment; filename="istat_movimenti_2_2026_05_13.xml"',
        )
        self.assertEqual(
            response.content,
            export_result.content.encode("utf-8"),
        )

    def test_build_xml_download_response_preserves_utf8(self):
        export_result = IstatXmlExportResult(
            filename="utf8.xml",
            content='<?xml version="1.0" encoding="UTF-8"?><root>è</root>',
            content_type="application/xml",
            generated_at=datetime.now(timezone.utc),
            byte_size=0,
        )

        response = build_xml_download_response(export_result)

        self.assertEqual(response.content.decode("utf-8"), export_result.content)
