68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
from test_est_rea_parity import run
|
|
|
|
|
|
def test_annual_preview_is_financial_only_and_expanded_copy_preserves_assets():
|
|
result = run(
|
|
"math",
|
|
"""(()=>{
|
|
const p=EstNative.empty();p.id='123456789012345678901234';p.name='source';
|
|
p.options.SourceRefresh=false;p.originalArchive='original binary';
|
|
p.drawings=[{name:'drawing',binary:'AA=='}];
|
|
p.tables.EstMainDat=[{PkID:1,Code:'R',GN:3,GU:101},{LinkIndex:54}];
|
|
p.tables.StuffcDat=[{Code:'M',InputTC:123,ValueIndex:4}];
|
|
p.annual=[{name:' first ',formula:'[기준]*0.25'},{name:'second',formula:'[기준]-[first]'}];
|
|
const q=EstNative.calculate(p),before=JSON.stringify(q);
|
|
const preview=EstBusiness.annual(q,false),copy=EstBusiness.annualCopy(q,0);
|
|
copy.tables.StuffcDat[0].InputTC=456;
|
|
return {preview,copy,same:before===JSON.stringify(q)};
|
|
})()""",
|
|
)
|
|
assert result["same"]
|
|
assert result["preview"]["errors"] == []
|
|
assert result["preview"]["results"][0]["name"] == "first"
|
|
assert "originalArchive" not in result["preview"]["results"][0]["project"]
|
|
assert result["copy"]["originalArchive"] == "original binary"
|
|
assert result["copy"]["drawings"][0]["binary"] == "AA=="
|
|
assert "id" not in result["copy"]
|
|
assert result["copy"]["progress"] == result["copy"]["annual"] == []
|
|
assert result["copy"]["tables"]["EstMainDat"][0]["TC"] == 75
|
|
assert result["preview"]["results"][1]["project"]["tables"]["EstMainDat"][0]["TC"] == 228
|
|
|
|
|
|
def test_annual_copy_rejects_invalid_or_forward_references():
|
|
result = run(
|
|
"math",
|
|
"""(()=>{
|
|
const p=EstNative.empty();p.annual=[{name:'first',formula:'[second]'},{name:'second',formula:'[기준]'}];
|
|
p.tables.EstMainDat=[{Code:'R',GN:1,GC:100,TC:100,CalcIndex:1}];
|
|
try{EstBusiness.annualCopy(p,0);return false;}catch(error){return error.message;}
|
|
})()""",
|
|
)
|
|
assert "참조 항목 없음" in result
|
|
|
|
|
|
def test_annual_rejects_names_that_shadow_contract_references():
|
|
result = run(
|
|
"math",
|
|
"""(()=>{
|
|
const p=EstNative.empty();p.tables.EstMainDat=[{Code:'R',GN:1,GC:100,TC:100,CalcIndex:1}];
|
|
return ['기준','계약','계약수량','first'].map(name=>{
|
|
p.annual=[{name,formula:'[기준]*0.5'},{name:'next',formula:'[기준]-['+name+']'}];
|
|
return EstBusiness.annual(p,false);
|
|
});
|
|
})()""",
|
|
)
|
|
assert all(item["errors"] for item in result[:3])
|
|
assert result[3]["errors"] == []
|
|
assert result[3]["results"][1]["project"]["tables"]["EstMainDat"][0]["TC"] == 50
|
|
|
|
|
|
def test_new_annual_name_does_not_reuse_existing_or_referenced_names():
|
|
result = run(
|
|
"math",
|
|
"""[EstBusiness.newAnnualName([{name:'2차',formula:'[기준]-[1차]'}]),
|
|
EstBusiness.newAnnualName([{name:'2차',formula:'[기준]'}]),
|
|
EstBusiness.newAnnualName([])]""",
|
|
)
|
|
assert result == ["3차", "1차", "1차"]
|