From df80ede6233343c5161a5e3c1cb703c3f6d3ce9a Mon Sep 17 00:00:00 2001 From: credelinghuys Date: Thu, 9 Jul 2026 15:13:12 -0400 Subject: [PATCH] CASH-3025: Consent management changes --- src/constants/error-messages.js | 2 +- .../save-progress-popup-question.spec.js | 43 +++++++++++++------ .../save-progress-popup-question.vue | 2 +- ...rogress-popup-sms-consent-question.spec.js | 11 ++--- ...ve-progress-popup-sms-consent-question.vue | 5 ++- 5 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/constants/error-messages.js b/src/constants/error-messages.js index 2f49e2f1b..380a5a98c 100644 --- a/src/constants/error-messages.js +++ b/src/constants/error-messages.js @@ -32,7 +32,7 @@ const errorMessages = { DATE_REQUIRED: "Please select a date", PHONE_REQUIRED: "Please enter your phone number", PHONE_FORMAT: "Phone number must be 10 digits", - SMS_CONSENT_REQUIRED: "Please select at least one consent option", + SMS_CONSENT_REQUIRED: "Please select checkbox to receive text messages", YEAR_REQUIRED: "Please select your vehicle year", MAKE_REQUIRED: "Please select your vehicle make", MODEL_REQUIRED: "Please select your vehicle model", diff --git a/src/fmg-components/save-progress-popup-question/save-progress-popup-question.spec.js b/src/fmg-components/save-progress-popup-question/save-progress-popup-question.spec.js index 9979a4162..3db98487a 100644 --- a/src/fmg-components/save-progress-popup-question/save-progress-popup-question.spec.js +++ b/src/fmg-components/save-progress-popup-question/save-progress-popup-question.spec.js @@ -45,14 +45,14 @@ describe("save-progress-popup-question ", () => { }); describe("contact method tabs", () => { - test("should default to the phone tab", () => { + test("should default to the email tab", () => { const { wrapper } = setupMocks({ props: { modalWidgetName: "SaveProgressPopupWidget", }, }); - expect(wrapper.vm.isPhoneTabSelected).toBe(true); + expect(wrapper.vm.isPhoneTabSelected).toBe(false); }); test("should use tab labels from phone and email specific CMS widgets", () => { @@ -83,21 +83,24 @@ describe("save-progress-popup-question ", () => { }, }); - expect(wrapper.vm.modalDisclaimerText).toBe("Phone disclaimer"); + expect(wrapper.vm.modalDisclaimerText).toBe("Email disclaimer"); - wrapper.vm.selectContactMethod("EmailAnswer"); + wrapper.vm.selectContactMethod("PhoneAnswer"); await wrapper.vm.$nextTick(); - expect(wrapper.vm.modalDisclaimerText).toBe("Email disclaimer"); + expect(wrapper.vm.modalDisclaimerText).toBe("Phone disclaimer"); }); - test("should use phone question CMS widget on the phone tab", () => { + test("should use phone question CMS widget on the phone tab", async () => { const { wrapper } = setupMocks({ props: { modalWidgetName: "SaveProgressPopupWidget", }, }); + wrapper.vm.selectContactMethod("PhoneAnswer"); + await wrapper.vm.$nextTick(); + expect(wrapper.vm.phoneQuestionWidgetName).toBe("SaveProgressPopupPhoneQuestionWidget"); }); @@ -108,15 +111,26 @@ describe("save-progress-popup-question ", () => { }, }); - wrapper.vm.selectContactMethod("EmailAnswer"); - await wrapper.vm.$nextTick(); - expect(wrapper.vm.contactMethod).toBe("EmailAnswer"); expect(wrapper.vm.isPhoneTabSelected).toBe(false); - expect(wrapper.vm.userInput).toBe(""); expect(wrapper.vm.emailQuestionWidgetName).toBe("SaveProgressPopupEmailQuestionWidget"); }); + test("should show phone content when the phone tab is selected", async () => { + const { wrapper } = setupMocks({ + props: { + modalWidgetName: "SaveProgressPopupWidget", + }, + }); + + wrapper.vm.selectContactMethod("PhoneAnswer"); + await wrapper.vm.$nextTick(); + + expect(wrapper.vm.contactMethod).toBe("PhoneAnswer"); + expect(wrapper.vm.isPhoneTabSelected).toBe(true); + expect(wrapper.vm.userInput).toBe(""); + }); + test("should reset sms consent when switching tabs", async () => { const { wrapper } = setupMocks({ props: { @@ -126,7 +140,7 @@ describe("save-progress-popup-question ", () => { wrapper.vm.smsConsent = { transactional: true, marketing: true }; wrapper.vm.showConsentErrors = true; - wrapper.vm.selectContactMethod("EmailAnswer"); + wrapper.vm.selectContactMethod("PhoneAnswer"); await wrapper.vm.$nextTick(); expect(wrapper.vm.smsConsent).toEqual({ transactional: false, marketing: false }); @@ -142,6 +156,7 @@ describe("save-progress-popup-question ", () => { }, }); + wrapper.vm.selectContactMethod("PhoneAnswer"); wrapper.vm.modal.validate = jest.fn().mockResolvedValue({ valid: true }); const resetSpy = jest.spyOn(wrapper.vm, "resetPhoneSendButtonStyle"); @@ -158,6 +173,7 @@ describe("save-progress-popup-question ", () => { }, }); + wrapper.vm.selectContactMethod("PhoneAnswer"); wrapper.vm.modal.validate = jest.fn().mockResolvedValue({ valid: false }); const resetSpy = jest.spyOn(wrapper.vm, "resetPhoneSendButtonStyle"); @@ -179,6 +195,7 @@ describe("save-progress-popup-question ", () => { await flushPromises(); wrapper.vm.dispatchStoreAction = dispatchStoreAction; + wrapper.vm.selectContactMethod("PhoneAnswer"); wrapper.vm.userInput = "555-123-4567"; wrapper.vm.smsConsent = { transactional: true, marketing: false }; wrapper.vm.modal.validate = jest.fn().mockResolvedValue({ valid: true }); @@ -203,6 +220,7 @@ describe("save-progress-popup-question ", () => { }); wrapper.vm.dispatchStoreAction = dispatchStoreAction; + wrapper.vm.selectContactMethod("PhoneAnswer"); wrapper.vm.userInput = "555-123-4567"; wrapper.vm.smsConsent = { transactional: true, marketing: false }; @@ -238,7 +256,6 @@ describe("save-progress-popup-question ", () => { }); wrapper.vm.dispatchStoreAction = dispatchStoreAction; - wrapper.vm.selectContactMethod("EmailAnswer"); wrapper.vm.userInput = "test@example.com"; await wrapper.vm.saveProgress(); @@ -267,6 +284,7 @@ describe("save-progress-popup-question ", () => { }); wrapper.vm.dispatchStoreAction = dispatchStoreAction; + wrapper.vm.selectContactMethod("PhoneAnswer"); wrapper.vm.userInput = "555-123-4567"; wrapper.vm.smsConsent = { transactional: true, marketing: false }; @@ -289,7 +307,6 @@ describe("save-progress-popup-question ", () => { }); wrapper.vm.dispatchStoreAction = dispatchStoreAction; - wrapper.vm.selectContactMethod("EmailAnswer"); wrapper.vm.userInput = "test@example.com"; await wrapper.vm.saveProgress(); diff --git a/src/fmg-components/save-progress-popup-question/save-progress-popup-question.vue b/src/fmg-components/save-progress-popup-question/save-progress-popup-question.vue index 95fb40273..2d46b03b9 100644 --- a/src/fmg-components/save-progress-popup-question/save-progress-popup-question.vue +++ b/src/fmg-components/save-progress-popup-question/save-progress-popup-question.vue @@ -118,7 +118,7 @@ export default { data() { return { userInput: "", - contactMethod: saveProgressPopupContactMethods.PHONE, + contactMethod: saveProgressPopupContactMethods.EMAIL, smsConsent: defaultSaveProgressSmsConsent(), smsConsentCopy: getSaveProgressSmsConsentFallbackCopy(), isProgressSaved: false, diff --git a/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.spec.js b/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.spec.js index 4a9fe13a1..fd6bea0ff 100644 --- a/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.spec.js +++ b/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.spec.js @@ -7,15 +7,14 @@ import { import { errorMessages } from "@/constants/error-messages"; describe("save-progress-popup-sms-consent-question", () => { - it("should render two consent checkboxes with default copy", () => { + it("should render the transactional consent checkbox with default copy", () => { const wrapper = shallowMount(saveProgressPopupSmsConsentQuestion); const fallbackCopy = getSaveProgressSmsConsentFallbackCopy(); const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); - expect(checkboxes).toHaveLength(2); + expect(checkboxes).toHaveLength(1); expect(checkboxes.at(0).props("labelText")).toBe(fallbackCopy.transactional); - expect(checkboxes.at(1).props("labelText")).toBe(fallbackCopy.marketing); }); it("should emit updated consent when a checkbox changes", async () => { @@ -47,8 +46,8 @@ describe("save-progress-popup-sms-consent-question", () => { const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); + expect(checkboxes).toHaveLength(1); expect(checkboxes.at(0).props("labelText")).toBe("API transactional copy"); - expect(checkboxes.at(1).props("labelText")).toBe("API marketing copy"); }); it("should disable consent checkboxes when isDisabled is true", () => { @@ -61,7 +60,6 @@ describe("save-progress-popup-sms-consent-question", () => { const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); expect(checkboxes.at(0).props("isDisabled")).toBe(true); - expect(checkboxes.at(1).props("isDisabled")).toBe(true); expect(wrapper.find("fieldset").attributes("disabled")).toBe(""); }); @@ -76,7 +74,6 @@ describe("save-progress-popup-sms-consent-question", () => { const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); expect(checkboxes.at(0).props("hasError")).toBe(false); - expect(checkboxes.at(1).props("hasError")).toBe(false); expect(wrapper.text()).not.toContain(errorMessages.SMS_CONSENT_REQUIRED); }); @@ -94,7 +91,6 @@ describe("save-progress-popup-sms-consent-question", () => { const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); expect(checkboxes.at(0).props("hasError")).toBe(true); - expect(checkboxes.at(1).props("hasError")).toBe(true); }); it("should clear consent errors when a selection is made while showConsentErrors is true", async () => { @@ -111,6 +107,5 @@ describe("save-progress-popup-sms-consent-question", () => { const checkboxes = wrapper.findAllComponents({ name: "checkboxQuestion" }); expect(checkboxes.at(0).props("hasError")).toBe(false); - expect(checkboxes.at(1).props("hasError")).toBe(false); }); }); diff --git a/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.vue b/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.vue index 55e18e623..683541895 100644 --- a/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.vue +++ b/src/fmg-components/save-progress-popup-question/save-progress-popup-sms-consent-question.vue @@ -9,12 +9,13 @@ :labelText="consentCopy.transactional" :hasError="showConsentError" :isDisabled="isDisabled" /> - + :isDisabled="isDisabled" /> -->