From c46a0282aabad74191083d9469f8ad78a8c86d7a Mon Sep 17 00:00:00 2001 From: scottkiener-at-safelite Date: Tue, 28 Jul 2026 08:22:44 -0400 Subject: [PATCH] Revert "Merge pull request #3270 from Safelite/feature/CASH-2815" This reverts commit 4e3a6d306775fbda6c1e5fc9d2ee2faf44195593, reversing changes made to 0059d9c72554e9b21d58a3d7a5c6744690ab99c1. --- src/layouts/scheduling/scheduling.spec.js | 3 - src/layouts/scheduling/scheduling.vue | 7 - .../waitlist-question.spec.js | 185 ------------------ .../waitlist-question/waitlist-question.vue | 146 -------------- 4 files changed, 341 deletions(-) delete mode 100644 src/layouts/scheduling/waitlist-question/waitlist-question.spec.js delete mode 100644 src/layouts/scheduling/waitlist-question/waitlist-question.vue diff --git a/src/layouts/scheduling/scheduling.spec.js b/src/layouts/scheduling/scheduling.spec.js index c76a0985f..d64ffa779 100644 --- a/src/layouts/scheduling/scheduling.spec.js +++ b/src/layouts/scheduling/scheduling.spec.js @@ -15,9 +15,6 @@ jest.mock("@/store", () => ({ lineItems: { glassParts: [] }, policy: { isItac: false, isNoComp: false }, }, - applicationUser: { - experiments: [], - }, }, })); diff --git a/src/layouts/scheduling/scheduling.vue b/src/layouts/scheduling/scheduling.vue index 2b2a8e803..3ace9edf7 100644 --- a/src/layouts/scheduling/scheduling.vue +++ b/src/layouts/scheduling/scheduling.vue @@ -48,10 +48,6 @@ @address-clicked="onInshopAddressClicked(provider)" /> - diff --git a/src/layouts/scheduling/waitlist-question/waitlist-question.spec.js b/src/layouts/scheduling/waitlist-question/waitlist-question.spec.js deleted file mode 100644 index 83582df3a..000000000 --- a/src/layouts/scheduling/waitlist-question/waitlist-question.spec.js +++ /dev/null @@ -1,185 +0,0 @@ -import { mount } from "@vue/test-utils"; -import waitlistQuestion from "./waitlist-question"; -import store from "@/store"; -import { experimentSettings } from "@/constants/experiments"; - -jest.mock("@/store", () => ({ - getters: { - applicationUser: { - experiments: [], - }, - }, -})); - -const MOCK_CMS_CONTENT = { - WaitListLabelWidget: { Text: "Want to be notified sooner?" }, - WaitListQuestionWidget: { QuestionText: "Add me to the waitlist" }, -}; - -function dateStringOffsetFromToday(offsetDays) { - const d = new Date(); - d.setDate(d.getDate() + offsetDays); - return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String( - d.getDate() - ).padStart(2, "0")}`; -} - -function enableWaitlistExperiment(thresholdDays = 0) { - store.getters.applicationUser.experiments = [ - { - isActive: true, - settings: { - [experimentSettings.DISPLAY_WAITLIST]: "true", - [experimentSettings.WAITLIST_THRESHOLD_DAYS]: String(thresholdDays), - }, - }, - ]; -} - -function mountComponent(props = {}) { - const cmsMixin = { - methods: { - getCmsContent: jest.fn((widgetName, fieldName) => { - return MOCK_CMS_CONTENT[widgetName]?.[fieldName] ?? ""; - }), - }, - }; - - return mount(waitlistQuestion, { - props: { - modelValue: false, - availableDates: [dateStringOffsetFromToday(10)], - ...props, - }, - global: { - mixins: [cmsMixin], - }, - }); -} - -describe("waitlist-question.vue", () => { - beforeEach(() => { - enableWaitlistExperiment(); - }); - - afterEach(() => { - store.getters.applicationUser.experiments = []; - }); - - it("renders the label and checkbox CMS content", () => { - const wrapper = mountComponent(); - - expect(wrapper.text()).toContain("Want to be notified sooner?"); - expect(wrapper.text()).toContain("Add me to the waitlist"); - }); - - it("reflects the modelValue prop on the checkbox", () => { - const wrapper = mountComponent({ modelValue: true }); - - expect(wrapper.find("input[type='checkbox']").element.checked).toBe(true); - }); - - it("emits update:modelValue with true when the checkbox is checked", async () => { - const wrapper = mountComponent({ modelValue: false }); - - const input = wrapper.find("input[type='checkbox']"); - await input.setValue(true); - - expect(wrapper.emitted("update:modelValue")).toEqual([[true]]); - }); - - it("emits update:modelValue with false when the checkbox is unchecked", async () => { - const wrapper = mountComponent({ modelValue: true }); - - const input = wrapper.find("input[type='checkbox']"); - await input.setValue(false); - - expect(wrapper.emitted("update:modelValue")).toEqual([[false]]); - }); - - it("renders nothing when shouldDisplay is false", () => { - store.getters.applicationUser.experiments = []; - - const wrapper = mountComponent(); - - expect(wrapper.find("input[type='checkbox']").exists()).toBe(false); - }); - - describe("clicking the container", () => { - it("toggles localValue to true when clicking outside the checkbox", async () => { - const wrapper = mountComponent({ modelValue: false }); - - await wrapper.find(".waitlist-label").trigger("click"); - - expect(wrapper.emitted("update:modelValue")).toEqual([[true]]); - }); - - it("toggles localValue to false when clicking outside the checkbox", async () => { - const wrapper = mountComponent({ modelValue: true }); - - await wrapper.find(".waitlist-question").trigger("click"); - - expect(wrapper.emitted("update:modelValue")).toEqual([[false]]); - }); - - it("does not toggle when the click target is the checkbox input itself", () => { - // jsdom doesn't reliably run a checkbox's native activation behavior - // (toggling + firing "change") for script-dispatched clicks, so this - // calls the handler directly with the real input element as the - // event target to verify the guard is skipped in that case. - const wrapper = mountComponent({ modelValue: false }); - const inputElement = wrapper.find("input[type='checkbox']").element; - - wrapper.vm.handleContainerClick({ target: inputElement }); - - expect(wrapper.emitted("update:modelValue")).toBeUndefined(); - }); - - it("does not toggle when the click lands inside the checkbox wrapper but not on the input", async () => { - const wrapper = mountComponent({ modelValue: false }); - - await wrapper.find(".ui-checkbox").trigger("click"); - - expect(wrapper.emitted("update:modelValue")).toBeUndefined(); - }); - }); - - describe("shouldDisplay", () => { - it("is false when the DISPLAY_WAITLIST experiment is off", () => { - store.getters.applicationUser.experiments = [ - { - isActive: true, - settings: { [experimentSettings.WAITLIST_THRESHOLD_DAYS]: "3" }, - }, - ]; - - const wrapper = mountComponent({ availableDates: [dateStringOffsetFromToday(10)] }); - - expect(wrapper.vm.shouldDisplay).toBe(false); - }); - - it("is false when the earliest available date is within the threshold", () => { - enableWaitlistExperiment(3); - - const wrapper = mountComponent({ availableDates: [dateStringOffsetFromToday(2)] }); - - expect(wrapper.vm.shouldDisplay).toBe(false); - }); - - it("is true when the experiment is on and the earliest available date exceeds the threshold", () => { - enableWaitlistExperiment(3); - - const wrapper = mountComponent({ availableDates: [dateStringOffsetFromToday(10)] }); - - expect(wrapper.vm.shouldDisplay).toBe(true); - }); - - it("is false when there are no available dates", () => { - enableWaitlistExperiment(0); - - const wrapper = mountComponent({ availableDates: [] }); - - expect(wrapper.vm.shouldDisplay).toBe(false); - }); - }); -}); diff --git a/src/layouts/scheduling/waitlist-question/waitlist-question.vue b/src/layouts/scheduling/waitlist-question/waitlist-question.vue deleted file mode 100644 index c6a81c8b0..000000000 --- a/src/layouts/scheduling/waitlist-question/waitlist-question.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - -