Files
Aislo/resources/tester/test_est_attachments.py
T

50 lines
2.2 KiB
Python

from test_est_rea_parity import run
import subprocess
from pathlib import Path
def test_attachment_size_prediction_includes_utf8_and_base64_overhead():
result = run(
"math",
"""(()=>{
const p=EstNative.empty();p.name='한글';const file={name:'파일.bin',type:'',size:4};
const expected={...p,id:'0'.repeat(24),attachments:[{id:'0'.repeat(36),...file,data:'AAECAw=='}]};
return {predicted:EstAttachments.requiredBytes(p,[file]),actual:new Blob([JSON.stringify(expected)]).size,
large:EstAttachments.requiredBytes(p,[{name:'large',type:'',size:210000000}]),count:p.attachments.length};
})()""",
)
assert result["predicted"] == result["actual"]
assert result["large"] > 256 * 1024 * 1024
assert result["count"] == 0
def test_attachment_validation_keeps_valid_data_and_rejects_malformed_content():
result = run(
"math",
"""(()=>{
const p=EstNative.empty();p.attachments=[{id:'one',name:'test.bin',type:'application/octet-stream',size:4,data:'AAECAw=='}];
const valid=EstModel.validate(p).attachments[0];let rejected=0;
for(const item of [{...valid,data:'AAECAw=A'},{...valid,size:5},{...valid,id:''},{...valid,name:''}]) {
const q=EstNative.empty();q.attachments=[item];try{EstModel.validate(q)}catch{rejected++}
}
const dup=EstNative.empty();dup.attachments=[valid,valid];try{EstModel.validate(dup)}catch{rejected++}
const empty=EstNative.empty();empty.attachments=[{id:'zero',name:'empty',type:'',size:0,data:''}];
return {valid,rejected,empty:EstModel.validate(empty).attachments[0].size};
})()""",
)
assert result["valid"]["data"] == "AAECAw=="
assert result["rejected"] == 5
assert result["empty"] == 0
def test_estx_export_rejects_web_attachments_instead_of_dropping_them():
script = """try{require('./tools/est-test/export-estx.cjs').exportEstx({originalArchive:'AA==',attachments:[{}]});process.exit(1)}catch(e){process.stdout.write(e.message)}"""
result = subprocess.run(
["node", "-e", script],
cwd=Path(__file__).resolve().parents[2],
capture_output=True,
check=True,
timeout=10,
)
assert "JSON" in result.stdout.decode("utf-8")