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");