Skip to content

Commit d970b51

Browse files
authored
Merge pull request #2814 from github/koesie10/test-model-editor-view
Add simple test for ModelEditorView
2 parents 2a9c8ef + ac9355e commit d970b51

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { join } from "path";
2+
import { Mode } from "../../../../src/model-editor/shared/mode";
3+
import { mockDatabaseItem, mockedObject } from "../../utils/mocking.helpers";
4+
import { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
5+
import { Uri, WebviewPanel } from "vscode";
6+
import { ModelEditorView } from "../../../../src/model-editor/model-editor-view";
7+
import { createMockApp } from "../../../__mocks__/appMock";
8+
import { mockEmptyDatabaseManager } from "../query-testing/test-runner-helpers";
9+
import { QueryRunner } from "../../../../src/query-server";
10+
import { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
11+
12+
describe("ModelEditorView", () => {
13+
const app = createMockApp({});
14+
const databaseManager = mockEmptyDatabaseManager();
15+
const cliServer = mockedObject<CodeQLCliServer>({});
16+
const queryRunner = mockedObject<QueryRunner>({});
17+
const queryStorageDir = "/a/b/c/d";
18+
const queryDir = "/a/b/c/e";
19+
const databaseItem = mockDatabaseItem();
20+
const extensionPack: ExtensionPack = {
21+
path: "/a/b/c/f",
22+
yamlPath: join("/a/b/c/f", "codeql-pack.yml"),
23+
name: "codeql/test",
24+
version: "0.0.0",
25+
language: "java",
26+
extensionTargets: {
27+
"codeql/java-all": "*",
28+
},
29+
dataExtensions: ["models/**/*.yml"],
30+
};
31+
const mode = Mode.Application;
32+
const updateMethodsUsagePanelState = jest.fn();
33+
const showMethod = jest.fn();
34+
const handleViewBecameActive = jest.fn();
35+
const handleViewWasDisposed = jest.fn();
36+
const isMostRecentlyActiveView = jest.fn();
37+
38+
let view: ModelEditorView;
39+
40+
beforeEach(() => {
41+
view = new ModelEditorView(
42+
app,
43+
databaseManager,
44+
cliServer,
45+
queryRunner,
46+
queryStorageDir,
47+
queryDir,
48+
databaseItem,
49+
extensionPack,
50+
mode,
51+
updateMethodsUsagePanelState,
52+
showMethod,
53+
handleViewBecameActive,
54+
handleViewWasDisposed,
55+
isMostRecentlyActiveView,
56+
);
57+
});
58+
59+
it("restores the view", async () => {
60+
// This tests using restoreView because that's much easier to mock than using openView. For openView, we would
61+
// need to mock `vscode.window.createWebviewPanel`, while for restoreView we only need to mock a given WebviewPanel.
62+
//
63+
// The thing we're testing inside this test is whether getPanelConfig returns the correct configuration, so there
64+
// should be no differences between openView/getPanel and restoreView for that.
65+
const panel = mockedObject<WebviewPanel>({
66+
onDidDispose: jest.fn(),
67+
webview: {
68+
html: undefined,
69+
cspSource: "abc",
70+
onDidReceiveMessage: jest.fn(),
71+
asWebviewUri: jest.fn().mockImplementation((uri: Uri) =>
72+
uri.with({
73+
scheme: "webview",
74+
}),
75+
),
76+
},
77+
});
78+
79+
await view.restoreView(panel);
80+
81+
expect(panel.webview.html).toContain("<html>");
82+
expect(panel.webview.html).toContain('data-view="model-editor"');
83+
});
84+
});

0 commit comments

Comments
 (0)