test(procurement): reject receipt corrections after shipment
This commit is contained in:
+25
@@ -194,6 +194,31 @@ class ProcurementPhysicalPersistenceTest {
|
||||
assertThat(jdbc.queryForObject("SELECT SUM(good_quantity) FROM ll_procurement_receipt WHERE active=1",Long.class)).isEqualTo(8L);
|
||||
verifyNoInteractions(finance);
|
||||
}
|
||||
@Test void overseasShipmentRejectsReceiptCorrectionWithoutChangingOriginalFacts() {
|
||||
var receipt=receive(Leg.OVERSEAS,null,10,0,0,"r1").receipts().get(0);
|
||||
jdbc.update("UPDATE ll_procurement_flow SET overseas_shipped_at=CURRENT_TIMESTAMP WHERE order_id=11");
|
||||
long before=version();
|
||||
assertThatThrownBy(()->correct(receipt.id(),Leg.OVERSEAS,null,8,2)).hasMessageContaining("本段已实际交寄");
|
||||
assertThat(service.read("9","PO-1").receipts()).containsExactly(receipt);
|
||||
assertThat(version()).isEqualTo(before);
|
||||
assertThat(jdbc.queryForObject("SELECT COUNT(*) FROM ll_procurement_command WHERE action='CORRECT_RECEIPT'",Integer.class)).isZero();
|
||||
}
|
||||
|
||||
@Test void customerShipmentRejectsDomesticCorrectionWithoutReopeningReceiptOrCharges() {
|
||||
jdbc.update("UPDATE ll_procurement_flow SET overseas_shipped_at=? WHERE order_id=11",LocalDateTime.now().minusHours(2));
|
||||
jdbc.update("INSERT INTO ll_procurement_shipment(id,order_id,customer_id,shipment_no,leg,manifest_id,shipped_at,address_snapshot,created_by) VALUES(201,11,'9','PS-1','OVERSEAS',301,?, '{}','7')",LocalDateTime.now().minusHours(2));
|
||||
jdbc.update("INSERT INTO ll_procurement_shipment_item VALUES(201,101,10,'carrier','T1','{}')");
|
||||
var receipt=receive(Leg.DOMESTIC,101L,10,0,0,"d1").receipts().get(0);finish(Leg.DOMESTIC);
|
||||
jdbc.update("UPDATE ll_procurement_flow SET customer_shipped_at=CURRENT_TIMESTAMP,charges_confirmed_at=CURRENT_TIMESTAMP WHERE order_id=11");
|
||||
long before=version();
|
||||
assertThatThrownBy(()->correct(receipt.id(),Leg.DOMESTIC,101L,8,2)).hasMessageContaining("本段已实际交寄");
|
||||
assertThat(service.read("9","PO-1").receipts()).containsExactly(receipt);
|
||||
assertThat(version()).isEqualTo(before);
|
||||
assertThat(jdbc.queryForObject("SELECT domestic_received_at FROM ll_procurement_flow",java.sql.Timestamp.class)).isNotNull();
|
||||
assertThat(jdbc.queryForObject("SELECT charges_confirmed_at FROM ll_procurement_flow",java.sql.Timestamp.class)).isNotNull();
|
||||
assertThat(jdbc.queryForObject("SELECT quantity FROM ll_procurement_shipment_item",Long.class)).isEqualTo(10L);
|
||||
}
|
||||
|
||||
private ProcurementPhysicalService.Snapshot correct(long id,Leg leg,Long source,long good,long damaged) {
|
||||
return tx.execute(s->service.correctReceipt("9","PO-1","7",id,new Correction(new Receipt(version(),"correction",leg,
|
||||
leg==Leg.OVERSEAS?91L:null,source,good,damaged,0,LocalDateTime.now().minusHours(1),"evidence-backed correction"),1001)));
|
||||
|
||||
Reference in New Issue
Block a user