import { render, fireEvent } from "@testing-library/react"; import { MockThemeContext } from "__fixtures__/Theme"; import { useFetchGetMock } from "__fixtures__/useFetchGet"; import { Settings } from "Stores/Settings"; import { ThemeContext } from "Components/Theme"; import { AlertGroupSortConfiguration } from "./AlertGroupSortConfiguration"; let settingsStore: Settings; beforeEach(() => { settingsStore = new Settings(null); }); afterEach(() => { jest.restoreAllMocks(); }); const renderConfiguration = () => { return render( , ); }; const expandSortLabelSuggestions = () => { settingsStore.gridConfig.setSortOrder("label"); const view = renderConfiguration(); const input = view.container.querySelector( "input#react-select-configuration-sort-label-input", ); fireEvent.change(input!, { target: { value: "c" } }); return view; }; describe("", () => { it("matches snapshot with default values", () => { const { asFragment } = renderConfiguration(); expect(asFragment()).toMatchSnapshot(); }); it("invalid sortOrder value is reset on mount", () => { settingsStore.gridConfig.setSortOrder("badValue" as any); renderConfiguration(); expect(settingsStore.gridConfig.config.sortOrder).toBe( settingsStore.gridConfig.options.default.value, ); }); it("changing sort order value update settingsStore", () => { useFetchGetMock.fetch.setMockedData({ response: null, error: "fake error", isLoading: false, isRetrying: false, retryCount: 0, get: jest.fn(), cancelGet: jest.fn(), }); settingsStore.gridConfig.setSortOrder("label"); expect(settingsStore.gridConfig.config.sortOrder).toBe( settingsStore.gridConfig.options.label.value, ); const { container } = renderConfiguration(); const input = container.querySelector( "input#react-select-configuration-sort-order-input", ); fireEvent.change(input!, { target: { value: " " } }); const options = container.querySelectorAll("div.react-select__option"); fireEvent.click(options[2]); expect(settingsStore.gridConfig.config.sortOrder).toBe( settingsStore.gridConfig.options.startsAt.value, ); }); it("reverse checkbox is not rendered when sort order is == 'default'", () => { settingsStore.gridConfig.setSortOrder("default"); const { container } = renderConfiguration(); const labelSelect = container.querySelector("#configuration-sort-reverse"); expect(labelSelect).not.toBeInTheDocument(); }); it("reverse checkbox is not rendered when sort order is == 'disabled'", () => { settingsStore.gridConfig.setSortOrder("disabled"); const { container } = renderConfiguration(); const labelSelect = container.querySelector("#configuration-sort-reverse"); expect(labelSelect).not.toBeInTheDocument(); }); it("reverse checkbox is rendered when sort order is = 'startsAt'", () => { settingsStore.gridConfig.setSortOrder("startsAt"); const { container } = renderConfiguration(); const labelSelect = container.querySelector("#configuration-sort-reverse"); expect(labelSelect).toBeInTheDocument(); }); it("reverse checkbox is rendered when sort order is = 'label'", () => { settingsStore.gridConfig.setSortOrder("label"); const { container } = renderConfiguration(); const labelSelect = container.querySelector("#configuration-sort-reverse"); expect(labelSelect).toBeInTheDocument(); }); it("label select is not rendered when sort order is != 'label'", () => { settingsStore.gridConfig.setSortOrder("disabled"); const { container } = renderConfiguration(); const labelSelect = container.querySelector( "input#react-select-configuration-sort-label-input", ); expect(labelSelect).not.toBeInTheDocument(); }); it("label select is rendered when sort order is == 'label'", () => { settingsStore.gridConfig.setSortOrder("label"); const { container } = renderConfiguration(); const labelSelect = container.querySelector( "input#react-select-configuration-sort-label-input", ); expect(labelSelect).toBeInTheDocument(); }); it("label select renders suggestions on click", () => { const { container } = expandSortLabelSuggestions(); const options = container.querySelectorAll("div.react-select__option"); expect(options).toHaveLength(3); expect(options[0].textContent).toBe("cluster"); expect(options[1].textContent).toBe("instance"); expect(options[2].textContent).toBe("New label: c"); }); it("label select handles fetch errors", () => { useFetchGetMock.fetch.setMockedData({ response: null, error: "fake error", isLoading: false, isRetrying: false, retryCount: 0, get: jest.fn(), cancelGet: jest.fn(), }); const { container } = expandSortLabelSuggestions(); const options = container.querySelectorAll("div.react-select__option"); expect(options).toHaveLength(1); expect(options[0].textContent).toBe("New label: c"); }); it("clicking on a label option updates settingsStore", () => { expect(settingsStore.gridConfig.config.sortLabel).toBeNull(); const { container } = expandSortLabelSuggestions(); const options = container.querySelectorAll("div.react-select__option"); fireEvent.click(options[1]); expect(settingsStore.gridConfig.config.sortLabel).toBe("instance"); }); it("clicking on the 'reverse' checkbox updates settingsStore", () => { settingsStore.gridConfig.setSortOrder("label"); settingsStore.gridConfig.setSortReverse(false); const { container } = renderConfiguration(); const checkbox = container.querySelector("#configuration-sort-reverse"); expect(settingsStore.gridConfig.config.reverseSort).toBe(false); fireEvent.click(checkbox!); expect(settingsStore.gridConfig.config.reverseSort).toBe(true); }); });