Files
Aislo/resources/tester/test_est_review_workflow.py
T

64 lines
2.5 KiB
Python

from test_est_rea_parity import run
def test_review_recalculates_user_inputs_and_opens_independent_copy():
result = run(
"math",
"""(()=>{
const p=EstNative.empty();p.name='contract';p.id='123456789012345678901234';
p.options.SourceRefresh=false;p.tables.EstMainDat=[
{PkID:1,Code:'',Name:'normal',GN:10,GU:100},
{PkID:2,Code:'',Name:'fixed',GN:1,GC:100,TC:100,CalcIndex:1},
{LinkIndex:54}];
p.tables.Wonga=[{Gubun:'D',BaseField:'TC'},
{Gubun:'V',VSusic:'D*0.1'},{Gubun:'T',LinkIndex:55,VSusic:'D+V'}];
const q=EstNative.calculate(p);q.contractReview={edits:{'row:1':{GN:2,GU:80},'row:2':{GC:20}}};
const before=JSON.stringify(q),review=EstReview.calculate(q),copy=EstReview.copy(q);
const same=JSON.stringify(q)===before;copy.tables.EstMainDat[0].GN=99;
return {review,same,original:q.tables.EstMainDat[0].GN,copy};
})()""",
)
assert result["same"] and result["original"] == 10
assert result["review"]["errors"] == []
assert result["review"]["before"] == 1210
assert result["review"]["after"] == 198
assert result["review"]["reviewed"]["tables"]["EstMainDat"][1]["TC"] == 20
assert "id" not in result["copy"]
assert "contractReview" not in result["copy"]
def test_review_rejects_invalid_and_stale_inputs():
result = run(
"math",
"""(()=>{
const p=EstNative.empty();p.tables.EstMainDat=[{PkID:1,Code:'A',GN:1,GU:10}];
const invalid=[];for(const edit of [{GN:'bad'},{GN:Infinity},{unrelated:1}]){
p.contractReview={edits:{'row:1':edit}};
try{EstModel.validate(p);invalid.push(false)}catch{invalid.push(true)}
}
p.contractReview={edits:{'row:missing':{GN:2}}};
let rejected=false;try{EstReview.copy(p)}catch{rejected=true}
return {invalid,rejected};
})()""",
)
assert result["invalid"] == [True, True, True]
assert result["rejected"]
def test_review_summary_print_contains_totals_and_item_differences():
result = run(
"math",
"""(()=>{
const p=EstNative.empty();p.tables.EstMainDat=[{PkID:1,Code:'',Name:'item',GN:2,GU:100}];
p.contractReview={edits:{'row:1':{GN:1,GU:80}}};return EstForms.data(171,p);
})()""",
)
assert result["errors"] == []
assert [result["rows"][0][key] for key in ["originalTC", "TC", "difference"]] == [
200,
80,
-120,
]
assert result["rows"][1]["Name"] == "item"
assert result["rows"][1]["difference"] == -120