Add tests for modal
This commit is contained in:
parent
24042ba111
commit
cba95f7e60
1 changed files with 148 additions and 0 deletions
|
|
@ -0,0 +1,148 @@
|
|||
import { shallowMount } from "@vue/test-utils";
|
||||
import { getMountOptions } from "@/helpers/unit-test-helper.js";
|
||||
|
||||
import customerDetailsModalQuestion from "@/layouts/review/review-sections/customer-review/customer-details-modal-question/customer-details-modal-question";
|
||||
|
||||
const testConstants = {
|
||||
previousCustomerValues: {
|
||||
firstName: "First",
|
||||
lastName: "Last",
|
||||
emailAddress: "builddigitaltest@safelite.com",
|
||||
phoneNumber: "111-111-1111",
|
||||
isSmsOptIn: false,
|
||||
},
|
||||
newValues: {
|
||||
firstName: "New First",
|
||||
lastName: "New Last",
|
||||
emailAddress: "builddigitaltest@safelite.com - new",
|
||||
phoneNumber: "222-222-2222",
|
||||
isSmsOptIn: true,
|
||||
},
|
||||
};
|
||||
|
||||
let cmsContent;
|
||||
|
||||
describe("Customer Details Modal", () => {
|
||||
beforeEach(() => {
|
||||
cmsContent = {};
|
||||
});
|
||||
|
||||
describe("Submit", () => {
|
||||
test("Should push to store if a field has changed", async () => {
|
||||
// Arrange
|
||||
let props = generateDefaultProps();
|
||||
|
||||
const { wrapper } = setupMocks({
|
||||
propsData: props,
|
||||
});
|
||||
|
||||
// Act
|
||||
wrapper.vm.onModalOpened();
|
||||
|
||||
wrapper.vm.firstName = testConstants.newValues.firstName;
|
||||
|
||||
await wrapper.vm.setContactDetails();
|
||||
await wrapper.vm.$nextTick();
|
||||
|
||||
// Assert
|
||||
expect(wrapper.vm.dispatchStoreAction).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("Should not push to store if no fields have changed", async () => {
|
||||
// Arrange
|
||||
let props = generateDefaultProps();
|
||||
|
||||
const { wrapper } = setupMocks({
|
||||
propsData: props,
|
||||
});
|
||||
|
||||
// Act
|
||||
wrapper.vm.onModalOpened();
|
||||
|
||||
await wrapper.vm.setContactDetails();
|
||||
await wrapper.vm.$nextTick();
|
||||
|
||||
// Assert
|
||||
expect(wrapper.vm.dispatchStoreAction).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Default values", () => {
|
||||
test("Should populate on open", () => {
|
||||
// Arrange
|
||||
let props = generateDefaultProps();
|
||||
|
||||
const { wrapper } = setupMocks({
|
||||
propsData: props,
|
||||
});
|
||||
|
||||
// Act
|
||||
wrapper.vm.onModalOpened();
|
||||
|
||||
// Assert
|
||||
expect(wrapper.vm.firstName).toBe(testConstants.previousCustomerValues.firstName);
|
||||
expect(wrapper.vm.lastName).toBe(testConstants.previousCustomerValues.lastName);
|
||||
expect(wrapper.vm.emailAddress).toBe(testConstants.previousCustomerValues.emailAddress);
|
||||
expect(wrapper.vm.phoneNumber).toBe(testConstants.previousCustomerValues.phoneNumber);
|
||||
expect(wrapper.vm.isSmsOptIn).toBe(testConstants.previousCustomerValues.isSmsOptIn);
|
||||
});
|
||||
|
||||
test("Should replace old values on open", async () => {
|
||||
// Arrange
|
||||
let props = generateDefaultProps();
|
||||
|
||||
const { wrapper } = setupMocks({
|
||||
propsData: props,
|
||||
});
|
||||
|
||||
// Act
|
||||
wrapper.vm.firstName = testConstants.newValues.firstName;
|
||||
wrapper.vm.lastName = testConstants.newValues.lastName;
|
||||
wrapper.vm.emailAddress = testConstants.newValues.emailAddress;
|
||||
wrapper.vm.phoneNumber = testConstants.newValues.phoneNumber;
|
||||
wrapper.vm.isSmsOptIn = testConstants.newValues.isSmsOptIn;
|
||||
|
||||
wrapper.vm.onModalOpened();
|
||||
|
||||
// Assert
|
||||
expect(wrapper.vm.firstName).toBe(testConstants.previousCustomerValues.firstName);
|
||||
expect(wrapper.vm.lastName).toBe(testConstants.previousCustomerValues.lastName);
|
||||
expect(wrapper.vm.emailAddress).toBe(testConstants.previousCustomerValues.emailAddress);
|
||||
expect(wrapper.vm.phoneNumber).toBe(testConstants.previousCustomerValues.phoneNumber);
|
||||
expect(wrapper.vm.isSmsOptIn).toBe(testConstants.previousCustomerValues.isSmsOptIn);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function generateDefaultProps() {
|
||||
return {
|
||||
previousCustomerValues: {
|
||||
firstName: testConstants.previousCustomerValues.firstName,
|
||||
lastName: testConstants.previousCustomerValues.lastName,
|
||||
emailAddress: testConstants.previousCustomerValues.emailAddress,
|
||||
phoneNumber: testConstants.previousCustomerValues.phoneNumber,
|
||||
isSmsOptIn: testConstants.previousCustomerValues.isSmsOptIn,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function setupMocks(customMountOptions) {
|
||||
const mountOptions = getMountOptions(customMountOptions);
|
||||
|
||||
const mockMixin = {
|
||||
methods: {
|
||||
getCmsContent: jest.fn((widgetName, cmsFieldName) => {
|
||||
return cmsContent?.[widgetName]?.[cmsFieldName] ?? "";
|
||||
}),
|
||||
},
|
||||
};
|
||||
|
||||
mountOptions.global.mixins = [mockMixin];
|
||||
|
||||
const wrapper = shallowMount(customerDetailsModalQuestion, mountOptions);
|
||||
wrapper.vm.setCmsContent = jest.fn();
|
||||
wrapper.vm.openModal = jest.fn();
|
||||
wrapper.vm.closeModal = jest.fn();
|
||||
wrapper.vm.dispatchStoreAction = jest.fn();
|
||||
return { wrapper };
|
||||
}
|
||||
Loading…
Reference in a new issue