/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import React from "react"; import { render, fireEvent, act, screen, RenderResult } from "@testing-library/react"; import { createMemoryHistory } from "history"; import { MemoryRouter, Router } from "react-router-dom"; import AddContent from "../AddContent"; describe("Add content screen", () => { let component: RenderResult; beforeEach(() => { component = render(, { wrapper: MemoryRouter }); }); test("renders Add content", async () => { expect(component).toMatchSnapshot(); }); test("renders header", async () => { const addContent = await screen.getByRole("heading", { name: "Add content item", }); expect(addContent).toBeInTheDocument(); }); test("renders text option", async () => { const header = await screen.findByText("Text"); const description = await screen.findByText( "Add a formatted block of text. Input supports Markdown including links, bullets, bolding, and headings.", ); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders metrics option", async () => { const header = await screen.findByText("Metrics"); const description = await screen.findByText( "Add one or more metrics to show point-in-time numerical data and trends.", ); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders chart option", async () => { const header = await screen.findByText("Chart"); const description = await screen.findByText( "Display data as a visualization, including line, bar, column and part-to-whole charts.", ); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders table option", async () => { const header = await screen.findByText("Table"); const description = await screen.findByText("Display data formatted in rows and columns."); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders image option", async () => { const header = await screen.findByText("Image"); const description = await screen.findByText("Upload an image to display."); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders section option", async () => { const header = await screen.findByText("Section"); const description = await screen.findByText( "Add a section to group similar content items in a list.", ); expect(header).toBeInTheDocument(); expect(description).toBeInTheDocument(); }); test("renders preview thumbnail for each content item", async () => { fireEvent.click(screen.getByTestId("textRadioButton")); let thumbnail = screen.getByAltText("Text Content Item Preview"); expect(thumbnail).toBeInTheDocument(); fireEvent.click(screen.getByTestId("metricsRadioButton")); thumbnail = screen.getByAltText("Metrics Content Item Preview"); expect(thumbnail).toBeInTheDocument(); fireEvent.click(screen.getByTestId("chartRadioButton")); thumbnail = screen.getByAltText("Chart Content Item Preview"); expect(thumbnail).toBeInTheDocument(); fireEvent.click(screen.getByTestId("tableRadioButton")); thumbnail = screen.getByAltText("Table Content Item Preview"); expect(thumbnail).toBeInTheDocument(); fireEvent.click(screen.getByTestId("imageRadioButton")); thumbnail = screen.getByAltText("Image Content Item Preview"); expect(thumbnail).toBeInTheDocument(); fireEvent.click(screen.getByTestId("sectionRadioButton")); thumbnail = screen.getByAltText("Section Content Item Preview"); expect(thumbnail).toBeInTheDocument(); }); }); describe("'Continue' button navigation", () => { let history; beforeEach(() => { history = createMemoryHistory(); jest.spyOn(history, "push"); render( , ); }); test("takes you to add-chart screen, when Chart option is selected", async () => { fireEvent.click(screen.getByTestId("chartRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-chart"); }); test("takes you to add-table screen, when Table option is selected", async () => { fireEvent.click(screen.getByTestId("tableRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-table"); }); test("takes you to add-text screen, when Text option is selected", async () => { fireEvent.click(screen.getByTestId("textRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-text"); }); test("takes you to add-image screen, when Image option is selected", async () => { fireEvent.click(screen.getByTestId("imageRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-image"); }); test("takes you to add-metrics screen, when Metrics option is selected", async () => { fireEvent.click(screen.getByTestId("metricsRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-metrics"); }); test("takes you to add-section screen, when Section option is selected", async () => { fireEvent.click(screen.getByTestId("sectionRadioButton")); await act(async () => { const continueButton = await screen.findByRole("button", { name: "Continue", }); fireEvent.click(continueButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/undefined/add-section"); }); }); test("cancel link takes you to Edit Dashboard screen", async () => { const history = createMemoryHistory(); jest.spyOn(history, "push"); const { findByRole } = render( , ); await act(async () => { const cancelButton = await findByRole("button", { name: "Cancel" }); fireEvent.click(cancelButton); }); expect(history.push).toHaveBeenCalledWith("/admin/dashboard/edit/undefined"); });