Skip to content

Commit 4e48e88

Browse files
committed
add unit tests for isUnreportedAndHasInvalidDistanceRateTransaction
1 parent 783d507 commit 4e48e88

1 file changed

Lines changed: 126 additions & 0 deletions

File tree

tests/unit/TransactionUtilsTest.ts

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import CONST from '@src/CONST';
44
import IntlStore from '@src/languages/IntlStore';
55
import ONYXKEYS from '@src/ONYXKEYS';
66
import type {Attendee} from '@src/types/onyx/IOU';
7+
import type {CustomUnit, Rate} from '@src/types/onyx/Policy';
78
import type {ReportCollectionDataSet} from '@src/types/onyx/Report';
9+
import type {TransactionCustomUnit} from '@src/types/onyx/Transaction';
810
import * as TransactionUtils from '../../src/libs/TransactionUtils';
911
import type {Policy, Transaction} from '../../src/types/onyx';
1012
import createRandomPolicy, {createCategoryTaxExpenseRules} from '../utils/collections/policies';
@@ -69,6 +71,40 @@ const reportCollectionDataSet: ReportCollectionDataSet = {
6971
[`${ONYXKEYS.COLLECTION.REPORT}${FAKE_APPROVED_REPORT_ID}`]: approvedReport,
7072
[`${ONYXKEYS.COLLECTION.REPORT}${FAKE_OPEN_REPORT_SECOND_USER_ID}`]: secondUserOpenReport,
7173
};
74+
const defaultDistanceRatePolicyID1: Record<string, Rate> = {
75+
customUnitRateID1: {
76+
currency: 'USD',
77+
customUnitRateID: 'customUnitRateID1',
78+
enabled: true,
79+
name: 'Default Rate',
80+
rate: 70,
81+
subRates: [],
82+
},
83+
};
84+
const distanceRateTransactionID1: TransactionCustomUnit = {
85+
customUnitID: 'customUnitID1',
86+
customUnitRateID: 'customUnitRateID1',
87+
distanceUnit: 'mi',
88+
name: 'Distance',
89+
};
90+
const distanceRateTransactionID2: TransactionCustomUnit = {
91+
customUnitID: 'customUnitID2',
92+
customUnitRateID: 'customUnitRateID2',
93+
distanceUnit: 'mi',
94+
name: 'Distance',
95+
};
96+
const defaultCustomUnitPolicyID1: Record<string, CustomUnit> = {
97+
customUnitID1: {
98+
attributes: {
99+
unit: 'mi',
100+
},
101+
customUnitID: 'customUnitID1',
102+
defaultCategory: 'Car',
103+
enabled: true,
104+
name: 'Distance',
105+
rates: defaultDistanceRatePolicyID1,
106+
},
107+
};
72108

73109
describe('TransactionUtils', () => {
74110
beforeAll(() => {
@@ -520,4 +556,94 @@ describe('TransactionUtils', () => {
520556
expect(result).toEqual(expected);
521557
});
522558
});
559+
560+
describe('isUnreportedAndHasInvalidDistanceRateTransaction', () => {
561+
it('should be false when transaction is null', () => {
562+
const fakePolicy: Policy = {
563+
...createRandomPolicy(0),
564+
customUnits: defaultCustomUnitPolicyID1,
565+
};
566+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(null, fakePolicy);
567+
expect(result).toBe(false);
568+
});
569+
it('should be false when transaction is not distance type transaction', () => {
570+
const fakePolicy: Policy = {
571+
...createRandomPolicy(0),
572+
customUnits: defaultCustomUnitPolicyID1,
573+
};
574+
const transaction: Transaction = {
575+
...generateTransaction(),
576+
iouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL,
577+
};
578+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(transaction, fakePolicy);
579+
expect(result).toBe(false);
580+
});
581+
it('should be false when transaction is reported', () => {
582+
const fakePolicy: Policy = {
583+
...createRandomPolicy(0),
584+
customUnits: defaultCustomUnitPolicyID1,
585+
};
586+
const transaction: Transaction = {
587+
...generateTransaction(),
588+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
589+
reportID: '1',
590+
};
591+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(transaction, fakePolicy);
592+
expect(result).toBe(false);
593+
});
594+
it('should be false when transaction is unreported and has valid rate', () => {
595+
const fakePolicy: Policy = {
596+
...createRandomPolicy(0),
597+
customUnits: defaultCustomUnitPolicyID1,
598+
};
599+
const transaction: Transaction = {
600+
...generateTransaction(),
601+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
602+
reportID: '0',
603+
comment: {
604+
customUnit: distanceRateTransactionID1,
605+
type: 'customUnit',
606+
},
607+
};
608+
609+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(transaction, fakePolicy);
610+
expect(result).toBe(false);
611+
});
612+
it('should be false when transaction is unreported, has invalid rate but policy has default rate', () => {
613+
const fakePolicy: Policy = {
614+
...createRandomPolicy(0),
615+
customUnits: defaultCustomUnitPolicyID1,
616+
};
617+
const transaction: Transaction = {
618+
...generateTransaction(),
619+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
620+
reportID: '0',
621+
comment: {
622+
customUnit: distanceRateTransactionID2,
623+
type: 'customUnit',
624+
},
625+
};
626+
627+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(transaction, fakePolicy);
628+
expect(result).toBe(false);
629+
});
630+
it('should be true when transaction is unreported, has invalid rate and policy has no default rate', () => {
631+
const fakePolicy: Policy = {
632+
...createRandomPolicy(0),
633+
customUnits: {},
634+
};
635+
const transaction: Transaction = {
636+
...generateTransaction(),
637+
iouRequestType: CONST.IOU.REQUEST_TYPE.DISTANCE,
638+
reportID: '0',
639+
comment: {
640+
customUnit: distanceRateTransactionID2,
641+
type: 'customUnit',
642+
},
643+
};
644+
645+
const result = TransactionUtils.isUnreportedAndHasInvalidDistanceRateTransaction(transaction, fakePolicy);
646+
expect(result).toBe(true);
647+
});
648+
});
523649
});

0 commit comments

Comments
 (0)