Use mocks instead of spies in tests

This commit is contained in:
Robert
2024-03-07 15:05:32 +00:00
parent ec42728367
commit 55b9b2e891
3 changed files with 46 additions and 72 deletions

View File

@@ -23,7 +23,7 @@ import type {
DatabaseManager,
FullDatabaseOptions,
} from "../../../../src/databases/local-databases";
import { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
import type { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
import { createMockDB } from "../../../factories/databases/databases";
import { asError } from "../../../../src/common/helpers-pure";
import { Setting } from "../../../../src/config";
@@ -56,9 +56,7 @@ describe("SkeletonQueryWizard", () => {
let createExampleQlFileSpy: jest.SpiedFunction<
typeof QlPackGenerator.prototype.createExampleQlFile
>;
let promptImportGithubDatabaseSpy: jest.SpiedFunction<
DatabaseFetcher["promptImportGithubDatabase"]
>;
let promptImportGithubDatabaseMock: jest.Mock<DatabaseItem | undefined>;
let openTextDocumentSpy: jest.SpiedFunction<
typeof workspace.openTextDocument
>;
@@ -113,12 +111,10 @@ describe("SkeletonQueryWizard", () => {
},
] as WorkspaceFolder[]);
databaseFetcher = new DatabaseFetcher(
mockApp,
mockDatabaseManager,
storagePath,
mockCli,
);
promptImportGithubDatabaseMock = jest.fn().mockReturnValue(undefined);
databaseFetcher = mockedObject<DatabaseFetcher>({
promptImportGithubDatabase: promptImportGithubDatabaseMock,
});
quickPickSpy = jest.spyOn(window, "showQuickPick").mockResolvedValueOnce(
mockedQuickPickItem({
@@ -138,9 +134,6 @@ describe("SkeletonQueryWizard", () => {
createExampleQlFileSpy = jest
.spyOn(QlPackGenerator.prototype, "createExampleQlFile")
.mockResolvedValue(undefined);
promptImportGithubDatabaseSpy = jest
.spyOn(databaseFetcher, "promptImportGithubDatabase")
.mockResolvedValue(undefined);
openTextDocumentSpy = jest
.spyOn(workspace, "openTextDocument")
.mockResolvedValue({} as TextDocument);
@@ -203,7 +196,7 @@ describe("SkeletonQueryWizard", () => {
title: "Download database",
}),
);
expect(promptImportGithubDatabaseSpy).not.toHaveBeenCalled();
expect(promptImportGithubDatabaseMock).not.toHaveBeenCalled();
});
it("should download database for selected language when selecting download in prompt", async () => {
@@ -220,7 +213,7 @@ describe("SkeletonQueryWizard", () => {
await wizard.execute();
await wizard.waitForDownload();
expect(promptImportGithubDatabaseSpy).toHaveBeenCalled();
expect(promptImportGithubDatabaseMock).toHaveBeenCalled();
});
it("should open the query file", async () => {
@@ -329,7 +322,7 @@ describe("SkeletonQueryWizard", () => {
it("should not download a new database for language", async () => {
await wizard.execute();
expect(promptImportGithubDatabaseSpy).not.toHaveBeenCalled();
expect(promptImportGithubDatabaseMock).not.toHaveBeenCalled();
});
it("should not select the database", async () => {
@@ -378,7 +371,7 @@ describe("SkeletonQueryWizard", () => {
it("should not download a new database for language", async () => {
await wizard.execute();
expect(promptImportGithubDatabaseSpy).not.toHaveBeenCalled();
expect(promptImportGithubDatabaseMock).not.toHaveBeenCalled();
});
it("should select an existing database", async () => {
@@ -426,7 +419,7 @@ describe("SkeletonQueryWizard", () => {
await wizard.execute();
await wizard.waitForDownload();
expect(promptImportGithubDatabaseSpy).toHaveBeenCalled();
expect(promptImportGithubDatabaseMock).toHaveBeenCalled();
});
});
});

View File

@@ -10,10 +10,9 @@ import {
askForGitHubDatabaseDownload,
downloadDatabaseFromGitHub,
} from "../../../../../src/databases/github-databases/download";
import type { DatabaseManager } from "../../../../../src/databases/local-databases";
import type { DatabaseItem } from "../../../../../src/databases/local-databases";
import type { GitHubDatabaseConfig } from "../../../../../src/config";
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
import { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
import type { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
import * as dialog from "../../../../../src/common/vscode/dialog";
import type { CodeqlDatabase } from "../../../../../src/databases/github-databases/api";
import { createMockApp } from "../../../../__mocks__/appMock";
@@ -96,11 +95,8 @@ describe("downloadDatabaseFromGitHub", () => {
let octokit: Octokit;
const owner = "github";
const repo = "codeql";
let databaseManager: DatabaseManager;
let databaseFetcher: DatabaseFetcher;
const storagePath = "/a/b/c/d";
let cliServer: CodeQLCliServer;
const app = createMockApp();
let databases = [
@@ -117,20 +113,15 @@ describe("downloadDatabaseFromGitHub", () => {
];
let showQuickPickSpy: jest.SpiedFunction<typeof window.showQuickPick>;
let downloadGitHubDatabaseFromUrlSpy: jest.SpiedFunction<
DatabaseFetcher["downloadGitHubDatabaseFromUrl"]
>;
let downloadGitHubDatabaseFromUrlMock: jest.Mock<DatabaseItem | undefined>;
beforeEach(() => {
octokit = mockedObject<Octokit>({});
databaseManager = mockedObject<DatabaseManager>({});
cliServer = mockedObject<CodeQLCliServer>({});
databaseFetcher = new DatabaseFetcher(
app,
databaseManager,
storagePath,
cliServer,
);
downloadGitHubDatabaseFromUrlMock = jest.fn().mockReturnValue(undefined);
databaseFetcher = mockedObject<DatabaseFetcher>({
downloadGitHubDatabaseFromUrl: downloadGitHubDatabaseFromUrlMock,
});
showQuickPickSpy = jest.spyOn(window, "showQuickPick").mockResolvedValue(
mockedQuickPickItem([
@@ -139,9 +130,6 @@ describe("downloadDatabaseFromGitHub", () => {
}),
]),
);
downloadGitHubDatabaseFromUrlSpy = jest
.spyOn(databaseFetcher, "downloadGitHubDatabaseFromUrl")
.mockResolvedValue(undefined);
});
it("downloads the database", async () => {
@@ -154,8 +142,8 @@ describe("downloadDatabaseFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
databases[0].url,
databases[0].id,
databases[0].created_at,
@@ -213,8 +201,8 @@ describe("downloadDatabaseFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
databases[1].url,
databases[1].id,
databases[1].created_at,
@@ -264,8 +252,8 @@ describe("downloadDatabaseFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(2);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(2);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
databases[0].url,
databases[0].id,
databases[0].created_at,
@@ -277,7 +265,7 @@ describe("downloadDatabaseFromGitHub", () => {
true,
false,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
databases[1].url,
databases[1].id,
databases[1].created_at,
@@ -321,7 +309,7 @@ describe("downloadDatabaseFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).not.toHaveBeenCalled();
expect(downloadGitHubDatabaseFromUrlMock).not.toHaveBeenCalled();
});
});
});

View File

@@ -8,10 +8,12 @@ import {
mockedQuickPickItem,
} from "../../../utils/mocking.helpers";
import type { CodeqlDatabase } from "../../../../../src/databases/github-databases/api";
import type { DatabaseManager } from "../../../../../src/databases/local-databases";
import type {
DatabaseItem,
DatabaseManager,
} from "../../../../../src/databases/local-databases";
import type { GitHubDatabaseConfig } from "../../../../../src/config";
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
import { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
import type { DatabaseFetcher } from "../../../../../src/databases/database-fetcher";
import * as dialog from "../../../../../src/common/vscode/dialog";
import type { DatabaseUpdate } from "../../../../../src/databases/github-databases/updates";
import {
@@ -345,8 +347,6 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
const repo = "codeql";
let databaseManager: DatabaseManager;
let databaseFetcher: DatabaseFetcher;
const storagePath = "/a/b/c/d";
let cliServer: CodeQLCliServer;
const app = createMockApp();
let updates: DatabaseUpdate[] = [
@@ -368,22 +368,18 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
];
let showQuickPickSpy: jest.SpiedFunction<typeof window.showQuickPick>;
let downloadGitHubDatabaseFromUrlSpy: jest.SpiedFunction<
DatabaseFetcher["downloadGitHubDatabaseFromUrl"]
>;
let downloadGitHubDatabaseFromUrlMock: jest.Mock<DatabaseItem | undefined>;
beforeEach(() => {
octokit = mockedObject<Octokit>({});
databaseManager = mockedObject<DatabaseManager>({
currentDatabaseItem: mockDatabaseItem(),
});
cliServer = mockedObject<CodeQLCliServer>({});
databaseFetcher = new DatabaseFetcher(
app,
databaseManager,
storagePath,
cliServer,
);
downloadGitHubDatabaseFromUrlMock = jest.fn().mockReturnValue(undefined);
databaseFetcher = mockedObject<DatabaseFetcher>({
downloadGitHubDatabaseFromUrl: downloadGitHubDatabaseFromUrlMock,
});
showQuickPickSpy = jest.spyOn(window, "showQuickPick").mockResolvedValue(
mockedQuickPickItem([
@@ -392,9 +388,6 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
}),
]),
);
downloadGitHubDatabaseFromUrlSpy = jest
.spyOn(databaseFetcher, "downloadGitHubDatabaseFromUrl")
.mockResolvedValue(undefined);
});
it("downloads the database", async () => {
@@ -408,8 +401,8 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
updates[0].database.url,
updates[0].database.id,
updates[0].database.created_at,
@@ -483,8 +476,8 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(1);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
updates[1].database.url,
updates[1].database.id,
updates[1].database.created_at,
@@ -535,8 +528,8 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledTimes(2);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledTimes(2);
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
updates[0].database.url,
updates[0].database.id,
updates[0].database.created_at,
@@ -548,7 +541,7 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
false,
false,
);
expect(downloadGitHubDatabaseFromUrlSpy).toHaveBeenCalledWith(
expect(downloadGitHubDatabaseFromUrlMock).toHaveBeenCalledWith(
updates[1].database.url,
updates[1].database.id,
updates[1].database.created_at,
@@ -593,7 +586,7 @@ describe("downloadDatabaseUpdateFromGitHub", () => {
app.commands,
);
expect(downloadGitHubDatabaseFromUrlSpy).not.toHaveBeenCalled();
expect(downloadGitHubDatabaseFromUrlMock).not.toHaveBeenCalled();
});
});
});