65 lines
2.6 KiB
Python
65 lines
2.6 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,Reason:'checked'},'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,Reason:'quantity reviewed'}}};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
|
|
assert result["rows"][1]["Reason"] == "quantity reviewed"
|