DigitalConsumer.FixMyGlass/src/helpers/cms-helper.spec.js
2021-12-17 13:11:59 -05:00

140 lines
No EOL
3.4 KiB
JavaScript

import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
import { dispatch } from "@/store";
jest.mock("@/store", () => ({
dispatch: jest.fn(),
state: {
order: { vehicle: { year: "2019", make: "Acura" } }
}
}));
describe("cms-content-helper.js", () => {
it("Should return data from CMS", () => {
// Arrange
const cmsMockData = {
Result: [
{
Type: "PageHeaderWidget",
Model: {
HeaderText: "Select a year to get started",
},
},
{
Type: "PageHeaderWidget",
Model: {
HeaderText: "Select a model",
},
},
{
Type: "RadioQuestionWidget",
Model: {
QuestionText: "What year is your vehicle?",
},
},
],
};
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
// Act
fetchCmsContentForPage("testPage").then((response) => {
// Assert
expect(response.PageHeaderWidget[0].HeaderText).toEqual(
"Select a year to get started"
);
});
});
});
describe("cms-content-helper.js", () => {
it("Should replace strings for global state", () => {
const cmsMockData = {
Result: [
{
Type: "PageHeaderWidget",
Model: {
HeaderText: "{globalState:order.vehicle.year}",
},
},
],
};
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
fetchCmsContentForPage("testPage").then((response) => {
// Assert
expect(response.PageHeaderWidget[0].HeaderText).toEqual(
"2019"
);
});
});
});
describe("cms-content-helper.js", () => {
it("Should replace strings for global state, and leave others the same", () => {
const cmsMockData = {
Result: [
{
Type: "PageHeaderWidget",
Model: {
HeaderText: "{globalState:order.vehicle.year}",
},
},
{
Type: "RadioQuestionWidget",
Model: {
ExampleText: "My widget value!",
},
},
],
};
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
fetchCmsContentForPage("testPage").then((response) => {
// Assert
expect(response.PageHeaderWidget[0].HeaderText).toEqual("2019");
expect(response.RadioQuestionWidget[0].ExampleText).toEqual("My widget value!");
});
});
});
describe("cms-content-helper.js", () => {
it("Should replace strings for global state in nested objects", () => {
const cmsMockData = {
Result: [
{
Type: "PageHeaderWidget",
Model: {
HeaderText: "{globalState:order.vehicle.year}",
},
},
{
Type: "RadioQuestionWidget",
Model: {
OtherObjectInside: {
ExampleText: "{globalState:order.vehicle.make}",
}
},
},
],
};
dispatch.mockImplementation(() => Promise.resolve({ data: cmsMockData }));
fetchCmsContentForPage("testPage").then((response) => {
// Assert
expect(response.PageHeaderWidget[0].HeaderText).toEqual("2019");
expect(response.RadioQuestionWidget[0].OtherObjectInside.ExampleText).toEqual("Acura");
});
});
});
test.todo("String cannot be mapped to global state");