1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Testing resolve/reject options for callForLogsInjectable

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2022-08-15 12:14:54 +03:00
parent 16aac15f1a
commit 3b3e6722fe
2 changed files with 101 additions and 40 deletions

View File

@ -814,9 +814,10 @@ exports[`download logs options in pod logs dock tab when opening pod logs render
</span> </span>
</label> </label>
<label <label
class="Checkbox flex align-center show-previous" class="Checkbox flex align-center show-previous checked"
> >
<input <input
checked=""
type="checkbox" type="checkbox"
/> />
<i <i

View File

@ -15,7 +15,7 @@ import type { ApplicationBuilder } from "../../../test-utils/get-application-bui
import { getApplicationBuilder } from "../../../test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../test-utils/get-application-builder";
import dockStoreInjectable from "../../dock/store.injectable"; import dockStoreInjectable from "../../dock/store.injectable";
import areLogsPresentInjectable from "../are-logs-present.injectable"; import areLogsPresentInjectable from "../are-logs-present.injectable";
import callForLogsInjectable from "../call-for-logs.injectable"; import callForLogsInjectable, { CallForLogs } from "../call-for-logs.injectable";
import createPodLogsTabInjectable from "../create-pod-logs-tab.injectable"; import createPodLogsTabInjectable from "../create-pod-logs-tab.injectable";
import getLogTabDataInjectable from "../get-log-tab-data.injectable"; import getLogTabDataInjectable from "../get-log-tab-data.injectable";
import getLogsWithoutTimestampsInjectable from "../get-logs-without-timestamps.injectable"; import getLogsWithoutTimestampsInjectable from "../get-logs-without-timestamps.injectable";
@ -29,8 +29,11 @@ import stopLoadingLogsInjectable from "../stop-loading-logs.injectable";
import { dockerPod } from "./pod.mock"; import { dockerPod } from "./pod.mock";
describe("download logs options in pod logs dock tab", () => { describe("download logs options in pod logs dock tab", () => {
let rendered: RenderResult;
let rendererDi: DiContainer;
let builder: ApplicationBuilder; let builder: ApplicationBuilder;
let openSaveFileDialogMock: jest.MockedFunction<() => void>; let openSaveFileDialogMock: jest.MockedFunction<() => void>;
let callForLogsMock: jest.MockedFunction<CallForLogs>;
const logs = new Map([["timestamp", "some-logs"]]); const logs = new Map([["timestamp", "some-logs"]]);
beforeEach(() => { beforeEach(() => {
@ -40,8 +43,10 @@ describe("download logs options in pod logs dock tab", () => {
builder.setEnvironmentToClusterFrame(); builder.setEnvironmentToClusterFrame();
callForLogsMock = jest.fn();
builder.beforeApplicationStart(({ rendererDi }) => { builder.beforeApplicationStart(({ rendererDi }) => {
rendererDi.override(callForLogsInjectable, () => () => Promise.resolve("all-logs")); rendererDi.override(callForLogsInjectable, () => callForLogsMock);
// Overriding internals of logsViewModelInjectable // Overriding internals of logsViewModelInjectable
rendererDi.override(getLogsInjectable, () => () => ["some-logs"]); rendererDi.override(getLogsInjectable, () => () => ["some-logs"]);
@ -52,7 +57,7 @@ describe("download logs options in pod logs dock tab", () => {
selectedPodId: selectedPod.getId(), selectedPodId: selectedPod.getId(),
selectedContainer: selectedPod.getContainers()[0].name, selectedContainer: selectedPod.getContainers()[0].name,
namespace: "default", namespace: "default",
showPrevious: false, showPrevious: true,
showTimestamps: false, showTimestamps: false,
})); }));
rendererDi.override(setLogTabDataInjectable, () => jest.fn()); rendererDi.override(setLogTabDataInjectable, () => jest.fn());
@ -72,9 +77,6 @@ describe("download logs options in pod logs dock tab", () => {
}); });
describe("when opening pod logs", () => { describe("when opening pod logs", () => {
let rendered: RenderResult;
let rendererDi: DiContainer;
beforeEach(async () => { beforeEach(async () => {
rendered = await builder.render(); rendered = await builder.render();
rendererDi = builder.dis.rendererDi; rendererDi = builder.dis.rendererDi;
@ -120,47 +122,105 @@ describe("download logs options in pod logs dock tab", () => {
expect(rendered.getByTestId("download-all-logs")).toBeInTheDocument(); expect(rendered.getByTestId("download-all-logs")).toBeInTheDocument();
}); });
it("when selected 'download visible logs', shows save dialog with proper attributes", async () => { describe("when call for logs resolves with logs", () => {
beforeEach(() => {
callForLogsMock.mockResolvedValue("all-logs");
})
describe("when selected 'download visible logs'", () => {
beforeEach(() => {
const button = rendered.getByTestId("download-visible-logs");
button.click();
});
it("shows save dialog with proper attributes", () => {
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain")
});
})
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")
});
})
describe("blocking user interaction", () => {
it("block download dropdown for interaction when selected 'download all logs'", async () => {
const downloadMenuItem = rendered.getByTestId("download-all-logs");
act(() => downloadMenuItem.click());
await waitFor(() => {
expect(rendered.getByTestId("download-logs-dropdown")).toHaveAttribute("disabled")
})
});
it("doesn't block dropdown for interaction when selected 'download visible logs'", () => {
const downloadMenuItem = rendered.getByTestId("download-visible-logs"); const downloadMenuItem = rendered.getByTestId("download-visible-logs");
downloadMenuItem.click(); act(() => downloadMenuItem.click());
await waitFor(() => expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled")
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain"), })
); })
})
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("when selected 'download all logs', shows save dialog with proper attributes", async () => { it("shows save dialog with proper attributes", () => {
const downloadMenuItem = rendered.getByTestId("download-all-logs"); expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "some-logs", "text/plain")
});
})
downloadMenuItem.click(); describe("when selected 'download all logs'", () => {
beforeEach(async () => {
await waitFor(() => await act(async () => {
expect(openSaveFileDialogMock).toHaveBeenCalledWith("dockerExporter.log", "all-logs", "text/plain"), const button = rendered.getByTestId("download-all-logs");
); button.click();
});
}); });
it("when selected 'download all logs', block download dropdown for interaction", async () => { it("logs have been called", () => {
const downloadMenuItem = rendered.getByTestId("download-all-logs"); expect(callForLogsMock).toHaveBeenCalledWith(
{ name: "dockerExporter", namespace: "default" },
downloadMenuItem.click(); { "previous": true, "timestamps": false }
await waitFor(() =>
expect(rendered.getByTestId("download-logs-dropdown")).toHaveAttribute("disabled"),
); );
})
it("doesn't show save dialog", async () => {
expect(openSaveFileDialogMock).not.toHaveBeenCalled()
}); });
})
it("when save file dialog opens, restore download button for interaction", async () => { })
const downloadMenuItem = rendered.getByTestId("download-all-logs");
downloadMenuItem.click();
await waitFor(() =>
expect(openSaveFileDialogMock).toHaveBeenCalled(),
);
expect(rendered.getByTestId("download-logs-dropdown")).not.toHaveAttribute("disabled");
});
}); });
}); });
}); });