From cc5328380d81ccbd48d9c239c4c464518deebfdd Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 23 Jul 2025 13:41:59 +0700 Subject: [PATCH 1/4] potential duplicate violation is not removed --- src/libs/TransactionUtils/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 46345784248a..55c0eef2f49b 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1185,7 +1185,7 @@ function isViolationDismissed(transaction: OnyxEntry, violation: Tr if (!transaction || !violation) { return false; } - return transaction?.comment?.dismissedViolations?.[violation.name]?.[currentUserEmail] === `${currentUserAccountID}`; + return !!transaction?.comment?.dismissedViolations?.[violation.name]?.[currentUserEmail]; } /** From 97e8cb0e71fc40e22ce0452077233ddfeec7d0d6 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 28 Jul 2025 16:24:58 +0900 Subject: [PATCH 2/4] add test for isViolationDismissed --- tests/unit/TransactionUtilsTest.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index 96e7432b85ff..dfd6ad3c5393 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -34,6 +34,7 @@ function generateTransaction(values: Partial = {}): Transaction { } const CURRENT_USER_ID = 1; +const CURRENT_USER_EMAIL = 'test@example.com'; const SECOND_USER_ID = 2; const FAKE_OPEN_REPORT_ID = 'FAKE_OPEN_REPORT_ID'; const FAKE_OPEN_REPORT_SECOND_USER_ID = 'FAKE_OPEN_REPORT_SECOND_USER_ID'; @@ -111,7 +112,7 @@ describe('TransactionUtils', () => { Onyx.init({ keys: ONYXKEYS, initialKeyStates: { - [ONYXKEYS.SESSION]: {accountID: CURRENT_USER_ID}, + [ONYXKEYS.SESSION]: {accountID: CURRENT_USER_ID, email: 'test@example.com'}, ...reportCollectionDataSet, }, }); @@ -646,4 +647,21 @@ describe('TransactionUtils', () => { expect(result).toBe(true); }); }); + + describe('isViolationDismissed', () => { + it('should return true when violation is dismissed for current user', () => { + const transaction = generateTransaction({ + comment: { + dismissedViolations: { + [CONST.VIOLATIONS.DUPLICATED_TRANSACTION]: { + [CURRENT_USER_EMAIL]: `${CURRENT_USER_ID}`, + }, + }, + }, + }); + const violation = {type: CONST.VIOLATION_TYPES.VIOLATION, name: CONST.VIOLATIONS.DUPLICATED_TRANSACTION}; + const result = TransactionUtils.isViolationDismissed(transaction, violation); + expect(result).toBe(true); + }); + }); }); From a3761ade9490ca452886ae1146d22b33575acf80 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 28 Jul 2025 17:27:45 +0700 Subject: [PATCH 3/4] improve isViolationDismissed test --- tests/unit/TransactionUtilsTest.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index dfd6ad3c5393..3df8601d17fe 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -11,6 +11,7 @@ import * as TransactionUtils from '../../src/libs/TransactionUtils'; import type {Policy, Transaction} from '../../src/types/onyx'; import createRandomPolicy, {createCategoryTaxExpenseRules} from '../utils/collections/policies'; import waitForBatchedUpdates from '../utils/waitForBatchedUpdates'; +import DateUtils from '@libs/DateUtils'; function generateTransaction(values: Partial = {}): Transaction { const reportID = '1'; @@ -654,7 +655,7 @@ describe('TransactionUtils', () => { comment: { dismissedViolations: { [CONST.VIOLATIONS.DUPLICATED_TRANSACTION]: { - [CURRENT_USER_EMAIL]: `${CURRENT_USER_ID}`, + [CURRENT_USER_EMAIL]: DateUtils.getDBTime(), }, }, }, From 081d4e1552ec8951bb6fcbcc1b973127f79f0752 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 28 Jul 2025 17:35:48 +0700 Subject: [PATCH 4/4] fix prettier --- tests/unit/TransactionUtilsTest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index 3df8601d17fe..09689eedbec5 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -1,4 +1,5 @@ import Onyx from 'react-native-onyx'; +import DateUtils from '@libs/DateUtils'; import {shouldShowBrokenConnectionViolation, shouldShowBrokenConnectionViolationForMultipleTransactions} from '@libs/TransactionUtils'; import CONST from '@src/CONST'; import IntlStore from '@src/languages/IntlStore'; @@ -11,7 +12,6 @@ import * as TransactionUtils from '../../src/libs/TransactionUtils'; import type {Policy, Transaction} from '../../src/types/onyx'; import createRandomPolicy, {createCategoryTaxExpenseRules} from '../utils/collections/policies'; import waitForBatchedUpdates from '../utils/waitForBatchedUpdates'; -import DateUtils from '@libs/DateUtils'; function generateTransaction(values: Partial = {}): Transaction { const reportID = '1';