Fix tests mocking showAndLog functions

This commit is contained in:
Koen Vlaswinkel
2023-06-13 12:09:43 +02:00
parent fcbe3bea1e
commit 108d5268b0
7 changed files with 36 additions and 60 deletions

View File

@@ -8,6 +8,7 @@ import { testCredentialsWithStub } from "../factories/authentication";
import { Credentials } from "../../src/common/authentication";
import { AppCommandManager } from "../../src/common/commands";
import { createMockCommandManager } from "./commandsMock";
import { NotificationLogger } from "../../src/common";
export function createMockApp({
extensionPath = "/mock/extension/path",
@@ -18,6 +19,7 @@ export function createMockApp({
credentials = testCredentialsWithStub(),
commands = createMockCommandManager(),
environment = createMockEnvironmentContext(),
logger = createMockLogger(),
}: {
extensionPath?: string;
workspaceStoragePath?: string;
@@ -27,10 +29,11 @@ export function createMockApp({
credentials?: Credentials;
commands?: AppCommandManager;
environment?: EnvironmentContext;
logger?: NotificationLogger;
}): App {
return {
mode: AppMode.Test,
logger: createMockLogger(),
logger,
subscriptions: [],
extensionPath,
workspaceStoragePath,

View File

@@ -23,8 +23,8 @@ import {
import { createMockVariantAnalysis } from "../../../factories/variant-analysis/shared/variant-analysis";
import { createMockApp } from "../../../__mocks__/appMock";
import { createMockCommandManager } from "../../../__mocks__/commandsMock";
import * as log from "../../../../src/common/logging";
import { showAndLogWarningMessage } from "../../../../src/common/logging";
import { NotificationLogger } from "../../../../src/common/logging";
import { createMockLogger } from "../../../__mocks__/loggerMock";
jest.setTimeout(60_000);
@@ -39,16 +39,21 @@ describe("Variant Analysis Monitor", () => {
const onVariantAnalysisChangeSpy = jest.fn();
const mockEecuteCommand = jest.fn();
let logger: NotificationLogger;
beforeEach(async () => {
variantAnalysis = createMockVariantAnalysis({});
shouldCancelMonitor = jest.fn();
logger = createMockLogger();
variantAnalysisMonitor = new VariantAnalysisMonitor(
createMockApp({
commands: createMockCommandManager({
executeCommand: mockEecuteCommand,
}),
logger,
}),
shouldCancelMonitor,
);
@@ -200,17 +205,9 @@ describe("Variant Analysis Monitor", () => {
});
describe("when some responses fail", () => {
let showAndLogWarningMessageSpy: jest.SpiedFunction<
typeof showAndLogWarningMessage
>;
let scannedRepos: ApiVariantAnalysisScannedRepository[];
beforeEach(async () => {
showAndLogWarningMessageSpy = jest
.spyOn(log, "showAndLogWarningMessage")
.mockResolvedValue(undefined);
scannedRepos = createMockScannedRepos([
"pending",
"in_progress",
@@ -266,20 +263,20 @@ describe("Variant Analysis Monitor", () => {
it("should only trigger the warning once per error", async () => {
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
expect(showAndLogWarningMessageSpy).toBeCalledTimes(4);
expect(showAndLogWarningMessageSpy).toHaveBeenNthCalledWith(
expect(logger.showWarningMessage).toBeCalledTimes(4);
expect(logger.showWarningMessage).toHaveBeenNthCalledWith(
1,
expect.stringMatching(/No internet connection/),
);
expect(showAndLogWarningMessageSpy).toHaveBeenNthCalledWith(
expect(logger.showWarningMessage).toHaveBeenNthCalledWith(
2,
expect.stringMatching(/My different error/),
);
expect(showAndLogWarningMessageSpy).toHaveBeenNthCalledWith(
expect(logger.showWarningMessage).toHaveBeenNthCalledWith(
3,
expect.stringMatching(/My different error/),
);
expect(showAndLogWarningMessageSpy).toHaveBeenNthCalledWith(
expect(logger.showWarningMessage).toHaveBeenNthCalledWith(
4,
expect.stringMatching(/Another different error/),
);
@@ -301,15 +298,7 @@ describe("Variant Analysis Monitor", () => {
});
describe("when a 404 is returned", () => {
let showAndLogWarningMessageSpy: jest.SpiedFunction<
typeof showAndLogWarningMessage
>;
beforeEach(async () => {
showAndLogWarningMessageSpy = jest
.spyOn(log, "showAndLogWarningMessage")
.mockResolvedValue(undefined);
const scannedRepos = createMockScannedRepos([
"pending",
"in_progress",
@@ -342,8 +331,8 @@ describe("Variant Analysis Monitor", () => {
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
expect(mockGetVariantAnalysis).toHaveBeenCalledTimes(2);
expect(showAndLogWarningMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogWarningMessageSpy).toHaveBeenCalledWith(
expect(logger.showWarningMessage).toHaveBeenCalledTimes(1);
expect(logger.showWarningMessage).toHaveBeenCalledWith(
expect.stringMatching(/not found/i),
);
});

View File

@@ -4,7 +4,7 @@ import { join } from "path";
import { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
import { getErrorMessage } from "../../../../src/pure/helpers-pure";
import * as log from "../../../../src/common/logging";
import * as log from "../../../../src/common/logging/notifications";
import * as vscodeLog from "../../../../src/common/vscode/logging";
import {
handleDownloadPacks,
@@ -53,6 +53,7 @@ describe("Packaging commands", () => {
await handleDownloadPacks(cli, progress);
expect(showAndLogExceptionWithTelemetrySpy).not.toHaveBeenCalled();
expect(showAndLogInformationMessageSpy).toHaveBeenCalledWith(
expect.anything(),
expect.stringContaining("Finished downloading packs."),
);
});
@@ -66,6 +67,7 @@ describe("Packaging commands", () => {
await handleDownloadPacks(cli, progress);
expect(showAndLogExceptionWithTelemetrySpy).not.toHaveBeenCalled();
expect(showAndLogInformationMessageSpy).toHaveBeenCalledWith(
expect.anything(),
expect.stringContaining("Finished downloading packs."),
);
});
@@ -97,6 +99,7 @@ describe("Packaging commands", () => {
await handleInstallPackDependencies(cli, progress);
expect(showAndLogInformationMessageSpy).toHaveBeenCalledWith(
expect.anything(),
expect.stringContaining("Finished installing pack dependencies."),
);
});

View File

@@ -1,7 +1,7 @@
import * as fetch from "node-fetch";
import { Range } from "semver";
import * as log from "../../../../src/common/logging";
import * as log from "../../../../src/common/logging/notifications";
import { extLogger } from "../../../../src/common";
import * as fs from "fs-extra";
import * as path from "path";

View File

@@ -7,11 +7,9 @@ import {
QlpacksInfo,
ResolveExtensionsResult,
} from "../../../../src/codeql-cli/cli";
import * as log from "../../../../src/common/logging";
import { pickExtensionPackModelFile } from "../../../../src/data-extensions-editor/extension-pack-picker";
import { ExtensionPack } from "../../../../src/data-extensions-editor/shared/extension-pack";
import { showAndLogErrorMessage } from "../../../../src/common/logging";
import { createMockLogger } from "../../../__mocks__/loggerMock";
describe("pickExtensionPackModelFile", () => {
@@ -34,9 +32,6 @@ describe("pickExtensionPackModelFile", () => {
const progress = jest.fn();
let showQuickPickSpy: jest.SpiedFunction<typeof window.showQuickPick>;
let showInputBoxSpy: jest.SpiedFunction<typeof window.showInputBox>;
let showAndLogErrorMessageSpy: jest.SpiedFunction<
typeof showAndLogErrorMessage
>;
const logger = createMockLogger();
@@ -82,11 +77,6 @@ describe("pickExtensionPackModelFile", () => {
showInputBoxSpy = jest
.spyOn(window, "showInputBox")
.mockRejectedValue(new Error("Unexpected call to showInputBox"));
showAndLogErrorMessageSpy = jest
.spyOn(log, "showAndLogErrorMessage")
.mockImplementation((msg) => {
throw new Error(`Unexpected call to showAndLogErrorMessage: ${msg}`);
});
});
it("allows choosing an existing extension pack and model file", async () => {
@@ -418,8 +408,6 @@ describe("pickExtensionPackModelFile", () => {
});
it("shows an error when an extension pack resolves to more than 1 location", async () => {
showAndLogErrorMessageSpy.mockResolvedValue(undefined);
const cliServer = mockCliServer(
{
"my-extension-pack": [
@@ -441,10 +429,9 @@ describe("pickExtensionPackModelFile", () => {
token,
),
).toEqual(undefined);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledWith(
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
expect.stringMatching(/resolves to multiple paths/),
expect.anything(),
);
expect(showQuickPickSpy).toHaveBeenCalledTimes(1);
expect(showQuickPickSpy).toHaveBeenCalledWith(
@@ -547,7 +534,6 @@ describe("pickExtensionPackModelFile", () => {
);
showQuickPickSpy.mockResolvedValueOnce(undefined);
showAndLogErrorMessageSpy.mockResolvedValue(undefined);
expect(
await pickExtensionPackModelFile(
@@ -572,10 +558,9 @@ describe("pickExtensionPackModelFile", () => {
token,
);
expect(showInputBoxSpy).not.toHaveBeenCalled();
expect(showAndLogErrorMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledWith(
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
expect.stringMatching(/my-extension-pack/),
expect.anything(),
);
expect(cliServer.resolveQlpacks).toHaveBeenCalled();
expect(cliServer.resolveExtensions).not.toHaveBeenCalled();
@@ -596,7 +581,6 @@ describe("pickExtensionPackModelFile", () => {
await outputFile(join(tmpDir.path, "codeql-pack.yml"), dumpYaml("java"));
showQuickPickSpy.mockResolvedValueOnce(undefined);
showAndLogErrorMessageSpy.mockResolvedValue(undefined);
expect(
await pickExtensionPackModelFile(
@@ -621,10 +605,9 @@ describe("pickExtensionPackModelFile", () => {
token,
);
expect(showInputBoxSpy).not.toHaveBeenCalled();
expect(showAndLogErrorMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledWith(
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
expect.stringMatching(/my-extension-pack/),
expect.anything(),
);
expect(cliServer.resolveQlpacks).toHaveBeenCalled();
expect(cliServer.resolveExtensions).not.toHaveBeenCalled();
@@ -655,7 +638,6 @@ describe("pickExtensionPackModelFile", () => {
);
showQuickPickSpy.mockResolvedValueOnce(undefined);
showAndLogErrorMessageSpy.mockResolvedValue(undefined);
expect(
await pickExtensionPackModelFile(
@@ -680,10 +662,9 @@ describe("pickExtensionPackModelFile", () => {
token,
);
expect(showInputBoxSpy).not.toHaveBeenCalled();
expect(showAndLogErrorMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledWith(
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
expect.stringMatching(/my-extension-pack/),
expect.anything(),
);
expect(cliServer.resolveQlpacks).toHaveBeenCalled();
expect(cliServer.resolveExtensions).not.toHaveBeenCalled();
@@ -717,7 +698,6 @@ describe("pickExtensionPackModelFile", () => {
);
showQuickPickSpy.mockResolvedValueOnce(undefined);
showAndLogErrorMessageSpy.mockResolvedValue(undefined);
expect(
await pickExtensionPackModelFile(
@@ -742,10 +722,9 @@ describe("pickExtensionPackModelFile", () => {
token,
);
expect(showInputBoxSpy).not.toHaveBeenCalled();
expect(showAndLogErrorMessageSpy).toHaveBeenCalledTimes(1);
expect(showAndLogErrorMessageSpy).toHaveBeenCalledWith(
expect(logger.showErrorMessage).toHaveBeenCalledTimes(1);
expect(logger.showErrorMessage).toHaveBeenCalledWith(
expect.stringMatching(/my-extension-pack/),
expect.anything(),
);
expect(cliServer.resolveQlpacks).toHaveBeenCalled();
expect(cliServer.resolveExtensions).not.toHaveBeenCalled();

View File

@@ -152,6 +152,7 @@ describe("readQueryResults", () => {
expect(await readQueryResults(options)).toBeUndefined();
expect(showAndLogExceptionWithTelemetrySpy).toHaveBeenCalledWith(
expect.anything(),
expect.any(RedactableError),
);
});
@@ -184,6 +185,7 @@ describe("readQueryResults", () => {
expect(await readQueryResults(options)).toBeUndefined();
expect(showAndLogExceptionWithTelemetrySpy).toHaveBeenCalledWith(
expect.anything(),
expect.any(RedactableError),
);
});

View File

@@ -3,7 +3,7 @@ import * as fs from "fs-extra";
import { getErrorMessage } from "../../../../../src/pure/helpers-pure";
import * as log from "../../../../../src/common/logging";
import * as log from "../../../../../src/common/logging/notifications";
import * as workspaceFolders from "../../../../../src/common/vscode/workspace-folders";
import * as qlpack from "../../../../../src/databases/qlpack";
import {