From d25324a6907d6f7d7fd28f15fbdfd35b78e0e7a8 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Mon, 3 Nov 2025 15:07:55 +0700 Subject: [PATCH] fix: don't show out of policy violation for missing category transaction --- src/libs/Violations/ViolationsUtils.ts | 4 ++-- tests/unit/ViolationUtilsTest.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index 51d479b13726..156044e583df 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -4,7 +4,7 @@ import reject from 'lodash/reject'; import type {OnyxCollection, OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import type {LocaleContextProps} from '@components/LocaleContextProvider'; -import {getDecodedCategoryName} from '@libs/CategoryUtils'; +import {getDecodedCategoryName, isCategoryMissing} from '@libs/CategoryUtils'; import * as CurrencyUtils from '@libs/CurrencyUtils'; import DateUtils from '@libs/DateUtils'; import {isReceiptError} from '@libs/ErrorUtils'; @@ -264,7 +264,7 @@ const ViolationsUtils = { const isCategoryInPolicy = categoryKey ? policyCategories?.[categoryKey]?.enabled : false; // Add 'categoryOutOfPolicy' violation if category is not in policy - if (!hasCategoryOutOfPolicyViolation && categoryKey && !isCategoryInPolicy) { + if (!hasCategoryOutOfPolicyViolation && !isCategoryMissing(categoryKey) && !isCategoryInPolicy) { newTransactionViolations.push({name: 'categoryOutOfPolicy', type: CONST.VIOLATION_TYPES.VIOLATION}); } diff --git a/tests/unit/ViolationUtilsTest.ts b/tests/unit/ViolationUtilsTest.ts index b5617e890864..1139c9bb8081 100644 --- a/tests/unit/ViolationUtilsTest.ts +++ b/tests/unit/ViolationUtilsTest.ts @@ -333,6 +333,18 @@ describe('getViolationsOnyxData', () => { expect(result.value).not.toContainEqual(missingCategoryViolation); }); + it('should not add categoryOutOfPolicy violation when category is Uncategorized', () => { + transaction.category = 'Uncategorized'; + const result = ViolationsUtils.getViolationsOnyxData(transaction, transactionViolations, policy, policyTags, policyCategories, false, false); + expect(result.value).not.toContainEqual(categoryOutOfPolicyViolation); + }); + + it('should not add categoryOutOfPolicy violation when category is none', () => { + transaction.category = 'none'; + const result = ViolationsUtils.getViolationsOnyxData(transaction, transactionViolations, policy, policyTags, policyCategories, false, false); + expect(result.value).not.toContainEqual(categoryOutOfPolicyViolation); + }); + it('should add categoryOutOfPolicy violation to existing violations if they exist', () => { transaction.category = 'Bananas'; transaction.amount = 1000000;