Make revealItem private by listening to onSelectedMethodChanged

This commit is contained in:
Robert
2024-03-04 17:26:37 +00:00
parent 2f49ac83de
commit fdd45e8dbd
4 changed files with 36 additions and 10 deletions

View File

@@ -57,7 +57,7 @@ export class MethodsUsagePanel extends DisposableObject {
};
}
public async revealItem(
private async revealItem(
methodSignature: string,
usage: Usage,
): Promise<void> {
@@ -108,6 +108,12 @@ export class MethodsUsagePanel extends DisposableObject {
}
}),
);
this.push(
this.modelingEvents.onSelectedMethodChanged(async (event) => {
await this.revealItem(event.method.signature, event.usage);
}),
);
}
private async handleStateChangeEvent(): Promise<void> {

View File

@@ -37,7 +37,6 @@ export class ModelEditorModule extends DisposableObject {
private readonly queryStorageDir: string;
private readonly modelingStore: ModelingStore;
private readonly modelingEvents: ModelingEvents;
private readonly methodsUsagePanel: MethodsUsagePanel;
private readonly modelConfig: ModelConfigListener;
private constructor(
@@ -52,7 +51,7 @@ export class ModelEditorModule extends DisposableObject {
this.queryStorageDir = join(baseQueryStorageDir, "model-editor-results");
this.modelingEvents = new ModelingEvents(app);
this.modelingStore = new ModelingStore(this.modelingEvents);
this.methodsUsagePanel = this.push(
this.push(
new MethodsUsagePanel(this.modelingStore, this.modelingEvents, cliServer),
);
this.push(
@@ -106,7 +105,7 @@ export class ModelEditorModule extends DisposableObject {
private registerToModelingEvents(): void {
this.push(
this.modelingEvents.onSelectedMethodChanged(async (event) => {
await this.showMethod(event.databaseItem, event.method, event.usage);
await this.showMethod(event.databaseItem, event.usage);
}),
);
@@ -127,10 +126,8 @@ export class ModelEditorModule extends DisposableObject {
private async showMethod(
databaseItem: DatabaseItem,
method: Method,
usage: Usage,
): Promise<void> {
await this.methodsUsagePanel.revealItem(method.signature, usage);
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
}

View File

@@ -4,6 +4,7 @@ import type { ModelingEvents } from "../../../src/model-editor/modeling-events";
export function createMockModelingEvents({
onActiveDbChanged = jest.fn(),
onDbClosed = jest.fn(),
onSelectedMethodChanged = jest.fn(),
onMethodsChanged = jest.fn(),
onHideModeledMethodsChanged = jest.fn(),
onModeChanged = jest.fn(),
@@ -16,6 +17,7 @@ export function createMockModelingEvents({
}: {
onActiveDbChanged?: ModelingEvents["onActiveDbChanged"];
onDbClosed?: ModelingEvents["onDbClosed"];
onSelectedMethodChanged?: ModelingEvents["onSelectedMethodChanged"];
onMethodsChanged?: ModelingEvents["onMethodsChanged"];
onHideModeledMethodsChanged?: ModelingEvents["onHideModeledMethodsChanged"];
onModeChanged?: ModelingEvents["onModeChanged"];
@@ -29,6 +31,7 @@ export function createMockModelingEvents({
return mockedObject<ModelingEvents>({
onActiveDbChanged,
onDbClosed,
onSelectedMethodChanged,
onMethodsChanged,
onHideModeledMethodsChanged,
onModeChanged,

View File

@@ -1,5 +1,5 @@
import type { TreeView } from "vscode";
import { window } from "vscode";
import { EventEmitter, 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";
@@ -66,6 +66,8 @@ 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>>({
@@ -74,7 +76,9 @@ describe("MethodsUsagePanel", () => {
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
modelingStore = createMockModelingStore();
modelingEvents = createMockModelingEvents();
modelingEvents = createMockModelingEvents({
onSelectedMethodChanged: selectedMethodChangedEmitter.event,
});
});
it("should reveal the correct item in the tree view", async () => {
@@ -97,7 +101,15 @@ describe("MethodsUsagePanel", () => {
modifiedMethodSignatures,
);
await panel.revealItem(method.signature, usage);
selectedMethodChangedEmitter.fire({
databaseItem: dbItem,
method,
usage,
modeledMethods: modeledMethods[method.signature],
isModified: modifiedMethodSignatures.has(method.signature),
isInProgress: false,
processedByAutoModel: false,
});
expect(mockTreeView.reveal).toHaveBeenCalledWith(
expect.objectContaining({
@@ -124,7 +136,15 @@ describe("MethodsUsagePanel", () => {
modifiedMethodSignatures,
);
await panel.revealItem(method.signature, usage);
selectedMethodChangedEmitter.fire({
databaseItem: dbItem,
method,
usage,
modeledMethods: modeledMethods[method.signature],
isModified: modifiedMethodSignatures.has(method.signature),
isInProgress: false,
processedByAutoModel: false,
});
expect(mockTreeView.reveal).not.toHaveBeenCalled();
});