/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
import React from "react";
import { render, within } from "@testing-library/react";
import Tabs from "../Tabs";
import { MemoryRouter } from "react-router-dom";
import { MockedObserver, traceMethodCalls, IntersectionObserverCB } from "../../testUtils";
describe("Tabs tests", () => {
let observer: any;
let mockedObserverCalls: { [k: string]: any } = {};
beforeEach(() => {
Object.defineProperty(window, "IntersectionObserver", {
writable: true,
value: jest.fn().mockImplementation(function TrackMock(
cb: IntersectionObserverCB,
// eslint-disable-next-line no-undef
options: IntersectionObserverInit,
) {
observer = traceMethodCalls(new MockedObserver(cb, options), mockedObserverCalls);
return observer;
}),
});
});
afterEach(() => {
observer = null;
mockedObserverCalls = {};
});
test("renders the Tabs component", async () => {
const wrapper = render(
Tab 1
Tab 2
,
);
expect(wrapper.container).toMatchSnapshot();
});
test("renders the Tabs component with default tab 2 selected", async () => {
const wrapper = render(
Tab 1
Tab 2
,
);
expect(wrapper.container).toMatchSnapshot();
});
test("renders the tabs", async () => {
const { getAllByRole } = render(
Tab 1
Tab 2
,
{
wrapper: MemoryRouter,
},
);
const listItems = getAllByRole("tab");
expect(listItems).toHaveLength(2);
listItems.forEach((item, index) => {
const { getByText } = within(item);
expect(getByText(`Tab ${index + 1}`)).toBeInTheDocument();
});
});
});