/* eslint-disable import/no-deprecated -- This file tests the deprecated * ProgressBar component until it is removed or shimmed. */ import React from "react"; import { render, screen } from "@testing-library/react-native"; import type { ProgressBarProps } from "."; import { ProgressBar } from "."; const defaultSetupProps = { total: 0, current: 0, inProgress: 0, loading: false, }; type ProgressBarCombinedProps = ProgressBarProps; function renderProgressBarComponent({ total, current, inProgress, }: ProgressBarCombinedProps) { return render( , ); } it("renders blue inProgress bar when 1 or more jobs is in progress", () => { const bar = renderProgressBarComponent({ ...defaultSetupProps, inProgress: 1, }).toJSON(); expect(bar).toMatchSnapshot(); }); it("renders green CompletedProgress bar when 1 or more jobs is completed", () => { const current = 1; const bar = renderProgressBarComponent({ ...defaultSetupProps, current: current, total: 2, }); expect(bar).toMatchSnapshot(); expect(bar.getByLabelText("1 of 2 complete")).toBeDefined(); }); describe("with stepped variation", () => { beforeEach(() => { render( , ); }); it("renders the correct number of completed steps", () => { const completedSteps = screen.getAllByTestId("progress-step-completed"); expect(completedSteps).toHaveLength(2); }); it("renders the correct number of incomplete steps", () => { const inCompleteSteps = screen.getAllByTestId("progress-step-incomplete"); expect(inCompleteSteps).toHaveLength(1); }); it("renders the correct number of inProgress steps", () => { const stepElements = screen.getAllByTestId("progress-step-in-progress"); expect(stepElements).toHaveLength(1); }); }); describe("ProgressBar (native) - UNSAFE_style", () => { it("applies UNSAFE_style.container to the outer wrapper", () => { const containerStyle = { padding: 12, backgroundColor: "papayawhip" }; render( , ); const progressBar = screen.getByRole("progressbar"); expect(progressBar.props.style).toEqual( expect.objectContaining(containerStyle), ); }); it("applies UNSAFE_style.progressBarContainer and track in progress variation", () => { const progressBarContainer = { height: 22, borderRadius: 10 }; const track = { backgroundColor: "#eee" }; render( , ); const progressContainer = screen.getByTestId("progressbar-container"); expect(progressContainer.props.style).toEqual( expect.arrayContaining([expect.objectContaining(progressBarContainer)]), ); const trackView = screen.getByTestId("progressbar-track"); expect(trackView.props.style).toEqual( expect.arrayContaining([expect.objectContaining(track)]), ); }); it("applies UNSAFE_style.inProgressFill and fill in progress variation", () => { const inProgressFill = { backgroundColor: "#f59e0b" }; const fill = { backgroundColor: "#10b981" }; render( , ); const inProgressView = screen.getByTestId("progressbar-inprogress"); const fillView = screen.getByTestId("progressbar-fill"); expect(inProgressView.props.style).toEqual( expect.arrayContaining([expect.objectContaining(inProgressFill)]), ); expect(fillView.props.style).toEqual( expect.arrayContaining([expect.objectContaining(fill)]), ); }); it("applies UNSAFE_style.progressBarContainer and step in stepped variation", () => { const progressBarContainer = { height: 12 }; const step = { backgroundColor: "#d1d5db" }; render( , ); const steppedContainer = screen.getByTestId("progressbar-container"); expect(steppedContainer.props.style).toEqual( expect.arrayContaining([expect.objectContaining(progressBarContainer)]), ); // Steps are rendered with testIDs depending on state; collect all steps by known IDs const stepNodes = [ ...screen.getAllByTestId("progress-step-completed"), ...screen.getAllByTestId("progress-step-in-progress"), ...screen.getAllByTestId("progress-step-incomplete"), ]; // At least one step should exist and contain the custom style expect(stepNodes.length).toBeGreaterThan(0); stepNodes.forEach(node => { expect(node.props.style).toEqual( expect.arrayContaining([expect.objectContaining(step)]), ); }); }); });