"""/api/drawing/dxf: browser R12 DXF (Unicode escapes) -> Korean code page (ANSI_949).""" import os import tempfile import pyogrio from fastapi.testclient import TestClient from backend.main import app, dxf_to_cp949 DXF = "\r\n".join([ "0", "SECTION", "2", "HEADER", "9", "$ACADVER", "1", "AC1009", "0", "ENDSEC", "0", "SECTION", "2", "ENTITIES", "0", "TEXT", "8", "TITLE", "10", "1", "20", "2", "30", "0", "40", "2.5", "1", r"\U+C218\U+B9AC \U+C885\U+B2E8\U+BA74\U+B3C4 \U+1F600", "0", "ENDSEC", "0", "EOF", "", ]) def test_conversion_reads_back_as_korean(): data = dxf_to_cp949(DXF) assert b"$DWGCODEPAGE\r\n3\r\nANSI_949" in data with tempfile.TemporaryDirectory() as tmp: p = os.path.join(tmp, "t.dxf") open(p, "wb").write(data) meta, _, _, fields = pyogrio.raw.read(p) text = fields[list(meta["fields"]).index("Text")][0] assert text.startswith("수리 종단면도") assert r"\U+1F600" in data.decode("cp949") # outside CP949: kept escaped def test_endpoint(): with TestClient(app) as c: r = c.post("/api/drawing/dxf", json={"dxf": DXF, "name": "수리 종단면도"}) assert r.status_code == 200 and "attachment" in r.headers["content-disposition"] assert "수리".encode("cp949") in r.content assert c.post("/api/drawing/dxf", json={"dxf": "nope"}).status_code == 400