/* * Portions of this file are based on code from radix-ui-primitives. * MIT Licensed, Copyright (c) 2022 WorkOS. * * Credits to the Radix UI team: * https://github.com/radix-ui/primitives/blob/21a7c97dc8efa79fecca36428eec49f187294085/packages/react/avatar/src/Avatar.test.tsx */ import { render } from "@solidjs/testing-library"; import * as Image from "."; const ROOT_TEST_ID = "image-root"; const FALLBACK_TEXT = "AB"; const IMAGE_ALT_TEXT = "Fake Image"; const DELAY = 300; describe.skipIf(process.env.GITHUB_ACTIONS)("Image", () => { describe("with fallback and a working image", () => { const originalGlobalImage = window.Image; beforeAll(() => { (window.Image as any) = class MockImage { onload: () => void = () => {}; src = ""; constructor() { setTimeout(() => { this.onload(); }, DELAY); } }; }); afterAll(() => { window.Image = originalGlobalImage; }); it("should render the fallback initially", () => { const { queryByText } = render(() => ( {FALLBACK_TEXT} )); const fallback = queryByText(FALLBACK_TEXT); expect(fallback).toBeInTheDocument(); }); it("should not render the image initially", () => { const { queryByRole } = render(() => ( {FALLBACK_TEXT} )); const image = queryByRole("img"); expect(image).not.toBeInTheDocument(); }); it("should render the image after it has loaded", async () => { const { findByRole } = render(() => ( {FALLBACK_TEXT} )); const image = await findByRole("img"); expect(image).toBeInTheDocument(); }); it("should have alt text on the image", async () => { const { findByAltText } = render(() => ( {FALLBACK_TEXT} )); const image = await findByAltText(IMAGE_ALT_TEXT); expect(image).toBeInTheDocument(); }); }); describe("with fallback and delayed render", () => { it("should not render a fallback immediately", () => { const { queryByText } = render(() => ( {FALLBACK_TEXT} )); const fallback = queryByText(FALLBACK_TEXT); expect(fallback).not.toBeInTheDocument(); }); it("should render a fallback after the delay", async () => { const { queryByText, findByText } = render(() => ( {FALLBACK_TEXT} )); let fallback = queryByText(FALLBACK_TEXT); expect(fallback).not.toBeInTheDocument(); fallback = await findByText(FALLBACK_TEXT); expect(fallback).toBeInTheDocument(); }); }); });