|
|
|
@@ -35,17 +35,46 @@ class TripFinanceQueryServiceTest {
|
|
|
|
|
assertThat(result.totals().get(0).receivableAmount()).isEqualByComparingTo("20");
|
|
|
|
|
assertThat(result.documents().get(0).allocationStatus()).isEqualTo("ATTRIBUTED");
|
|
|
|
|
}
|
|
|
|
|
@Test void issuedPartialAndPaidBillsKeepTheirConfirmedAllocation() {
|
|
|
|
|
for(String status:List.of("ISSUED","PARTIALLY_PAID","PAID")) {
|
|
|
|
|
setup();fee(1,1,"DL-A",1,"CNY","20","AVAILABLE");bill(1,1);
|
|
|
|
|
String amount="PAID".equals(status)?"20":"3.5";receipt(amount);
|
|
|
|
|
jdbc.update("UPDATE fin_bill SET status=?",status);
|
|
|
|
|
var result=service.query(request(true));
|
|
|
|
|
assertThat(result.documents()).as(status).hasSize(1);
|
|
|
|
|
assertThat(result.documents().get(0).allocationStatus()).isEqualTo("ATTRIBUTED");
|
|
|
|
|
assertThat(result.totals().get(0).receivedAmount()).as(status).isEqualByComparingTo(amount);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Test void draftPendingApprovedAndVoidedBillsNeverContributeReceipts() {
|
|
|
|
|
for(String status:List.of("DRAFT","PENDING_REVIEW","APPROVED","VOIDED")) {
|
|
|
|
|
setup();fee(1,1,"DL-A",1,"CNY","20","AVAILABLE");bill(1,1);receipt("3.5");
|
|
|
|
|
jdbc.update("UPDATE fin_bill SET status=?",status);
|
|
|
|
|
var result=service.query(request(true));assertThat(result.documents()).as(status).isEmpty();
|
|
|
|
|
assertThat(result.totals().get(0).receivedAmount()).isNull();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Test void paidBillStillEnforcesCustomerVersionAndCurrencyAttribution() {
|
|
|
|
|
for(String change:List.of("source_version=2","tenant_id=2","currency_code='USD'")) {
|
|
|
|
|
setup();fee(1,1,"DL-A",1,"CNY","20","AVAILABLE");bill(1,1);receipt("20");
|
|
|
|
|
jdbc.update("UPDATE fin_bill SET status='PAID'");jdbc.update("UPDATE fin_bill_line SET "+change);
|
|
|
|
|
assertThat(service.query(request(true)).totals().get(0).receivedAmount()).as(change).isNull();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@Test void mixedBillNeverProratesReceipt() {
|
|
|
|
|
fee(1,1,"DL-A",1,"CNY","20","AVAILABLE");bill(1,1);receipt("30");
|
|
|
|
|
jdbc.update("INSERT INTO fin_bill_line VALUES(1,1,999,1,'CNY')");
|
|
|
|
|
jdbc.update("UPDATE fin_bill SET status='PAID'");
|
|
|
|
|
var result=service.query(request(true));assertThat(result.totals().get(0).receivedAmount()).isNull();
|
|
|
|
|
assertThat(result.documents()).hasSize(1);
|
|
|
|
|
assertThat(result.documents().get(0).billNo()).isEqualTo("BILL-A");
|
|
|
|
|
assertThat(result.documents().get(0).allocationStatus()).isEqualTo("PENDING_ALLOCATION");
|
|
|
|
|
}
|
|
|
|
|
@Test void unbilledOrNoConfirmedReceiptIsUnknownNotZero() {
|
|
|
|
|
fee(1,1,"DL-A",1,"CNY","0","AVAILABLE");
|
|
|
|
|
assertThat(service.query(request(true)).totals().get(0).receivedAmount()).isNull();
|
|
|
|
|
bill(1,1);assertThat(service.query(request(true)).totals().get(0).receivedAmount()).isNull();
|
|
|
|
|
bill(1,1);var unpaid=service.query(request(true));assertThat(unpaid.totals().get(0).receivedAmount()).isNull();
|
|
|
|
|
assertThat(unpaid.documents()).hasSize(1);assertThat(unpaid.documents().get(0).allocationStatus()).isEqualTo("PENDING_ALLOCATION");
|
|
|
|
|
assertThat(service.query(request(true)).totals().get(0).receivableAmount()).isEqualByComparingTo("0");
|
|
|
|
|
}
|
|
|
|
|
@Test void latestVoidedDoesNotFallBackAndOtherCustomerExcluded() {
|
|
|
|
|