DigitalConsumer.FixMyGlass/src/mixins/base-mixin.spec.js
Chloe Herd 2f12354ff2 Reapply "Unit tests"
This reverts commit ec782996df.
2025-05-13 16:36:32 -04:00

178 lines
5.3 KiB
JavaScript

import baseMixin from "@/mixins/base-mixin";
import { storeActions } from "@/constants/store-actions.js";
import { storeMutations } from "@/constants/store-mutations.js";
import { navigationScenarios } from "@/router/constants/navigation-scenarios";
import { vehicleCategories } from "@/constants/vehicle-categories.js";
import { queryStrings } from "@/constants/query-strings";
import { dynamicStrings } from "@/constants/dynamic-strings";
import store from "@/store";
describe("baseMixin.js", () => {
test("dispatchStoreAction: calls dispatch with type and payload", () => {
const mixIn = getMixInInstance({});
const type = "";
const payload = {};
mixIn.methods.dispatchStoreAction(type, payload);
expect(store.dispatch).toBeCalledWith(type, payload);
});
test("dispatchStoreAction: calls dispatch with type and payload, handles Uri encode", () => {
const mixIn = getMixInInstance({});
const type = "";
const payload = { make: "Alfa Romeo/Chrysler" };
mixIn.methods.dispatchStoreAction(type, payload, true);
expect(store.dispatch).toBeCalledWith(type, payload);
});
test("savePageDataToStore, should call store commit", () => {
const mixIn = getMixInInstance({});
mixIn.methods.savePageDataToStore("vehicle-year", {});
expect(store.commit).toBeCalledWith(storeMutations.UPDATE_PAGE_DATA, {
page: "vehicle-year",
data: {},
});
});
test("computed: storeActions should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let storeActionsForTest = mixIn.computed.storeActions();
// Assert
expect(storeActionsForTest).toEqual(storeActions);
});
test("computed: storeMutations should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let storeMutationsForTest = mixIn.computed.storeMutations();
// Assert
expect(storeMutationsForTest).toEqual(storeMutations);
});
test("computed: navigationScenarios should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let navigationScenariosForTest = mixIn.computed.navigationScenarios();
// Assert
expect(navigationScenariosForTest).toEqual(navigationScenarios);
});
test("computed: vehicleCategories should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let vehicleCategoriesForTest = mixIn.computed.vehicleCategories();
// Assert
expect(vehicleCategoriesForTest).toEqual(vehicleCategories);
});
test("computed: queryStrings should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let queryStringsForTest = mixIn.computed.queryStrings();
// Assert
expect(queryStringsForTest).toEqual(queryStrings);
});
test("computed: dynamicStrings should be equal to import object", () => {
// Arrange
const mixIn = getMixInInstance({});
// Act
let dynamicStringsForTest = mixIn.computed.dynamicStrings();
// Assert
expect(dynamicStringsForTest).toEqual(dynamicStrings);
});
test("onInvalidSubmit: puts focus on first error", () => {
// Arrange
const mixIn = getMixInInstance({});
const validationData = {
errors: {
fieldOne: "error message 1",
fieldTwo: "error message 2",
},
};
global.document.querySelector = jest.fn();
// Act
mixIn.methods.onInvalidSubmit(validationData);
// Assert
expect(global.document.querySelector).toBeCalledWith("[data-focus-target='fieldOne']");
});
test("getZipCodeData calls dispatch", () => {
const mixIn = getMixInInstance({});
mixIn.methods.dispatchStoreActionWithLogging = jest.fn();
mixIn.methods.dispatchStoreActionWithLogging.mockReturnValue({
data: { isValid: true, isServiceable: true, state: "OH" },
});
const type = "";
const payload = { zip: 43015 };
const mockData = {
actionList: [
{
actionName: storeActions.VALIDATE_ZIP,
},
],
};
mixIn.methods.getZipCodeData(type, payload);
expect(mixIn.methods.dispatchStoreActionWithLogging).toBeCalled();
});
});
function getMixInInstance({ isDispatchSuccess = true }) {
// Mock Store
const storeDispatch = jest.fn();
if (isDispatchSuccess) {
storeDispatch.mockReturnValue(Promise.resolve());
} else {
storeDispatch.mockReturnValue(Promise.reject());
}
// Mock Route
const route = {
query: {
fmgPage: "test-page",
},
};
// Attach mocks to mixin
const baseMixIn = baseMixin;
baseMixIn.methods.$route = route;
baseMixIn.methods.storeActions = storeActions;
baseMixIn.methods.vehicleCategories = vehicleCategories;
baseMixIn.methods.queryStrings = queryStrings;
baseMixIn.methods.dynamicStrings = dynamicStrings;
store.dispatch = storeDispatch;
store.commit = jest.fn();
return baseMixIn;
}