Remove mocking of modeling events (#3542)

This commit is contained in:
Charis Kyriakou
2024-04-08 11:19:02 +01:00
committed by GitHub
parent 24e08f768c
commit 6d8de1b3b8
6 changed files with 41 additions and 108 deletions

View File

@@ -2,7 +2,6 @@ import type { App, EnvironmentContext } from "../../src/common/app";
import { AppMode } from "../../src/common/app";
import type { AppEvent, AppEventEmitter } from "../../src/common/events";
import type { Memento } from "../../src/common/memento";
import type { Disposable } from "../../src/common/disposable-object";
import { createMockLogger } from "./loggerMock";
import { createMockMemento } from "../mock-memento";
import { testCredentialsWithStub } from "../factories/authentication";
@@ -54,29 +53,25 @@ export function createMockApp({
class MockAppEventEmitter<T> implements AppEventEmitter<T> {
public event: AppEvent<T>;
private listeners: Array<(event: T) => void> = [];
constructor() {
this.event = () => {
return new MockAppEvent();
this.event = (listener) => {
this.listeners.push(listener);
return {
dispose: () => {
this.listeners = this.listeners.filter((l) => l !== listener);
},
};
};
}
public fire(): void {
// no-op
public fire(event: T): void {
this.listeners.forEach((listener) => listener(event));
}
public dispose() {
// no-op
}
}
class MockAppEvent implements Disposable {
public fire(): void {
// no-op
}
public dispose() {
// no-op
this.listeners = [];
}
}

View File

@@ -1,48 +0,0 @@
import { mockedObject } from "../../vscode-tests/utils/mocking.helpers";
import type { ModelingEvents } from "../../../src/model-editor/modeling-events";
export function createMockModelingEvents({
onActiveDbChanged = jest.fn(),
onDbOpened = jest.fn(),
onDbClosed = jest.fn(),
onSelectedMethodChanged = jest.fn(),
onMethodsChanged = jest.fn(),
onHideModeledMethodsChanged = jest.fn(),
onModeChanged = jest.fn(),
onModeledAndModifiedMethodsChanged = jest.fn(),
onInProgressMethodsChanged = jest.fn(),
onProcessedByAutoModelMethodsChanged = jest.fn(),
onRevealInModelEditor = jest.fn(),
onFocusModelEditor = jest.fn(),
onModelEvaluationRunChanged = jest.fn(),
}: {
onActiveDbChanged?: ModelingEvents["onActiveDbChanged"];
onDbOpened?: ModelingEvents["onDbOpened"];
onDbClosed?: ModelingEvents["onDbClosed"];
onSelectedMethodChanged?: ModelingEvents["onSelectedMethodChanged"];
onMethodsChanged?: ModelingEvents["onMethodsChanged"];
onHideModeledMethodsChanged?: ModelingEvents["onHideModeledMethodsChanged"];
onModeChanged?: ModelingEvents["onModeChanged"];
onModeledAndModifiedMethodsChanged?: ModelingEvents["onModeledAndModifiedMethodsChanged"];
onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"];
onProcessedByAutoModelMethodsChanged?: ModelingEvents["onProcessedByAutoModelMethodsChanged"];
onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"];
onFocusModelEditor?: ModelingEvents["onFocusModelEditor"];
onModelEvaluationRunChanged?: ModelingEvents["onModelEvaluationRunChanged"];
} = {}): ModelingEvents {
return mockedObject<ModelingEvents>({
onActiveDbChanged,
onDbOpened,
onDbClosed,
onSelectedMethodChanged,
onMethodsChanged,
onHideModeledMethodsChanged,
onModeChanged,
onModeledAndModifiedMethodsChanged,
onInProgressMethodsChanged,
onProcessedByAutoModelMethodsChanged,
onRevealInModelEditor,
onFocusModelEditor,
onModelEvaluationRunChanged,
});
}

View File

@@ -1,22 +1,22 @@
import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
import type { App } from "../../../../src/common/app";
import type { BaseLogger } from "../../../../src/common/logging";
import type { NotificationLogger } from "../../../../src/common/logging";
import { QueryLanguage } from "../../../../src/common/query-language";
import type { DatabaseItem } from "../../../../src/databases/local-databases";
import type { ModelEvaluationRun } from "../../../../src/model-editor/model-evaluation-run";
import { ModelEvaluator } from "../../../../src/model-editor/model-evaluator";
import type { ModelingEvents } from "../../../../src/model-editor/modeling-events";
import { ModelingEvents } from "../../../../src/model-editor/modeling-events";
import type { ModelingStore } from "../../../../src/model-editor/modeling-store";
import type { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
import type { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
import { createMockApp } from "../../../__mocks__/appMock";
import { createMockLogger } from "../../../__mocks__/loggerMock";
import { createMockModelingEvents } from "../../../__mocks__/model-editor/modelingEventsMock";
import { createMockModelingStore } from "../../../__mocks__/model-editor/modelingStoreMock";
import { mockedObject } from "../../../mocked-object";
describe("Model Evaluator", () => {
let modelEvaluator: ModelEvaluator;
let logger: BaseLogger;
let logger: NotificationLogger;
let app: App;
let cliServer: CodeQLCliServer;
let modelingStore: ModelingStore;
@@ -30,13 +30,13 @@ describe("Model Evaluator", () => {
beforeEach(() => {
logger = createMockLogger();
app = mockedObject<App>({ logger });
app = createMockApp({ logger });
cliServer = mockedObject<CodeQLCliServer>({});
getModelEvaluationRunMock = jest.fn();
modelingStore = createMockModelingStore({
getModelEvaluationRun: getModelEvaluationRunMock,
});
modelingEvents = createMockModelingEvents();
modelingEvents = new ModelingEvents(app);
variantAnalysisManager = mockedObject<VariantAnalysisManager>({
cancelVariantAnalysis: jest.fn(),
});

View File

@@ -1,14 +1,12 @@
import type { Uri, Webview, WebviewView } from "vscode";
import { EventEmitter } from "vscode";
import type { ModelConfigListener } from "../../../../../src/config";
import { MethodModelingViewProvider } from "../../../../../src/model-editor/method-modeling/method-modeling-view-provider";
import { createMockApp } from "../../../../__mocks__/appMock";
import { createMockModelingEvents } from "../../../../__mocks__/model-editor/modelingEventsMock";
import { createMockModelingStore } from "../../../../__mocks__/model-editor/modelingStoreMock";
import { mockedObject } from "../../../../mocked-object";
import type { FromMethodModelingMessage } from "../../../../../src/common/interface-types";
import { DisposableObject } from "../../../../../src/common/disposable-object";
import type { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
import { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
import type {
DbModelingState,
ModelingStore,
@@ -29,10 +27,6 @@ describe("method modeling view provider", () => {
ModelingStore["getSelectedMethodDetails"]
>;
// Modeling events
let selectedMethodChangedEventEmitter: ModelingEvents["onSelectedMethodChangedEventEmitter"];
let dbOpenedEventEmitter: ModelingEvents["onDbOpenedEventEmitter"];
// View provider
let viewProvider: MethodModelingViewProvider;
let onDidReceiveMessage: (msg: FromMethodModelingMessage) => Promise<void>;
@@ -48,12 +42,7 @@ describe("method modeling view provider", () => {
getSelectedMethodDetails,
});
selectedMethodChangedEventEmitter = new EventEmitter();
dbOpenedEventEmitter = new EventEmitter();
const modelingEvents = createMockModelingEvents({
onSelectedMethodChanged: selectedMethodChangedEventEmitter.event,
onDbOpened: dbOpenedEventEmitter.event,
});
const modelingEvents = new ModelingEvents(app);
const modelConfigListener = mockedObject<ModelConfigListener>({
showTypeModels: true,

View File

@@ -1,5 +1,5 @@
import type { TreeView } from "vscode";
import { EventEmitter, window } from "vscode";
import { window } from "vscode";
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
import type { Method } from "../../../../../src/model-editor/method";
import { MethodsUsagePanel } from "../../../../../src/model-editor/methods-usage/methods-usage-panel";
@@ -13,8 +13,8 @@ import type { ModelingStore } from "../../../../../src/model-editor/modeling-sto
import { createMockModelingStore } from "../../../../__mocks__/model-editor/modelingStoreMock";
import type { ModeledMethod } from "../../../../../src/model-editor/modeled-method";
import { Mode } from "../../../../../src/model-editor/shared/mode";
import { createMockModelingEvents } from "../../../../__mocks__/model-editor/modelingEventsMock";
import type { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
import { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
import { createMockApp } from "../../../../__mocks__/appMock";
describe("MethodsUsagePanel", () => {
const mockCliServer = mockedObject<CodeQLCliServer>({});
@@ -36,7 +36,8 @@ describe("MethodsUsagePanel", () => {
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
const modelingStore = createMockModelingStore();
const modelingEvents = createMockModelingEvents();
const app = createMockApp({});
const modelingEvents = new ModelingEvents(app);
const panel = new MethodsUsagePanel(
modelingStore,
@@ -66,8 +67,6 @@ describe("MethodsUsagePanel", () => {
const modeledMethods: Record<string, ModeledMethod[]> = {};
const modifiedMethodSignatures: Set<string> = new Set();
const usage = createUsage();
const selectedMethodChangedEmitter: ModelingEvents["onSelectedMethodChangedEventEmitter"] =
new EventEmitter();
beforeEach(() => {
mockTreeView = mockedObject<TreeView<unknown>>({
@@ -76,9 +75,7 @@ describe("MethodsUsagePanel", () => {
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
modelingStore = createMockModelingStore();
modelingEvents = createMockModelingEvents({
onSelectedMethodChanged: selectedMethodChangedEmitter.event,
});
modelingEvents = new ModelingEvents(createMockApp({}));
});
it("should reveal the correct item in the tree view", async () => {
@@ -101,15 +98,15 @@ describe("MethodsUsagePanel", () => {
modifiedMethodSignatures,
);
selectedMethodChangedEmitter.fire({
databaseItem: dbItem,
modelingEvents.fireSelectedMethodChangedEvent(
dbItem,
method,
usage,
modeledMethods: modeledMethods[method.signature],
isModified: modifiedMethodSignatures.has(method.signature),
isInProgress: false,
processedByAutoModel: false,
});
modeledMethods[method.signature],
modifiedMethodSignatures.has(method.signature),
false,
false,
);
expect(mockTreeView.reveal).toHaveBeenCalledWith(
expect.objectContaining({
@@ -136,15 +133,15 @@ describe("MethodsUsagePanel", () => {
modifiedMethodSignatures,
);
selectedMethodChangedEmitter.fire({
databaseItem: dbItem,
modelingEvents.fireSelectedMethodChangedEvent(
dbItem,
method,
usage,
modeledMethods: modeledMethods[method.signature],
isModified: modifiedMethodSignatures.has(method.signature),
isInProgress: false,
processedByAutoModel: false,
});
modeledMethods[method.signature],
modifiedMethodSignatures.has(method.signature),
false,
false,
);
expect(mockTreeView.reveal).not.toHaveBeenCalled();
});

View File

@@ -10,15 +10,15 @@ import type { QueryRunner } from "../../../../src/query-server";
import type { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
import { createMockModelingStore } from "../../../__mocks__/model-editor/modelingStoreMock";
import type { ModelConfigListener } from "../../../../src/config";
import { createMockModelingEvents } from "../../../__mocks__/model-editor/modelingEventsMock";
import { QueryLanguage } from "../../../../src/common/query-language";
import type { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
import type { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
import { ModelingEvents } from "../../../../src/model-editor/modeling-events";
describe("ModelEditorView", () => {
const app = createMockApp({});
const modelingStore = createMockModelingStore();
const modelingEvents = createMockModelingEvents();
const modelingEvents = new ModelingEvents(app);
const modelConfig = mockedObject<ModelConfigListener>({
onDidChangeConfiguration: jest.fn(),
});