diff --git a/src/digital-components/modal/modal.vue b/src/digital-components/modal/modal.vue index fb06197d..f5c9a221 100644 --- a/src/digital-components/modal/modal.vue +++ b/src/digital-components/modal/modal.vue @@ -33,7 +33,7 @@ loaderColor="white" :buttonText="footerButtonText" @click-event="validateAndEmit" - :class="isFooterButtonDisabled && 'form-test-invalid'" /> + :class="(isButtonDisabled || isFooterButtonDisabled) && 'form-test-invalid'" /> @@ -57,6 +57,7 @@ export default { onModalClosedCallback: { type: Function, }, + isButtonDisabled: Boolean }, setup(props) { const modalId = props.modalId ? props.modalId : `modal-${crypto.randomUUID()}`; @@ -80,7 +81,7 @@ export default { } }, resetButtonStyle() { - this.$refs.modalButtonMain.resetButtonStyle(); + this.$refs.modalButtonMain?.resetButtonStyle(); }, onModalOpened() { this.onModalOpenedCallback?.(); diff --git a/src/layouts/provider-preference/provider-preference.spec.js b/src/layouts/provider-preference/provider-preference.spec.js index a2140519..9c84a066 100644 --- a/src/layouts/provider-preference/provider-preference.spec.js +++ b/src/layouts/provider-preference/provider-preference.spec.js @@ -6,7 +6,6 @@ import { fetchCmsContentForPage, setupModalLinks } from "@/helpers/cms-content-h import { getMountOptions } from "@/helpers/unit-test-helper.js"; import { useMainStore } from "@/store"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; -import { nextTick } from "vue"; // Mock our module for promises. jest.mock("@/helpers/layout-helper.js", () => ({ diff --git a/src/layouts/provider-preference/provider-preference.vue b/src/layouts/provider-preference/provider-preference.vue index 130738fe..954cede7 100644 --- a/src/layouts/provider-preference/provider-preference.vue +++ b/src/layouts/provider-preference/provider-preference.vue @@ -1,8 +1,5 @@ + + diff --git a/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.spec.js b/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.spec.js new file mode 100644 index 00000000..869356ae --- /dev/null +++ b/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.spec.js @@ -0,0 +1,85 @@ +/* eslint-env jest */ +import { render } from '@testing-library/vue'; +import userEvent from '@testing-library/user-event'; +import '@testing-library/jest-dom'; +import { issPageValues } from '@/router/router-constants/issPage-values'; +import { queryStrings } from '@/constants/query-strings'; +import { GaActions } from "@/constants/analytics"; +import tpaRecalToggle from './tpa-recal-toggle.vue'; + +const mockText = Object.freeze({ + HEADER: 'Mock Header', + BODY: 'Mock Body', +}); +const mockRoute = { + query: { + issPage: issPageValues.PROVIDER_PREFERENCE, + }, +}; +const mockRouter = { + navigate: jest.fn(), +}; + +const mountOptions = { + global: { + propsData: { + cmsWidgetName: "MockWidgetName", + }, + mixins: [ + { + methods: { + getCmsContent: jest.fn((cmsWidgetName, fieldName) => { + if (cmsWidgetName === 'MockWidgetName') { + if (fieldName === 'HeaderText') { + return mockText.HEADER; + } + + if (fieldName === 'BodyText') { + return mockText.BODY; + } + } + + return ''; + }), + pushEventToGA: jest.fn() + }, + computed: { + GaActions() { + return GaActions; + }, + queryStrings() { + return queryStrings; + }, + } + }, + ], + mocks: { + $route: mockRoute, + $router: mockRouter, + }, + }, +}; + +describe('more details section', () => { + test('should NOT be displayed on the screen as a default.', () => { + const { container } = render(tpaRecalToggle, mountOptions); + + const moreDetailsSection = container.querySelector('#tpa-recal-detail-wrapper'); + + expect(moreDetailsSection).not.toBeVisible(); + }); + + test('should toggle when arrow clicked', async () => { + const user = userEvent.setup(); + const { container } = render(tpaRecalToggle, mountOptions); + const toggleLink = container.querySelector('#moreDetails');; + + await user.click(toggleLink); + let moreDetailsSection = container.querySelector('#tpa-recal-detail-wrapper'); + expect(moreDetailsSection).toBeVisible(); + + await user.click(toggleLink); + moreDetailsSection = container.querySelector('#tpa-recal-detail-wrapper'); + expect(moreDetailsSection).not.toBeVisible(); + }); +}); diff --git a/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.vue b/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.vue new file mode 100644 index 00000000..c524fcf6 --- /dev/null +++ b/src/layouts/provider-preference/tpa-recal-modal/tpa-recal-toggle/tpa-recal-toggle.vue @@ -0,0 +1,111 @@ + + + + \ No newline at end of file diff --git a/src/ux-components/checkbox/checkbox.vue b/src/ux-components/checkbox/checkbox.vue index cbc1120c..7427730f 100644 --- a/src/ux-components/checkbox/checkbox.vue +++ b/src/ux-components/checkbox/checkbox.vue @@ -8,9 +8,12 @@ :name="checkboxName" :id="buttonID" :tabindex="tabIndex" - :aria-required="isRequired" /> + :aria-required="isRequired" + @change="handleCheckChange" + :ref="checkboxName" + /> @@ -28,6 +31,11 @@ export default { isRequired: Boolean, hasError: Boolean, }, + methods: { + handleCheckChange() { + this.$emit("update:modelValue", this.$refs[this.checkboxName].checked); + }, + }, };