/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React from "react"; import "@testing-library/jest-dom/extend-expect"; import { render, waitFor } from "@testing-library/react"; import AssociatedComponentsModal, { AssociatedComponentsModalProps } from "./AssociatedComponentsModal"; import { ServicesContext } from "../../../../services"; import { CoreServicesContext } from "../../../../components/core_services"; import { browserServicesMock, coreServicesMock } from "../../../../../test/mocks"; import userEvent from "@testing-library/user-event"; function renderWithServices(props: AssociatedComponentsModalProps) { return { ...render( ), }; } describe(" spec", () => { it("renders with empty", async () => { renderWithServices({ template: { name: "test_template", index_patterns: "['*']", order: 0, composed_of: "", }, renderProps() { return <>; }, }); expect(document.body.children).toMatchSnapshot(); }); it("renders the component", async () => { let time = 0; browserServicesMock.commonService.apiCaller = jest.fn( async (payload): Promise => { if (payload.data?.path?.startsWith("/_component_template/")) { return { ok: true, response: {}, }; } else if (payload.data?.path?.startsWith("/_index_template")) { if (payload.data?.method === "POST") { time++; return { ok: time !== 1, error: "error", }; } return { ok: true, response: { index_templates: [ { name: "test_template", index_template: { composed_of: ["test_component_template"], }, }, ], }, }; } return { ok: true, response: {} }; } ); const unlinkHandlerMock = jest.fn(); const { findByText, findByTestId, getByTestId, queryByText } = renderWithServices({ template: { name: "test_template", index_patterns: "['*']", order: 0, composed_of: "", templateDetail: { composed_of: ["test_component_template"], template: {}, name: "test_template", version: 0, priority: 0, index_patterns: ["*"], }, }, renderProps: ({ setVisible }) => ( ), onUnlink: unlinkHandlerMock, }); await findByTestId("TestBtn"); await userEvent.click(getByTestId("TestBtn")); await findByText("Associated component templates"); expect(document.body.children).toMatchSnapshot(); await userEvent.click(document.querySelector(`[aria-label="Unlink test_component_template?"]`) as Element); await findByText("Unlink from test_template?"); await userEvent.click(getByTestId("Unlink from test_template?-confirm")); await waitFor(() => { expect(browserServicesMock.commonService.apiCaller).toBeCalledTimes(2); expect(coreServicesMock.notifications.toasts.addDanger).toBeCalledWith("error"); expect(unlinkHandlerMock).toBeCalledTimes(0); }); await userEvent.click(getByTestId("Unlink from test_template?-confirm")); await waitFor(() => { expect(browserServicesMock.commonService.apiCaller).toBeCalledTimes(4); expect(coreServicesMock.notifications.toasts.addSuccess).toBeCalledWith( "test_component_template has been successfully unlinked from test_template." ); expect(unlinkHandlerMock).toBeCalledWith("test_component_template"); }); await userEvent.click(getByTestId("euiFlyoutCloseButton")); await waitFor(() => { expect(queryByText("Associated component templates")).toBeNull(); }); }); });