|
|
@@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest';
|
|
|
|
|
|
import { Order } from '../../../entity/order/order.entity';
|
|
|
import { Payment } from '../../../entity/payment/payment.entity';
|
|
|
+import { Refund } from '../../../entity/refund/refund.entity';
|
|
|
|
|
|
import { totalCoveredByPayments } from './order-utils';
|
|
|
|
|
|
@@ -86,4 +87,65 @@ describe('totalCoveredByPayments()', () => {
|
|
|
|
|
|
expect(totalCoveredByPayments(order, ['Settled', 'Authorized'])).toBe(800);
|
|
|
});
|
|
|
+
|
|
|
+ it('single payment, refunds with different states', () => {
|
|
|
+ const order = new Order({
|
|
|
+ payments: [
|
|
|
+ new Payment({
|
|
|
+ state: 'Settled',
|
|
|
+ amount: 500,
|
|
|
+ refunds: [
|
|
|
+ new Refund({ state: 'Settled', total: 100 }),
|
|
|
+ new Refund({ state: 'Pending', total: 200 }),
|
|
|
+ ],
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(totalCoveredByPayments(order, ['Settled', 'Authorized'])).toBe(400);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('single payment, refunds with different states', () => {
|
|
|
+ const order = new Order({
|
|
|
+ payments: [
|
|
|
+ new Payment({
|
|
|
+ state: 'Settled',
|
|
|
+ amount: 500,
|
|
|
+ refunds: [
|
|
|
+ new Refund({ state: 'Settled', total: 100 }),
|
|
|
+ new Refund({ state: 'Pending', total: 200 }),
|
|
|
+ ],
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(totalCoveredByPayments(order, ['Settled', 'Authorized'])).toBe(400);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('multiple payments, refunds with different states', () => {
|
|
|
+ const order = new Order({
|
|
|
+ payments: [
|
|
|
+ new Payment({
|
|
|
+ state: 'Settled',
|
|
|
+ amount: 500,
|
|
|
+ refunds: [
|
|
|
+ new Refund({ state: 'Settled', total: 100 }),
|
|
|
+ new Refund({ state: 'Pending', total: 200 }),
|
|
|
+ new Refund({ state: 'Settled', total: 100 }),
|
|
|
+ ],
|
|
|
+ }),
|
|
|
+ new Payment({
|
|
|
+ state: 'Settled',
|
|
|
+ amount: 500,
|
|
|
+ refunds: [
|
|
|
+ new Refund({ state: 'Settled', total: 100 }),
|
|
|
+ new Refund({ state: 'Failed', total: 200 }),
|
|
|
+ new Refund({ state: 'Pending', total: 200 }),
|
|
|
+ ],
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(totalCoveredByPayments(order, ['Settled', 'Authorized'])).toBe(700);
|
|
|
+ });
|
|
|
});
|