Merge pull request #1110 from Safelite/feature/digital/INSR-8549.1
INSR-8549 Added getServiceabilityDetails changes to service-zip-modal…
This commit is contained in:
commit
377ac35bc8
2 changed files with 84 additions and 51 deletions
|
|
@ -1,9 +1,25 @@
|
||||||
import { mount } from '@vue/test-utils';
|
import { mount } from '@vue/test-utils';
|
||||||
import crypto from 'crypto';
|
import crypto from 'crypto';
|
||||||
import serviceZipModalQuestion from '@/layouts/schedule-page/service-location/service-zip-modal-question/service-zip-modal-question.vue';
|
import serviceZipModalQuestion from '@/layouts/schedule-page/service-location/service-zip-modal-question/service-zip-modal-question.vue';
|
||||||
|
import { getMountOptions } from '@/helpers/unit-test-helper';
|
||||||
|
import { createTestingPinia } from '@pinia/testing';
|
||||||
|
import { useMainStore } from '@/store';
|
||||||
|
import settleAllPromises from '@/helpers/layout-helper';
|
||||||
|
import { fetchCmsContentForPage } from '@/helpers/cms-content-helper';
|
||||||
|
import baseMixin from '@/mixins/base-mixin';
|
||||||
|
|
||||||
global.crypto = crypto;
|
global.crypto = crypto;
|
||||||
|
|
||||||
|
jest.mock('@/helpers/layout-helper.js', () => jest.fn());
|
||||||
|
|
||||||
|
// Mock fetchCmsContentForPage
|
||||||
|
jest.mock('@/helpers/cms-content-helper', () => ({
|
||||||
|
fetchCmsContentForPage: jest.fn()
|
||||||
|
}));
|
||||||
|
jest.mock('@/global-methods', () => ({
|
||||||
|
callHttpClient: jest.fn()
|
||||||
|
}));
|
||||||
|
|
||||||
jest.mock('@/digital-components/textbox-question/textbox-question', () => ({
|
jest.mock('@/digital-components/textbox-question/textbox-question', () => ({
|
||||||
getCmsContent: jest.fn((widgetName, cmsFieldName) => widgetName[cmsFieldName])
|
getCmsContent: jest.fn((widgetName, cmsFieldName) => widgetName[cmsFieldName])
|
||||||
}));
|
}));
|
||||||
|
|
@ -71,20 +87,48 @@ const mockModalCmsContent = {
|
||||||
FooterText: 'Sample modal footer text here.'
|
FooterText: 'Sample modal footer text here.'
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockMixin = {
|
function getMountedComponent(mainInitialState = {}, initialData = {}, methodToRunAfterInitializingStore = () => {}, queryString = {}) {
|
||||||
methods: {
|
const mountOptions = getMountOptions({
|
||||||
getCmsContent: jest.fn((widgetName, cmsFieldName) => {
|
router: {
|
||||||
if (widgetName === linkWidgetName) {
|
navigate: jest.fn()
|
||||||
return mockLinkCmsContent[cmsFieldName];
|
},
|
||||||
}
|
route: { query: { issPage: 'page-name', ...queryString }, params: {} }
|
||||||
|
});
|
||||||
|
|
||||||
if (widgetName === modalWidgetName) {
|
const testingPinia = createTestingPinia({
|
||||||
return mockModalCmsContent[cmsFieldName];
|
initialState: {
|
||||||
}
|
main: mainInitialState
|
||||||
return null;
|
}
|
||||||
})
|
});
|
||||||
}
|
useMainStore(testingPinia);
|
||||||
};
|
methodToRunAfterInitializingStore();
|
||||||
|
useMainStore().getServiceabilityDetails = jest.fn().mockReturnValue(mockGetServiceabilityDetails);
|
||||||
|
|
||||||
|
mountOptions.global.plugins = [testingPinia];
|
||||||
|
mountOptions.props = initialData
|
||||||
|
|
||||||
|
const apiResponses = { cmsContent: {} };
|
||||||
|
|
||||||
|
settleAllPromises.mockImplementation(() => apiResponses);
|
||||||
|
fetchCmsContentForPage.mockImplementation(() => Promise.resolve());
|
||||||
|
|
||||||
|
const wrapper = mount(serviceZipModalQuestion, mountOptions);
|
||||||
|
wrapper.vm.getCmsContent = jest.fn((widgetName, cmsFieldName) => {
|
||||||
|
if (widgetName === linkWidgetName) {
|
||||||
|
return mockLinkCmsContent[cmsFieldName];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (widgetName === modalWidgetName) {
|
||||||
|
return mockModalCmsContent[cmsFieldName];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
wrapper.vm.setCmsContent = jest.fn();
|
||||||
|
wrapper.vm.$router.navigateWithSpinner = jest.fn();
|
||||||
|
wrapper.vm.navigateBack = baseMixin.methods.navigateBack;
|
||||||
|
|
||||||
|
return { wrapper };
|
||||||
|
}
|
||||||
|
|
||||||
describe('service-zip-modal-question.vue', () => {
|
describe('service-zip-modal-question.vue', () => {
|
||||||
it('Initial state on load with existing location info', async () => {
|
it('Initial state on load with existing location info', async () => {
|
||||||
|
|
@ -94,15 +138,13 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
zipCode: '43235'
|
zipCode: '43235'
|
||||||
};
|
};
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
linkWidgetName,
|
linkWidgetName,
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(wrapper.html()).not.toEqual(expect.stringContaining(mockLinkCmsContent.BodyText));
|
expect(wrapper.html()).not.toEqual(expect.stringContaining(mockLinkCmsContent.BodyText));
|
||||||
|
|
@ -117,15 +159,13 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
|
|
||||||
const zip = '43235';
|
const zip = '43235';
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
mobileFeePart: {},
|
mobileFeePart: {},
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
wrapper.vm.internalModel.zipCode = zip;
|
wrapper.vm.internalModel.zipCode = zip;
|
||||||
|
|
@ -147,14 +187,12 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
|
|
||||||
const zip = '';
|
const zip = '';
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
wrapper.vm.internalModel.zipCode = zip;
|
wrapper.vm.internalModel.zipCode = zip;
|
||||||
|
|
@ -173,14 +211,12 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
|
|
||||||
const zip = '11111';
|
const zip = '11111';
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
wrapper.vm.internalModel.zipCode = zip;
|
wrapper.vm.internalModel.zipCode = zip;
|
||||||
|
|
@ -199,14 +235,12 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
|
|
||||||
const zip = '';
|
const zip = '';
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
wrapper.vm.internalModel.zipCode = zip;
|
wrapper.vm.internalModel.zipCode = zip;
|
||||||
|
|
@ -226,14 +260,12 @@ describe('service-zip-modal-question.vue', () => {
|
||||||
|
|
||||||
const zip = '123';
|
const zip = '123';
|
||||||
|
|
||||||
const wrapper = mount(serviceZipModalQuestion, {
|
const { wrapper } = getMountedComponent({},
|
||||||
mixins: [mockMixin],
|
{
|
||||||
props: {
|
|
||||||
modelValue: serviceZipCodeQuestion,
|
modelValue: serviceZipCodeQuestion,
|
||||||
modalWidgetName
|
modalWidgetName
|
||||||
},
|
}
|
||||||
attachTo: document.body
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
wrapper.vm.internalModel.zipCode = zip;
|
wrapper.vm.internalModel.zipCode = zip;
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,9 @@ import textLink from '@/ux-components/text-link/text-link.vue';
|
||||||
import serviceZipQuestion from '@/layouts/schedule-page/service-location/service-zip-question/service-zip-question.vue';
|
import serviceZipQuestion from '@/layouts/schedule-page/service-location/service-zip-question/service-zip-question.vue';
|
||||||
import modal from '@/digital-components/modal/modal.vue';
|
import modal from '@/digital-components/modal/modal.vue';
|
||||||
import alert from '@/ux-components/alert/alert.vue';
|
import alert from '@/ux-components/alert/alert.vue';
|
||||||
|
import { useMainStore } from '@/store';
|
||||||
|
|
||||||
import { getServiceabilityDetails, getZipCodeData } from '@/helpers/service-location-helper';
|
import { getZipCodeData } from '@/helpers/service-location-helper';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'service-zip-modal-question',
|
name: 'service-zip-modal-question',
|
||||||
|
|
@ -153,7 +154,7 @@ export default {
|
||||||
const serviceZipCode = this.internalModel.zipCode;
|
const serviceZipCode = this.internalModel.zipCode;
|
||||||
|
|
||||||
// retrieve serviceability details
|
// retrieve serviceability details
|
||||||
const serviceabilityDetails = await getServiceabilityDetails(serviceZipCode);
|
const serviceabilityDetails = await useMainStore().getServiceabilityDetails(serviceZipCode);
|
||||||
|
|
||||||
// update content related to service zip code
|
// update content related to service zip code
|
||||||
this.$emit('updated-serviceability', serviceabilityDetails.data);
|
this.$emit('updated-serviceability', serviceabilityDetails.data);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue