/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; import { screen } from "@testing-library/react"; import { Pod } from "../../../../../common/k8s-api/endpoints"; import { dockerPod } from "./pod.mock"; import { getDiForUnitTesting } from "../../../../getDiForUnitTesting"; import type { DiRender } from "../../../test-utils/renderFor"; import { renderFor } from "../../../test-utils/renderFor"; import { LogTabViewModel, LogTabViewModelDependencies } from "../logs-view-model"; import type { TabId } from "../../dock/store"; import { LogSearch } from "../search"; import userEvent from "@testing-library/user-event"; import { SearchStore } from "../../../../search-store/search-store"; function mockLogTabViewModel(tabId: TabId, deps: Partial): LogTabViewModel { return new LogTabViewModel(tabId, { getLogs: jest.fn(), getLogsWithoutTimestamps: jest.fn(), getTimestampSplitLogs: jest.fn(), getLogTabData: jest.fn(), setLogTabData: jest.fn(), loadLogs: jest.fn(), reloadLogs: jest.fn(), updateTabName: jest.fn(), stopLoadingLogs: jest.fn(), getPodById: jest.fn(), getPodsByOwnerId: jest.fn(), createSearchStore: () => new SearchStore(), ...deps, }); } const getOnePodViewModel = (tabId: TabId, deps: Partial = {}): LogTabViewModel => { const selectedPod = new Pod(dockerPod); return mockLogTabViewModel(tabId, { getLogTabData: () => ({ selectedPodId: selectedPod.getId(), selectedContainer: selectedPod.getContainers()[0].name, namespace: selectedPod.getNs(), showPrevious: false, showTimestamps: false, }), getPodById: (id) => { if (id === selectedPod.getId()) { return selectedPod; } return undefined; }, ...deps, }); }; describe("LogSearch tests", () => { let render: DiRender; beforeEach(async () => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); render = renderFor(di); await di.runSetups(); }); it("renders w/o errors", () => { const model = getOnePodViewModel("foobar"); const { container } = render( , ); expect(container).toBeInstanceOf(HTMLElement); }); it("should scroll to new active overlay when clicking the previous button", async () => { const scrollToOverlay = jest.fn(); const model = getOnePodViewModel("foobar", { getLogsWithoutTimestamps: () => [ "hello", "world", ], }); render( , ); userEvent.click(await screen.findByPlaceholderText("Search...")); userEvent.keyboard("o"); userEvent.click(await screen.findByText("keyboard_arrow_up")); expect(scrollToOverlay).toBeCalled(); }); });