/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import React from "react"; import { render, act, screen } from "@testing-library/react"; import { useHomepage, usePublicHomepage, usePublicHomepageSearch } from "../homepage-hooks"; import BackendService from "../../services/BackendService"; import { PublicHomepage } from "../../models"; describe("useHomepage", () => { const FooComponent = () => { const { homepage } = useHomepage(); return ( <> {homepage?.title} ); }; test("should fetch the home page", async () => { const sampleHomePage = { title: "Home Page" }; const fetchHomepageSpy = jest .spyOn(BackendService, "fetchHomepage") .mockImplementation(() => Promise.resolve(sampleHomePage)); await act(async () => { render(); }); expect(fetchHomepageSpy).toHaveBeenCalled(); expect(screen.getByText(sampleHomePage.title)).toBeInTheDocument(); }); }); describe("usePublicHomepage", () => { const FooComponent = () => { const { homepage } = usePublicHomepage(); return ( <> {homepage?.title} ); }; test("should fetch the home page", async () => { const sampleHomePage = { title: "Public Home Page" }; const fetchPublicHomepageSpy = jest .spyOn(BackendService, "fetchPublicHomepage") .mockImplementation(() => Promise.resolve(sampleHomePage)); await act(async () => { render(); }); expect(fetchPublicHomepageSpy).toHaveBeenCalled(); expect(screen.getByText(sampleHomePage.title)).toBeInTheDocument(); }); }); describe("usePublicHomepageSearch", () => { interface Props { query: string; } const FooComponent = (props: Props) => { const { homepage } = usePublicHomepageSearch(props.query); return ( <> {homepage?.title} ); }; test("should fetch the home page", async () => { const sampleHomePage = { title: "Public Home Page" } as PublicHomepage; const fetchPublicHomepageWithQuerySpy = jest .spyOn(BackendService, "fetchPublicHomepageWithQuery") .mockImplementation(() => Promise.resolve(sampleHomePage)); await act(async () => { render(); }); expect(fetchPublicHomepageWithQuerySpy).toHaveBeenCalled(); expect(screen.getByText(sampleHomePage.title)).toBeInTheDocument(); }); });