adding unit tests for contact-details-drawer
This commit is contained in:
parent
53eab888d5
commit
110fdd7ba0
4 changed files with 174 additions and 3 deletions
|
|
@ -0,0 +1,25 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`contact-details-drawer snapshot matches returns the initial data 1`] = `
|
||||||
|
Object {
|
||||||
|
"emailAddress": "fred.tay@gmail.com",
|
||||||
|
"firstName": "Frederick",
|
||||||
|
"isModalOpened": false,
|
||||||
|
"lastName": "Taylor",
|
||||||
|
"phoneNumber": "606-009-2943",
|
||||||
|
"rules": Object {
|
||||||
|
"emailAddress": "email-required|email-address-format",
|
||||||
|
"firstName": "first-name-required",
|
||||||
|
"lastName": "last-name-required",
|
||||||
|
"phoneNumber": "phone-number-required|phone-number-format",
|
||||||
|
},
|
||||||
|
"widget": Object {
|
||||||
|
"drawerFooter": "ContactDetailsDrawerFooterWidget",
|
||||||
|
"emailQuestion": "EmailQuestionWidget",
|
||||||
|
"firstNameQuestion": "FirstNameQuestionWidget",
|
||||||
|
"lastNameQuestion": "LastNameQuestionWidget",
|
||||||
|
"phoneNumberQuestion": "PhoneNumberQuestionWidget",
|
||||||
|
"title": "ContactDetailsDrawerHeaderWidget",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
@ -0,0 +1,134 @@
|
||||||
|
// Components
|
||||||
|
import { shallowMount } from '@vue/test-utils';
|
||||||
|
import { createTestingPinia } from '@pinia/testing';
|
||||||
|
import contactDetailsDrawer from '@/layouts/tpa-submit/contact-details-drawer/contact-details-drawer.vue';
|
||||||
|
|
||||||
|
// Supporting Files
|
||||||
|
import { getMountOptions } from '@/helpers/unit-test-helper.js';
|
||||||
|
import { useMainStore } from '@/store';
|
||||||
|
|
||||||
|
function getMountedComponent(mainInitialState = {}, initialData = {}, methodToRunAfterInitializingStore = () => {}) {
|
||||||
|
const mountOptions = getMountOptions({
|
||||||
|
router: {
|
||||||
|
navigate: jest.fn()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const testingPinia = createTestingPinia({
|
||||||
|
initialState: {
|
||||||
|
main: mainInitialState
|
||||||
|
}
|
||||||
|
});
|
||||||
|
useMainStore(testingPinia);
|
||||||
|
methodToRunAfterInitializingStore();
|
||||||
|
|
||||||
|
mountOptions.global.plugins = [testingPinia];
|
||||||
|
mountOptions.data = () => (initialData);
|
||||||
|
|
||||||
|
const wrapper = shallowMount(contactDetailsDrawer, mountOptions);
|
||||||
|
return { wrapper };
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('contact-details-drawer', () => {
|
||||||
|
test('snapshot matches returns the initial data', () => {
|
||||||
|
// Arrange
|
||||||
|
const firstName = 'Frederick';
|
||||||
|
const lastName = 'Taylor';
|
||||||
|
const emailAddress = 'fred.tay@gmail.com';
|
||||||
|
const phoneNumber = '606-009-2943';
|
||||||
|
const mainInitialState = {
|
||||||
|
order: {
|
||||||
|
contactInfo: {
|
||||||
|
firstName,
|
||||||
|
lastName,
|
||||||
|
emailAddress,
|
||||||
|
phoneNumber
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent(mainInitialState);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(wrapper.vm.$data).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
test('renders modal', () => {
|
||||||
|
// Arrange
|
||||||
|
const wrapper = shallowMount(contactDetailsDrawer, getMountOptions());
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const modal = wrapper.findComponent({ ref: 'contact-details-modal' });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(modal.exists()).toBeTruthy();
|
||||||
|
expect(modal.classes()).toContain('contact-details-drawer');
|
||||||
|
});
|
||||||
|
describe('method', () => {
|
||||||
|
describe('saveContactDetails', () => {
|
||||||
|
test.each([
|
||||||
|
['Sarah', 'Jones', 's.jones@gmail.com', '724-996-0909'],
|
||||||
|
[null, 'Jones', 's.jones@gmail.com', '724-996-0909'],
|
||||||
|
['Sarah', null, 's.jones@gmail.com', '724-996-0909'],
|
||||||
|
['Sarah', 'Jones', null, '724-996-0909'],
|
||||||
|
['Sarah', 'Jones', 's.jones@gmail.com', null]
|
||||||
|
|
||||||
|
])(
|
||||||
|
'when first name data "%p", last name "%p", email "%p", and phone number "%p", updateContactInfo called with expected',
|
||||||
|
(firstName, lastName, emailAddress, phoneNumber) => {
|
||||||
|
// Arrange
|
||||||
|
const mainInitialState = {
|
||||||
|
order: {
|
||||||
|
contactInfo: {
|
||||||
|
firstName: 'Frederick',
|
||||||
|
lastName: 'Taylor',
|
||||||
|
emailAddress: 'fred.tay@gmail.com',
|
||||||
|
phoneNumber: '606-009-2943'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const initialData = {
|
||||||
|
firstName, lastName, emailAddress, phoneNumber
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent(mainInitialState, initialData);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
wrapper.vm.saveContactDetails();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(wrapper.emitted()['update-contact-details']).toBeTruthy();
|
||||||
|
expect(useMainStore().updateContactInfo).toBeCalledTimes(1);
|
||||||
|
expect(useMainStore().updateContactInfo).toBeCalledWith({ firstName, lastName, emailAddress, phoneNumber });
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
test('resetFormValues sets data to expected values', () => {
|
||||||
|
// Arrange
|
||||||
|
const firstName = 'John';
|
||||||
|
const lastName = 'Doe';
|
||||||
|
const emailAddress = 'test@example.com';
|
||||||
|
const phoneNumber = '123-456-1234';
|
||||||
|
const mainInitialState = {
|
||||||
|
order: {
|
||||||
|
contactInfo: {
|
||||||
|
firstName,
|
||||||
|
lastName,
|
||||||
|
emailAddress,
|
||||||
|
phoneNumber
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const initialData = {
|
||||||
|
firstName: 'some name',
|
||||||
|
lastName: 'some end name',
|
||||||
|
emailAddress: 'email@what.com',
|
||||||
|
phoneNumber: '888'
|
||||||
|
};
|
||||||
|
const { wrapper } = getMountedComponent(mainInitialState, initialData);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
wrapper.vm.resetFormValues();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(wrapper.vm.firstName).toBe(firstName);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -6,12 +6,11 @@
|
||||||
:onModalClosedCallback="resetFormValues"
|
:onModalClosedCallback="resetFormValues"
|
||||||
class="contact-details-drawer"
|
class="contact-details-drawer"
|
||||||
@isModalOpened="setModalStatus"
|
@isModalOpened="setModalStatus"
|
||||||
@footerButtonEvent="saveContactDetails">
|
@footerButtonEvent="clickFooterButtonEvent">
|
||||||
<template v-if="isModalOpened">
|
<template v-if="isModalOpened">
|
||||||
<textboxQuestion
|
<textboxQuestion
|
||||||
ref="firstNameQuestion"
|
ref="firstNameQuestion"
|
||||||
v-model="firstName"
|
v-model="firstName"
|
||||||
class=""
|
|
||||||
inputId="firstName"
|
inputId="firstName"
|
||||||
:cmsWidgetName="widget.firstNameQuestion"
|
:cmsWidgetName="widget.firstNameQuestion"
|
||||||
isRequired
|
isRequired
|
||||||
|
|
@ -106,6 +105,10 @@ export default {
|
||||||
setModalStatus(isOpened) {
|
setModalStatus(isOpened) {
|
||||||
this.isModalOpened = isOpened;
|
this.isModalOpened = isOpened;
|
||||||
},
|
},
|
||||||
|
clickFooterButtonEvent() {
|
||||||
|
this.saveContactDetails();
|
||||||
|
this.closeModal();
|
||||||
|
},
|
||||||
saveContactDetails() {
|
saveContactDetails() {
|
||||||
const contactInfo = {
|
const contactInfo = {
|
||||||
firstName: this.firstName,
|
firstName: this.firstName,
|
||||||
|
|
@ -115,7 +118,6 @@ export default {
|
||||||
};
|
};
|
||||||
useMainStore().updateContactInfo(contactInfo);
|
useMainStore().updateContactInfo(contactInfo);
|
||||||
this.$emit('update-contact-details');
|
this.$emit('update-contact-details');
|
||||||
this.closeModal();
|
|
||||||
},
|
},
|
||||||
resetFormValues() {
|
resetFormValues() {
|
||||||
const { firstName,
|
const { firstName,
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,16 @@ describe('tpa-submit', () => {
|
||||||
expect(siteFooter.props().cmsWidgetName).toBe('SiteFooterWidget');
|
expect(siteFooter.props().cmsWidgetName).toBe('SiteFooterWidget');
|
||||||
expect(siteFooter.classes()).toContain('mt-5');
|
expect(siteFooter.classes()).toContain('mt-5');
|
||||||
});
|
});
|
||||||
|
test('contact details drawer', () => {
|
||||||
|
// Arrange
|
||||||
|
const wrapper = shallowMount(tpaSubmit, getMountOptions());
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const contactDetailsDrawer = wrapper.findComponent({ ref: 'contactDetailsDrawer' });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(contactDetailsDrawer.exists()).toBeTruthy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('before route enter', () => {
|
describe('before route enter', () => {
|
||||||
test('produces 4 sections', async () => {
|
test('produces 4 sections', async () => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue