mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Separate 'download visible' and 'download all' tests
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
7ad7c89061
commit
1e69ea9b27
@ -1,6 +1,6 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`download logs options in pod logs dock tab when opening pod logs renders 1`] = `
|
exports[`download logs options in logs dock tab opening pod logs when logs presented renders 1`] = `
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@ -25,13 +25,24 @@ import reloadLogsInjectable from "../../renderer/components/dock/logs/reload-log
|
|||||||
import setLogTabDataInjectable from "../../renderer/components/dock/logs/set-log-tab-data.injectable";
|
import setLogTabDataInjectable from "../../renderer/components/dock/logs/set-log-tab-data.injectable";
|
||||||
import stopLoadingLogsInjectable from "../../renderer/components/dock/logs/stop-loading-logs.injectable";
|
import stopLoadingLogsInjectable from "../../renderer/components/dock/logs/stop-loading-logs.injectable";
|
||||||
import { dockerPod } from "../../renderer/components/dock/logs/__test__/pod.mock";
|
import { dockerPod } from "../../renderer/components/dock/logs/__test__/pod.mock";
|
||||||
|
import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable";
|
||||||
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
describe("download logs options in pod logs dock tab", () => {
|
describe("download logs options in logs dock tab", () => {
|
||||||
|
let windowDi: DiContainer;
|
||||||
let rendered: RenderResult;
|
let rendered: RenderResult;
|
||||||
let builder: ApplicationBuilder;
|
let builder: ApplicationBuilder;
|
||||||
let openSaveFileDialogMock: jest.MockedFunction<() => void>;
|
let openSaveFileDialogMock: jest.MockedFunction<() => void>;
|
||||||
let callForLogsMock: jest.MockedFunction<CallForLogs>;
|
let callForLogsMock: jest.MockedFunction<CallForLogs>;
|
||||||
|
let getLogsMock: jest.Mock;
|
||||||
|
let showErrorNotificationMock: jest.Mock;
|
||||||
const logs = new Map([["timestamp", "some-logs"]]);
|
const logs = new Map([["timestamp", "some-logs"]]);
|
||||||
|
const pod = dockerPod;;loadLogsInjectable.lifecycle;
|
||||||
|
const container = {
|
||||||
|
name: "docker-exporter",
|
||||||
|
image: "docker.io/prom/node-exporter:v1.0.0-rc.0",
|
||||||
|
imagePullPolicy: "pull",
|
||||||
|
};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const selectedPod = dockerPod;
|
const selectedPod = dockerPod;
|
||||||
@ -41,13 +52,14 @@ describe("download logs options in pod logs dock tab", () => {
|
|||||||
builder.setEnvironmentToClusterFrame();
|
builder.setEnvironmentToClusterFrame();
|
||||||
|
|
||||||
callForLogsMock = jest.fn();
|
callForLogsMock = jest.fn();
|
||||||
|
getLogsMock = jest.fn();
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(callForLogsInjectable, () => callForLogsMock);
|
windowDi.override(callForLogsInjectable, () => callForLogsMock);
|
||||||
|
|
||||||
// Overriding internals of logsViewModelInjectable
|
// Overriding internals of logsViewModelInjectable
|
||||||
windowDi.override(getLogsInjectable, () => () => ["some-logs"]);
|
windowDi.override(getLogsInjectable, () => getLogsMock);
|
||||||
windowDi.override(getLogsWithoutTimestampsInjectable, () => () => ["some-logs"]);
|
windowDi.override(getLogsWithoutTimestampsInjectable, () => getLogsMock);
|
||||||
windowDi.override(getTimestampSplitLogsInjectable, () => () => [...logs]);
|
windowDi.override(getTimestampSplitLogsInjectable, () => () => [...logs]);
|
||||||
windowDi.override(reloadLogsInjectable, () => jest.fn());
|
windowDi.override(reloadLogsInjectable, () => jest.fn());
|
||||||
windowDi.override(getLogTabDataInjectable, () => () => ({
|
windowDi.override(getLogTabDataInjectable, () => () => ({
|
||||||
@ -74,58 +86,51 @@ describe("download logs options in pod logs dock tab", () => {
|
|||||||
|
|
||||||
openSaveFileDialogMock = jest.fn();
|
openSaveFileDialogMock = jest.fn();
|
||||||
windowDi.override(openSaveFileDialogInjectable, () => openSaveFileDialogMock);
|
windowDi.override(openSaveFileDialogInjectable, () => openSaveFileDialogMock);
|
||||||
|
|
||||||
|
showErrorNotificationMock = jest.fn();
|
||||||
|
windowDi.override(showErrorNotificationInjectable, () => showErrorNotificationMock);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when opening pod logs", () => {
|
describe.only("opening pod logs", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
rendered = await builder.render();
|
rendered = await builder.render();
|
||||||
|
windowDi = builder.applicationWindow.only.di;
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
const pod = dockerPod;
|
|
||||||
const createLogsTab = windowDi.inject(createPodLogsTabInjectable);
|
|
||||||
const container = {
|
|
||||||
name: "docker-exporter",
|
|
||||||
image: "docker.io/prom/node-exporter:v1.0.0-rc.0",
|
|
||||||
imagePullPolicy: "pull",
|
|
||||||
};
|
|
||||||
|
|
||||||
const dockStore = windowDi.inject(dockStoreInjectable);
|
const dockStore = windowDi.inject(dockStoreInjectable);
|
||||||
|
|
||||||
dockStore.closeTab("terminal");
|
dockStore.closeTab("terminal");
|
||||||
|
|
||||||
createLogsTab({
|
|
||||||
selectedPod: pod,
|
|
||||||
selectedContainer: container,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
describe("when logs presented", () => {
|
||||||
expect(rendered.baseElement).toMatchSnapshot();
|
beforeEach(async () => {
|
||||||
});
|
const createLogsTab = windowDi.inject(createPodLogsTabInjectable);
|
||||||
|
|
||||||
it("contains download dropdown button", () => {
|
getLogsMock.mockReturnValue(["some-logs"]);
|
||||||
expect(rendered.getByTestId("download-logs-dropdown")).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("when clicking on button", () => {
|
createLogsTab({
|
||||||
beforeEach(() => {
|
selectedPod: pod,
|
||||||
const button = rendered.getByTestId("download-logs-dropdown");
|
selectedContainer: container,
|
||||||
|
});
|
||||||
act(() => button.click());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shows download visible logs menu item", () => {
|
it("renders", () => {
|
||||||
expect(rendered.getByTestId("download-visible-logs")).toBeInTheDocument();
|
expect(rendered.baseElement).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shows download all logs menu item", () => {
|
it("contains download dropdown button", () => {
|
||||||
expect(rendered.getByTestId("download-all-logs")).toBeInTheDocument();
|
expect(rendered.getByTestId("download-logs-dropdown")).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when call for logs resolves with logs", () => {
|
it("dropdown is enabled", () => {
|
||||||
|
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled")
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when clicking on dropdown", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
callForLogsMock.mockResolvedValue("all-logs");
|
const button = rendered.getByTestId("download-logs-dropdown");
|
||||||
|
|
||||||
|
act(() => button.click());
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when selected 'download visible logs'", () => {
|
describe("when selected 'download visible logs'", () => {
|
||||||
@ -135,127 +140,111 @@ describe("download logs options in pod logs dock tab", () => {
|
|||||||
button.click();
|
button.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shows save dialog with proper attributes", () => {
|
it.only("shows save dialog with proper attributes", () => {
|
||||||
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain");
|
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when selected 'download all logs'", () => {
|
describe("when call for all logs resolves with logs", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await act(async () => {
|
callForLogsMock.mockResolvedValue("all-logs");
|
||||||
const button = rendered.getByTestId("download-all-logs");
|
});
|
||||||
|
|
||||||
button.click();
|
describe("when selected 'download all logs'", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await act(async () => {
|
||||||
|
const button = rendered.getByTestId("download-all-logs");
|
||||||
|
|
||||||
|
button.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("logs have been called with query", () => {
|
||||||
|
expect(callForLogsMock).toHaveBeenCalledWith(
|
||||||
|
{ name: "dockerExporter", namespace: "default" },
|
||||||
|
{ "previous": true, "timestamps": false },
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows save dialog with proper attributes", async () => {
|
||||||
|
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "all-logs", "text/plain");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("doesn't block download dropdown for interaction after click", async () => {
|
||||||
|
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("logs have been called with query", () => {
|
describe("blocking user interaction after menu item click", () => {
|
||||||
expect(callForLogsMock).toHaveBeenCalledWith(
|
it("block download dropdown for interaction when selected 'download all logs'", async () => {
|
||||||
{ name: "dockerExporter", namespace: "default" },
|
const downloadMenuItem = rendered.getByTestId("download-all-logs");
|
||||||
{ "previous": true, "timestamps": false },
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("shows save dialog with proper attributes", async () => {
|
act(() => downloadMenuItem.click());
|
||||||
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "all-logs", "text/plain");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("doesn't block download dropdown for interaction after click", async () => {
|
await waitFor(() => {
|
||||||
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
|
expect(rendered.getByTestId("download-logs-dropdown")).toHaveAttribute("disabled");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("blocking user interaction after menu item click", () => {
|
it("doesn't block dropdown for interaction when selected 'download visible logs'", () => {
|
||||||
it("block download dropdown for interaction when selected 'download all logs'", async () => {
|
const downloadMenuItem = rendered.getByTestId("download-visible-logs");
|
||||||
const downloadMenuItem = rendered.getByTestId("download-all-logs");
|
|
||||||
|
|
||||||
act(() => downloadMenuItem.click());
|
act(() => downloadMenuItem.click());
|
||||||
|
|
||||||
await waitFor(() => {
|
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
|
||||||
expect(rendered.getByTestId("download-logs-dropdown")).toHaveAttribute("disabled");
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("doesn't block dropdown for interaction when selected 'download visible logs'", () => {
|
describe("when call for logs resolves with no logs", () => {
|
||||||
const downloadMenuItem = rendered.getByTestId("download-visible-logs");
|
beforeEach(async () => {
|
||||||
|
callForLogsMock.mockResolvedValue("");
|
||||||
|
});
|
||||||
|
|
||||||
act(() => downloadMenuItem.click());
|
describe("when selected 'download all logs'", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await act(async () => {
|
||||||
|
const button = rendered.getByTestId("download-all-logs");
|
||||||
|
|
||||||
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
|
button.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("doesn't show save dialog", () => {
|
||||||
|
expect(openSaveFileDialogMock).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows error notification", () => {
|
||||||
|
expect(showErrorNotificationMock).toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
describe("when call for logs resolves with no logs", () => {
|
describe("when call for logs rejects", () => {
|
||||||
beforeEach(() => {
|
|
||||||
callForLogsMock.mockResolvedValue("");
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("when selected 'download visible logs'", () => {
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const button = rendered.getByTestId("download-visible-logs");
|
callForLogsMock.mockRejectedValue("error");
|
||||||
|
|
||||||
button.click();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shows save dialog with proper attributes", () => {
|
describe("when selected 'download all logs'", () => {
|
||||||
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain");
|
beforeEach(async () => {
|
||||||
});
|
await act(async () => {
|
||||||
});
|
const button = rendered.getByTestId("download-all-logs");
|
||||||
|
|
||||||
describe("when selected 'download all logs'", () => {
|
button.click();
|
||||||
beforeEach(async () => {
|
});
|
||||||
await act(async () => {
|
|
||||||
const button = rendered.getByTestId("download-all-logs");
|
|
||||||
|
|
||||||
button.click();
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
it("doesn't show save dialog", async () => {
|
it("logs have been called", () => {
|
||||||
expect(openSaveFileDialogMock).not.toHaveBeenCalled();
|
expect(callForLogsMock).toHaveBeenCalledWith(
|
||||||
});
|
{ name: "dockerExporter", namespace: "default" },
|
||||||
});
|
{ "previous": true, "timestamps": false },
|
||||||
});
|
);
|
||||||
|
|
||||||
describe("when call for logs rejects", () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
callForLogsMock.mockRejectedValue("error");
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("when selected 'download visible logs'", () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await act(async () => {
|
|
||||||
const button = rendered.getByTestId("download-visible-logs");
|
|
||||||
|
|
||||||
button.click();
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
it("shows save dialog with proper attributes", () => {
|
it("doesn't show save dialog", async () => {
|
||||||
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain");
|
expect(openSaveFileDialogMock).not.toHaveBeenCalled();
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("when selected 'download all logs'", () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await act(async () => {
|
|
||||||
const button = rendered.getByTestId("download-all-logs");
|
|
||||||
|
|
||||||
button.click();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("logs have been called", () => {
|
|
||||||
expect(callForLogsMock).toHaveBeenCalledWith(
|
|
||||||
{ name: "dockerExporter", namespace: "default" },
|
|
||||||
{ "previous": true, "timestamps": false },
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("doesn't show save dialog", async () => {
|
|
||||||
expect(openSaveFileDialogMock).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import type { PodLogsQuery } from "../../../../common/k8s-api/endpoints";
|
|||||||
import type { ResourceDescriptor } from "../../../../common/k8s-api/kube-api";
|
import type { ResourceDescriptor } from "../../../../common/k8s-api/kube-api";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
import openSaveFileDialogInjectable from "../../../utils/save-file.injectable";
|
import openSaveFileDialogInjectable from "../../../utils/save-file.injectable";
|
||||||
|
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
||||||
import callForLogsInjectable from "./call-for-logs.injectable";
|
import callForLogsInjectable from "./call-for-logs.injectable";
|
||||||
|
|
||||||
const downloadAllLogsInjectable = getInjectable({
|
const downloadAllLogsInjectable = getInjectable({
|
||||||
@ -16,6 +17,7 @@ const downloadAllLogsInjectable = getInjectable({
|
|||||||
const callForLogs = di.inject(callForLogsInjectable);
|
const callForLogs = di.inject(callForLogsInjectable);
|
||||||
const openSaveFileDialog = di.inject(openSaveFileDialogInjectable);
|
const openSaveFileDialog = di.inject(openSaveFileDialogInjectable);
|
||||||
const logger = di.inject(loggerInjectable);
|
const logger = di.inject(loggerInjectable);
|
||||||
|
const showErrorNotification = di.inject(showErrorNotificationInjectable);
|
||||||
|
|
||||||
return async (params: ResourceDescriptor, query: PodLogsQuery) => {
|
return async (params: ResourceDescriptor, query: PodLogsQuery) => {
|
||||||
const logs = await callForLogs(params, query).catch(error => {
|
const logs = await callForLogs(params, query).catch(error => {
|
||||||
@ -24,6 +26,8 @@ const downloadAllLogsInjectable = getInjectable({
|
|||||||
|
|
||||||
if (logs) {
|
if (logs) {
|
||||||
openSaveFileDialog(`${params.name}.log`, logs, "text/plain");
|
openSaveFileDialog(`${params.name}.log`, logs, "text/plain");
|
||||||
|
} else {
|
||||||
|
showErrorNotification("No logs to download");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user