From a0e0a6e69fbfca8fc6e2f3cec749f2adca46a823 Mon Sep 17 00:00:00 2001 From: dylandepass Date: Fri, 31 Jul 2026 15:52:43 -0400 Subject: [PATCH] fix(ebs-sync): reject unknown Chase AVS results --- src/actions/ebs-sync/ebs.js | 4 ++-- test/ebs-sync/ebs-e2e.test.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/actions/ebs-sync/ebs.js b/src/actions/ebs-sync/ebs.js index 618fa9a..bb6ba6a 100644 --- a/src/actions/ebs-sync/ebs.js +++ b/src/actions/ebs-sync/ebs.js @@ -55,7 +55,7 @@ import { resolveVbndReasonCode } from './discount-reason-codes.js'; const TRANSIENT_ERROR_PATTERN = /timeout|timed out|aborted|fetch failed|network|ECONNRESET|ENOTFOUND|ETIMEDOUT|EAI_AGAIN/i; const CHASE_AVS_UNVALIDATED_CODES = new Set([ - '1', '2', '3', '4', '5', '6', '8', 'G', 'J', 'M1', 'M8', 'N4', 'N6', 'R', 'UK', + '1', '2', '3', '4', '5', '6', '8', 'G', 'J', 'M1', 'M8', 'N4', 'N6', 'R', 'UK', 'UNKNOWN', ]); /** @@ -436,7 +436,7 @@ function resolveShippingIsValidated(order) { function resolveBillingIsValidated(paymentSnapshot) { if (paymentSnapshot?.method !== 'chasehpp') return true; if (Number(paymentSnapshot.amount || 0) === 0) return true; - return !CHASE_AVS_UNVALIDATED_CODES.has(String(paymentSnapshot.avsMatch || '').trim()); + return !CHASE_AVS_UNVALIDATED_CODES.has(String(paymentSnapshot.avsMatch || '').trim().toUpperCase()); } /** diff --git a/test/ebs-sync/ebs-e2e.test.js b/test/ebs-sync/ebs-e2e.test.js index c38e73f..7ea235b 100644 --- a/test/ebs-sync/ebs-e2e.test.js +++ b/test/ebs-sync/ebs-e2e.test.js @@ -631,7 +631,7 @@ describe('ebs-sync e2e', () => { expect(addressValidation(xml, 'BillTo')).toBe('true'); }); - test.each(['1', '2 ', 'G', 'M1', 'UK'])('BillTo IsValidated is false for Chase AVS %s', async (avsMatch) => { + test.each(['1', '2 ', 'G', 'M1', 'UK', 'Unknown'])('BillTo IsValidated is false for Chase AVS %s', async (avsMatch) => { const xml = await buildXml( clone(CC_APPROVED_ORDER), withCompletedPayment(loadJournal('journal-cc-approved.ndjson'), { avsMatch }),