|
1 | 1 | import {renderHook} from '@testing-library/react-native'; |
2 | 2 | import Onyx from 'react-native-onyx'; |
3 | 3 | import useReportIsArchived from '@hooks/useReportIsArchived'; |
4 | | -import {getReportPrimaryAction, getTransactionThreadPrimaryAction} from '@libs/ReportPrimaryActionUtils'; |
| 4 | +import {getReportPrimaryAction, getTransactionThreadPrimaryAction, isReviewDuplicatesAction} from '@libs/ReportPrimaryActionUtils'; |
5 | 5 | import CONST from '@src/CONST'; |
6 | 6 | import ONYXKEYS from '@src/ONYXKEYS'; |
7 | 7 | import type {Policy, Report, ReportAction, Transaction, TransactionViolation} from '@src/types/onyx'; |
@@ -572,6 +572,91 @@ describe('getPrimaryAction', () => { |
572 | 572 | }); |
573 | 573 | }); |
574 | 574 |
|
| 575 | +describe('isReviewDuplicatesAction', () => { |
| 576 | + beforeAll(() => { |
| 577 | + Onyx.init({ |
| 578 | + keys: ONYXKEYS, |
| 579 | + }); |
| 580 | + }); |
| 581 | + |
| 582 | + beforeEach(async () => { |
| 583 | + jest.clearAllMocks(); |
| 584 | + Onyx.clear(); |
| 585 | + await Onyx.merge(ONYXKEYS.SESSION, SESSION); |
| 586 | + await Onyx.set(ONYXKEYS.PERSONAL_DETAILS_LIST, {[CURRENT_USER_ACCOUNT_ID]: PERSONAL_DETAILS}); |
| 587 | + }); |
| 588 | + |
| 589 | + it('should return true when report approver has duplicated transactions', async () => { |
| 590 | + const report = { |
| 591 | + reportID: REPORT_ID, |
| 592 | + type: CONST.REPORT.TYPE.EXPENSE, |
| 593 | + ownerAccountID: 999, |
| 594 | + managerID: CURRENT_USER_ACCOUNT_ID, |
| 595 | + stateNum: CONST.REPORT.STATE_NUM.OPEN, |
| 596 | + statusNum: CONST.REPORT.STATUS_NUM.OPEN, |
| 597 | + } as unknown as Report; |
| 598 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report); |
| 599 | + const TRANSACTION_ID = 'TRANSACTION_ID'; |
| 600 | + const transaction = { |
| 601 | + transactionID: TRANSACTION_ID, |
| 602 | + } as unknown as Transaction; |
| 603 | + |
| 604 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${TRANSACTION_ID}`, transaction); |
| 605 | + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${TRANSACTION_ID}`, [ |
| 606 | + { |
| 607 | + name: CONST.VIOLATIONS.DUPLICATED_TRANSACTION, |
| 608 | + } as TransactionViolation, |
| 609 | + ]); |
| 610 | + |
| 611 | + expect(isReviewDuplicatesAction(report, [transaction])).toBe(true); |
| 612 | + }); |
| 613 | + |
| 614 | + it('should return false when report approver has no duplicated transactions', async () => { |
| 615 | + const report = { |
| 616 | + reportID: REPORT_ID, |
| 617 | + type: CONST.REPORT.TYPE.EXPENSE, |
| 618 | + ownerAccountID: 999, |
| 619 | + managerID: CURRENT_USER_ACCOUNT_ID, |
| 620 | + stateNum: CONST.REPORT.STATE_NUM.OPEN, |
| 621 | + statusNum: CONST.REPORT.STATUS_NUM.OPEN, |
| 622 | + } as unknown as Report; |
| 623 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report); |
| 624 | + const TRANSACTION_ID = 'TRANSACTION_ID'; |
| 625 | + const transaction = { |
| 626 | + transactionID: TRANSACTION_ID, |
| 627 | + } as unknown as Transaction; |
| 628 | + |
| 629 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${TRANSACTION_ID}`, transaction); |
| 630 | + |
| 631 | + expect(isReviewDuplicatesAction(report, [transaction])).toBe(false); |
| 632 | + }); |
| 633 | + |
| 634 | + it('should return false when current user is neither the report submitter nor approver', async () => { |
| 635 | + const report = { |
| 636 | + reportID: REPORT_ID, |
| 637 | + type: CONST.REPORT.TYPE.EXPENSE, |
| 638 | + ownerAccountID: 999, |
| 639 | + managerID: 888, |
| 640 | + stateNum: CONST.REPORT.STATE_NUM.OPEN, |
| 641 | + statusNum: CONST.REPORT.STATUS_NUM.OPEN, |
| 642 | + } as unknown as Report; |
| 643 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report); |
| 644 | + const TRANSACTION_ID = 'TRANSACTION_ID'; |
| 645 | + const transaction = { |
| 646 | + transactionID: TRANSACTION_ID, |
| 647 | + } as unknown as Transaction; |
| 648 | + |
| 649 | + await Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${TRANSACTION_ID}`, transaction); |
| 650 | + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${TRANSACTION_ID}`, [ |
| 651 | + { |
| 652 | + name: CONST.VIOLATIONS.DUPLICATED_TRANSACTION, |
| 653 | + } as TransactionViolation, |
| 654 | + ]); |
| 655 | + |
| 656 | + expect(isReviewDuplicatesAction(report, [transaction])).toBe(false); |
| 657 | + }); |
| 658 | +}); |
| 659 | + |
575 | 660 | describe('getTransactionThreadPrimaryAction', () => { |
576 | 661 | beforeAll(() => { |
577 | 662 | Onyx.init({ |
|
0 commit comments