unit tests for calendar components

This commit is contained in:
Katie Kroell 2024-03-15 15:56:46 -04:00
parent 8076a7b59a
commit 0d52f5a26b
2 changed files with 228 additions and 0 deletions

View file

@ -0,0 +1,187 @@
// Components
import calendarOptions from '@/constants/calendar-options';
// Supporting Files
import { shallowMount } from '@vue/test-utils';
import { getMountOptions } from '@/helpers/unit-test-helper.js';
import { useMainStore } from '@/store';
import addToCalendar from '@/layouts/order-confirmation/add-to-calendar/add-to-calendar.vue';
const appointmentText = 'Appointment content';
function setupMocks({ customMountOptions }) {
const mountOptions = getMountOptions({
...customMountOptions
});
mountOptions.mixins = [
{
methods: {
getCmsContent: jest.fn().mockImplementation(() => appointmentText)
}
}
];
const wrapper = shallowMount(addToCalendar, mountOptions);
wrapper.vm.$refs.calendarModalQuestion.openModal = jest.fn();
return { wrapper };
}
beforeEach(() => {
jest.restoreAllMocks();
jest.clearAllMocks();
useMainStore().submittedOrder = {
schedule: {
date: '2019-01-01',
startTime: '09:00',
endTime: '10:00',
routeCode: '000'
},
lineItems: {
glassParts: [
{
partNumber: 'ABC123'
}
],
supportingItems: []
},
serviceLocation: {
address: '',
address2: null,
city: '',
state: 'AZ',
appointmentType: 'Inshop',
zipCode: '12345',
zipCodeCtu: '01234',
provider: {
providerNumber: '123',
address: {
streetAddress: 'test1',
city: 'test',
state: 'AZ',
zipCode: '12345',
zipCodeCtu: '01234'
}
}
},
damage: {
isRepair: false
},
referralNumber: '1234567',
payment: {
isInsurance: true
}
};
});
afterEach(() => {
useMainStore().submittedOrder = {};
jest.restoreAllMocks();
jest.clearAllMocks();
});
describe('Add-to-calendar methods...', () => {
test('Add-to-calendar should trigger openModal method', () => {
// Arrange
const { wrapper } = setupMocks({
customMountOptions: {
propsData: {
appointment: {
RefrrlSeqNum: '123456',
StartDate: new Date(2023, 9, 11, 12, 0, 0),
EndDate: new Date(2023, 9, 11, 13, 0, 0),
Subject: 'Meeting with John',
Location: 'Conference Room',
Body: 'Discuss the project progress',
IsHTML: true,
Duration: '1220'
}
}
}
});
// Act
wrapper.vm.openCalendarModal();
// Assert
expect(wrapper.vm.$refs.calendarModalQuestion.openModal).toBeCalled();
});
test('getCalendarData should return expected model value.', () => {
// Arrange
const type = calendarOptions.OUTLOOKCOM;
const { wrapper } = setupMocks({
customMountOptions: {
propsData: {
appointment: {
RefrrlSeqNum: '123456',
StartDate: new Date(2023, 9, 11, 12, 0, 0),
EndDate: new Date(2023, 9, 11, 13, 0, 0),
Subject: 'Meeting with John',
Location: 'Conference Room',
Body: 'Discuss the project progress',
IsHTML: true,
Duration: '1220'
}
}
}
});
// Act
const testValue = wrapper.vm.getCalendarData(type);
// Assert
expect(testValue.name).toEqual(calendarOptions.OUTLOOKCOM);
});
test('setCalendarAppointment should call getAppointment method for iCAL and Outlook.', () => {
// Arrange
const newValue = { name: calendarOptions.OUTLOOK };
const { wrapper } = setupMocks({
customMountOptions: {
propsData: {
appointment: {
RefrrlSeqNum: '123456',
StartDate: new Date(2023, 9, 11, 12, 0, 0),
EndDate: new Date(2023, 9, 11, 13, 0, 0),
Subject: 'Meeting with John',
Location: 'Conference Room',
Body: 'Discuss the project progress',
IsHTML: true,
Duration: '1220'
}
}
}
});
wrapper.vm.getAppointment = jest.fn();
// Act
wrapper.vm.setCalendarAppointment(newValue);
// Assert
expect(wrapper.vm.getAppointment).toHaveBeenCalled();
});
test('setCalendarAppointment should call window.open for Google, yahoo and Outlook.com.', () => {
// Arrange
const newValue = { name: calendarOptions.GOOGLE };
const { wrapper } = setupMocks({
customMountOptions: {
propsData: {
appointment: {
RefrrlSeqNum: '123456',
StartDate: new Date(2023, 9, 11, 12, 0, 0),
EndDate: new Date(2023, 9, 11, 13, 0, 0),
Subject: 'Meeting with John',
Location: 'Conference Room',
Body: 'Discuss the project progress',
IsHTML: true,
Duration: '1220'
}
}
}
});
window.open = jest.fn();
// Act
wrapper.vm.setCalendarAppointment(newValue);
// Assert
expect(window.open).toHaveBeenCalledTimes(1);
});
});

View file

@ -0,0 +1,41 @@
import { shallowMount } from '@vue/test-utils';
import calendarModalQuestion from '@/layouts/order-confirmation/add-to-calendar/calendar-modal-question/calendar-modal-question.vue';
describe('calendar-modal-question.vue', () => {
test('When selected calendar option is changed, a correctly selectedCalendarOption should be emitted', async () => {
// Arrange
const url = 'iCal url';
const name = 'iCal';
const icon = 'iCal.svg';
const expectedEmit = [
[
{
url,
name,
icon
}
]
];
const wrapper = shallowMount(calendarModalQuestion, {
propsData: {
calendarOptionsData: [
{
url,
name,
icon
}
]
}
});
wrapper.vm.$refs.calendarOptions.closeModal = jest.fn();
wrapper.vm.selectedCalendarOption = name;
// Act
wrapper.vm.setSelectedCalendarOption();
// Assert
expect(wrapper.emitted()['update:modelValue']).toEqual(expectedEmit);
});
});