1146 lines
No EOL
50 KiB
JavaScript
1146 lines
No EOL
50 KiB
JavaScript
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
|
|
import { shallowMount } from "@vue/test-utils";
|
|
import { setupMocksForJsFiles, getMountOptions } from "@/helpers/unit-test-helper.js";
|
|
import { fmgPageValues } from "@/router/router-constants/fmgPage-values";
|
|
import { storeMutations } from "@/constants/store-mutations";
|
|
import { storeActions } from "@/constants/store-actions";
|
|
import loadingModal from '@/common-components/loading-modal/loading-modal.vue';
|
|
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
|
|
import { navigationScenarios } from "../router/router-constants/navigation-scenarios";
|
|
|
|
jest.mock("@/helpers/heritage-integration/navigation-helper", () => ({
|
|
navigateToHeritageFunnel: jest.fn()
|
|
}));
|
|
|
|
describe("vehicle-questions-mixin", () => {
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
})
|
|
|
|
describe("hasPartQuestions", () => {
|
|
test("has no part questions => return false", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasPartQuestions = wrapper.vm.hasPartQuestions([
|
|
{
|
|
partQuestions: []
|
|
}
|
|
])
|
|
|
|
// Assert
|
|
expect(hasPartQuestions).toBe(false);
|
|
});
|
|
|
|
test("has undefined part questions => return false", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasPartQuestions = wrapper.vm.hasPartQuestions([])
|
|
|
|
// Assert
|
|
expect(hasPartQuestions).toBe(false);
|
|
});
|
|
|
|
test("has part questions => return true", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasPartQuestions = wrapper.vm.hasPartQuestions([
|
|
{
|
|
partQuestions: [{
|
|
testProperty: "some value"
|
|
}]
|
|
}
|
|
])
|
|
|
|
// Assert
|
|
expect(hasPartQuestions).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("hasGlassLocationWithMultipleParts", () => {
|
|
test("has one part for one glass location => return false", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasGlassLocationWithMultipleParts = wrapper.vm.hasGlassLocationWithMultipleParts([
|
|
{
|
|
glassName: "Something",
|
|
glassLocation: "somewhere",
|
|
parts: [{
|
|
partNumber: "1234567"
|
|
}]
|
|
}
|
|
])
|
|
|
|
// Assert
|
|
expect(hasGlassLocationWithMultipleParts).toBe(false);
|
|
});
|
|
|
|
test("has one part for every glass location => return false", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasGlassLocationWithMultipleParts = wrapper.vm.hasGlassLocationWithMultipleParts([
|
|
{
|
|
glassName: "Something",
|
|
glassLocation: "somewhere",
|
|
parts: [{
|
|
partNumber: "1234567"
|
|
}]
|
|
},
|
|
{
|
|
glassName: "Another glass",
|
|
glassLocation: "somewhere else",
|
|
parts: [{
|
|
partNumber: "1234568"
|
|
}]
|
|
},
|
|
{
|
|
glassName: "Special glass",
|
|
glassLocation: "Another where",
|
|
parts: [{
|
|
partNumber: "1234569"
|
|
}]
|
|
}
|
|
])
|
|
|
|
// Assert
|
|
expect(hasGlassLocationWithMultipleParts).toBe(false);
|
|
});
|
|
|
|
test("has multiple parts for one glass location => return true", () => {
|
|
// Arrange
|
|
const { wrapper } = setupMocks({});
|
|
|
|
// Act
|
|
const hasGlassLocationWithMultipleParts = wrapper.vm.hasGlassLocationWithMultipleParts([
|
|
{
|
|
glassName: "Something",
|
|
glassLocation: "somewhere",
|
|
parts: [{
|
|
partNumber: "1234567"
|
|
}]
|
|
},
|
|
{
|
|
glassName: "Another glass",
|
|
glassLocation: "somewhere else",
|
|
parts: [{
|
|
partNumber: "1234568"
|
|
}]
|
|
},
|
|
{
|
|
glassName: "Special glass",
|
|
glassLocation: "Another where",
|
|
parts: [
|
|
{
|
|
partNumber: "1234569"
|
|
},
|
|
{
|
|
partNumber: "1234560"
|
|
}
|
|
]
|
|
}
|
|
])
|
|
|
|
// Assert
|
|
expect(hasGlassLocationWithMultipleParts).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("navigateForward", () => {
|
|
describe("should go to parts-questions", () => {
|
|
test("single glass location has part question => go to parts-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": null,
|
|
"partQuestions": [
|
|
{
|
|
"questionSequence": 1,
|
|
"questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?",
|
|
"answers": [
|
|
{
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01144"
|
|
},
|
|
{
|
|
"answerText": "No",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01143"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
|
|
test("multiple glass locations have part questions => go to parts-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": null,
|
|
"partQuestions": [
|
|
{
|
|
"questionSequence": 1,
|
|
"questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?",
|
|
"answers": [
|
|
{
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01144"
|
|
},
|
|
{
|
|
"answerText": "No",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01143"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD08158GTYN",
|
|
"description": "driver side, front",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Quarter",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DQ08162GTYN",
|
|
"description": "driver side, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "SideDoor",
|
|
"glassLocation": "Driver",
|
|
"parts": null,
|
|
"partQuestions": [
|
|
{
|
|
"questionSequence": 2,
|
|
"questionText": "Is this a super awesome question?",
|
|
"answers": [
|
|
{
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01144000"
|
|
},
|
|
{
|
|
"answerText": "Super yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01143001"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DB08165GTNN",
|
|
"description": "heated glass, stationary",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
|
|
test("multiple glass locations selected, one has part question => go to parts-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": null,
|
|
"partQuestions": [
|
|
{
|
|
"questionSequence": 1,
|
|
"questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?",
|
|
"answers": [
|
|
{
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01144"
|
|
},
|
|
{
|
|
"answerText": "No",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01143"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD08158GTYN",
|
|
"description": "driver side, front",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Quarter",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DQ08162GTYN",
|
|
"description": "driver side, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "SideDoor",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD08160GTYN",
|
|
"description": "driver side, body side, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DB08165GTNN",
|
|
"description": "heated glass, stationary",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
|
|
test("a selected glass location has part questions and multiple parts => go to parts-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": null,
|
|
"partQuestions": [
|
|
{
|
|
"questionSequence": 1,
|
|
"questionText": "Is there a line running across the bottom, driver's side then up the center of the Windshield?",
|
|
"answers": [
|
|
{
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01144"
|
|
},
|
|
{
|
|
"answerText": "No",
|
|
"nextQuestionSequence": null,
|
|
"answerResult": "DW01143"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD08158GTYN",
|
|
"description": "driver side, front",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Quarter",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DQ08162GTYN",
|
|
"description": "driver side, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ08162YPYN",
|
|
"description": "driver side, 1 hole",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "SideDoor",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD08160GTYN",
|
|
"description": "driver side, body side, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DD08160YPYN",
|
|
"description": "driver side, body side, 1 hole",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DB08165GTNN",
|
|
"description": "heated glass, stationary",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DB08165YPNN",
|
|
"description": "heated glass, stationary",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DB08166GTNN",
|
|
"description": "stationary",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DB08167GTNN",
|
|
"description": "heated glass, movable, 8 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DB08167YPNN",
|
|
"description": "heated glass, movable, 8 hole",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_PART_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
});
|
|
|
|
describe("should go to vehicle-parts", () => {
|
|
test("single glass location has multiple parts => go to vehicle-parts", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FB25724GTYN",
|
|
"description": "heated glass, solar, antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "FB25759GTYN",
|
|
"description": "heated glass, solar, antenna, w/diversity antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_MULTIPLE_PARTS_TO_CHOOSE, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
|
|
test("multiple glass locations selected, one of them has multiple parts => go to vehicle parts", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FW03647GTNN",
|
|
"description": "solar, 3rd visor band",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": [
|
|
{
|
|
"partNumber": "MWF03647",
|
|
"partType": "MOULDING",
|
|
"description": "Upper "
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Back",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FD25747GTYN",
|
|
"description": "solar, driver side, rear, ex models and above",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FD25719GTYN",
|
|
"description": "solar, driver side, front, ex models and above",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Vent",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FV25749GTNN",
|
|
"description": "solar, driver side, rear",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FB25724GTYN",
|
|
"description": "heated glass, solar, antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "FB25759GTYN",
|
|
"description": "heated glass, solar, antenna, w/diversity antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_MULTIPLE_PARTS_TO_CHOOSE, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
|
|
test("multiple glass locations selected, multiple have multiple parts => go to vehicle-parts", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DW02101GTYN",
|
|
"description": "solar",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Back",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD12202GTYN",
|
|
"description": "solar, driver side, rear",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DD12202YPYN",
|
|
"description": "solar, driver side, rear",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DD12198GTYN",
|
|
"description": "solar, driver side, front",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DD12200GTYN",
|
|
"description": "solar, driver side, front, laminated, soundproofing",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Quarter",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DQ12204GTYNOEM",
|
|
"description": "solar, driver side, encap",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12204YPYNOEM",
|
|
"description": "solar, driver side, encap",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12205GTYNOEM",
|
|
"description": "solar, antenna, driver side, encap",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12205YPYNOEM",
|
|
"description": "solar, antenna, driver side, encap",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12207GTYN",
|
|
"description": "solar, driver side, encap, chrome molding",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12207YPYNOEM",
|
|
"description": "solar, driver side, encap, chrome molding",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12208GTYNOEM",
|
|
"description": "solar, antenna, driver side, encap, chrome molding",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DQ12208YPYNOEM",
|
|
"description": "solar, antenna, driver side, encap, chrome molding",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "DB12209GTYN",
|
|
"description": "heated glass, solar, 1 hole",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
},
|
|
{
|
|
"partNumber": "DB12209YPYN",
|
|
"description": "heated glass, solar, 1 hole",
|
|
"color": "Gray Tint Privacy",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_MULTIPLE_PARTS_TO_CHOOSE, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
});
|
|
|
|
describe("should go to molding-questions", () => {
|
|
test("single glass location has child part questions => go to molding-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FB25724GTYN",
|
|
"description": "heated glass, solar, antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null,
|
|
"childPartQuestions": [
|
|
{
|
|
"questionSequence": 1,
|
|
"questionText": "Does the rubber seal around your windshield have a chrome strip running through it?",
|
|
"answers": [
|
|
{
|
|
"answerResult": "WKT D1106 C",
|
|
"answerText": "Yes",
|
|
"nextQuestionSequence": null
|
|
},
|
|
{
|
|
"answerResult": "WKT D1106 B",
|
|
"answerText": "No",
|
|
"nextQuestionSequence": null
|
|
}
|
|
]
|
|
}
|
|
]
|
|
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_MOLDING_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions });
|
|
});
|
|
});
|
|
|
|
describe("should go to capability-questions", () => {
|
|
test("single glass location has no child part questions but requiresCapabilityQuestions is true => go to capability-questions", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FB25724GTYN",
|
|
"description": "heated glass, solar, antenna",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": true,
|
|
"childParts": null,
|
|
"childPartQuestions": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$router.navigateWithSaving).toHaveBeenCalledWith(navigationScenarios.HAS_CAPABILITY_QUESTIONS, wrapper.vm.$route, {}, {}, { partsOrQuestions, capabilityQuestions: [] });
|
|
});
|
|
});
|
|
|
|
describe("should go to heritage funnel", () => {
|
|
test("single glass location selected, has no part questions and has one part => go to heritage funnel", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FW04186GTYN",
|
|
"description": "solar, soundproofing, lane keep assist",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": true,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": [
|
|
{
|
|
"partNumber": "GGG 3563 KIT",
|
|
"partType": "MOULDING",
|
|
"description": "Kit, Top & Sides "
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
]
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
// Assert
|
|
expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test("multiple glass locations selected, each has one part and no part questions => go to heritage funnel", async () => {
|
|
// Arrange
|
|
const partsOrQuestions = [
|
|
{
|
|
"glassName": "Single",
|
|
"glassLocation": "Windshield",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FW04186GTYN",
|
|
"description": "solar, soundproofing, lane keep assist",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": true,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": [
|
|
{
|
|
"partNumber": "GGG 3563 KIT",
|
|
"partType": "MOULDING",
|
|
"description": "Kit, Top & Sides "
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Back",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FD25457GTYN",
|
|
"description": "solar, driver side, rear",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Front",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FD27090GTYN",
|
|
"description": "solar, driver side, front",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Vent",
|
|
"glassLocation": "Driver",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FV25459GTNN",
|
|
"description": "solar, driver side, rear",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
},
|
|
{
|
|
"glassName": "Stationary",
|
|
"glassLocation": "Rear",
|
|
"parts": [
|
|
{
|
|
"partNumber": "FB25460GTYN",
|
|
"description": "heated glass, solar",
|
|
"color": "Green Tint",
|
|
"requiresRecalibration": false,
|
|
"requiresCapabilityQuestions": false,
|
|
"childParts": null
|
|
}
|
|
],
|
|
"partQuestions": null
|
|
}
|
|
];
|
|
|
|
const { wrapper } = setupMocks({
|
|
partsOrQuestions: partsOrQuestions
|
|
});
|
|
|
|
wrapper.vm.$store.commit = jest.fn();
|
|
|
|
const collectedGlassParts = wrapper.vm.reducedGlassPartsArray(partsOrQuestions);
|
|
|
|
// Act
|
|
await wrapper.vm.navigateForward(partsOrQuestions);
|
|
|
|
|
|
// Assert
|
|
expect(wrapper.vm.$store.commit).toHaveBeenCalledTimes(1);
|
|
expect(wrapper.vm.$store.commit).toHaveBeenCalledWith(storeMutations.UPDATE_GLASS_PARTS, collectedGlassParts)
|
|
expect(wrapper.vm.$refs.loadingModal.showModal).toHaveBeenCalledTimes(1);
|
|
expect(navigateToHeritageFunnel).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|
|
})
|
|
});
|
|
|
|
function setupMocks({ fmgPage = fmgPageValues.VIN_LOOKUP }) {
|
|
const baseMixin = setupMocksForJsFiles({
|
|
actionList: [{
|
|
actionName: storeActions.GET_CAPABILITY_QUESTIONS,
|
|
data: [],
|
|
}]
|
|
});
|
|
|
|
const mocks = getMountOptions({
|
|
router: {
|
|
navigate: jest.fn(), navigateWithSaving: jest.fn(), navigateWithSaving: jest.fn()
|
|
},
|
|
store: {
|
|
commit: jest.fn(),
|
|
dispatch: jest.fn()
|
|
},
|
|
route: {
|
|
query: {
|
|
fmgPage
|
|
}
|
|
}
|
|
});
|
|
|
|
// store.dispatch = jest.fn();
|
|
|
|
const mockVehicleQuestionComponent = {
|
|
components: { loadingModal },
|
|
template: '<loadingModal ref="loadingModal" />',
|
|
mixins: [vehicleQuestionsMixin, baseMixin.baseMixin]
|
|
};
|
|
|
|
const wrapper = shallowMount(mockVehicleQuestionComponent, mocks);
|
|
|
|
wrapper.vm.$refs.loadingModal.showModal = jest.fn();
|
|
|
|
return { wrapper };
|
|
} |