Skip to content

Commit a630663

Browse files
Convert extensions/ql-vscode/src/variant-analysis/variant-analysis-monitor.ts to call typed commands
1 parent 7b53c47 commit a630663

3 files changed

Lines changed: 29 additions & 101 deletions

File tree

extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ export class VariantAnalysisManager
115115
super();
116116
this.variantAnalysisMonitor = this.push(
117117
new VariantAnalysisMonitor(
118+
app,
118119
this.shouldCancelMonitorVariantAnalysis.bind(this),
119120
),
120121
);
@@ -501,10 +502,7 @@ export class VariantAnalysisManager
501502
public async monitorVariantAnalysis(
502503
variantAnalysis: VariantAnalysis,
503504
): Promise<void> {
504-
await this.variantAnalysisMonitor.monitorVariantAnalysis(
505-
variantAnalysis,
506-
this.app.credentials,
507-
);
505+
await this.variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
508506
}
509507

510508
public async autoDownloadVariantAnalysisResult(

extensions/ql-vscode/src/variant-analysis/variant-analysis-monitor.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { commands, EventEmitter } from "vscode";
1+
import { EventEmitter } from "vscode";
22
import { getVariantAnalysis } from "./gh-api/gh-api-client";
33

44
import {
@@ -13,7 +13,7 @@ import { DisposableObject } from "../pure/disposable-object";
1313
import { sleep } from "../pure/time";
1414
import { getErrorMessage } from "../pure/helpers-pure";
1515
import { showAndLogWarningMessage } from "../helpers";
16-
import { Credentials } from "../common/authentication";
16+
import { App } from "../common/app";
1717

1818
export class VariantAnalysisMonitor extends DisposableObject {
1919
// With a sleep of 5 seconds, the maximum number of attempts takes
@@ -27,6 +27,7 @@ export class VariantAnalysisMonitor extends DisposableObject {
2727
readonly onVariantAnalysisChange = this._onVariantAnalysisChange.event;
2828

2929
constructor(
30+
private readonly app: App,
3031
private readonly shouldCancelMonitor: (
3132
variantAnalysisId: number,
3233
) => Promise<boolean>,
@@ -36,7 +37,6 @@ export class VariantAnalysisMonitor extends DisposableObject {
3637

3738
public async monitorVariantAnalysis(
3839
variantAnalysis: VariantAnalysis,
39-
credentials: Credentials,
4040
): Promise<void> {
4141
let attemptCount = 0;
4242
const scannedReposDownloaded: number[] = [];
@@ -51,7 +51,7 @@ export class VariantAnalysisMonitor extends DisposableObject {
5151
let variantAnalysisSummary: ApiVariantAnalysis;
5252
try {
5353
variantAnalysisSummary = await getVariantAnalysis(
54-
credentials,
54+
this.app.credentials,
5555
variantAnalysis.controllerRepo.id,
5656
variantAnalysis.id,
5757
);
@@ -87,7 +87,7 @@ export class VariantAnalysisMonitor extends DisposableObject {
8787
scannedRepo: VariantAnalysisScannedRepository,
8888
variantAnalysisSummary: VariantAnalysis,
8989
) {
90-
void commands.executeCommand(
90+
void this.app.commands.execute(
9191
"codeQL.autoDownloadVariantAnalysisResult",
9292
scannedRepo,
9393
variantAnalysisSummary,

extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-monitor.test.ts

Lines changed: 22 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import { commands, extensions } from "vscode";
2-
import { CodeQLExtensionInterface } from "../../../../src/extension";
3-
41
import * as ghApiClient from "../../../../src/variant-analysis/gh-api/gh-api-client";
52
import { VariantAnalysisMonitor } from "../../../../src/variant-analysis/variant-analysis-monitor";
63
import {
@@ -23,44 +20,37 @@ import {
2320
processUpdatedVariantAnalysis,
2421
} from "../../../../src/variant-analysis/variant-analysis-processor";
2522
import { createMockVariantAnalysis } from "../../../factories/variant-analysis/shared/variant-analysis";
26-
import { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
27-
import { testCredentialsWithStub } from "../../../factories/authentication";
23+
import { createMockApp } from "../../../__mocks__/appMock";
24+
import { createMockCommandManager } from "../../../__mocks__/commandsMock";
2825

2926
jest.setTimeout(60_000);
3027

3128
describe("Variant Analysis Monitor", () => {
32-
let extension: CodeQLExtensionInterface | Record<string, never>;
3329
let mockGetVariantAnalysis: jest.SpiedFunction<
3430
typeof ghApiClient.getVariantAnalysis
3531
>;
3632
let variantAnalysisMonitor: VariantAnalysisMonitor;
3733
let shouldCancelMonitor: jest.Mock<Promise<boolean>, [number]>;
3834
let variantAnalysis: VariantAnalysis;
39-
let variantAnalysisManager: VariantAnalysisManager;
40-
let mockGetDownloadResult: jest.SpiedFunction<
41-
typeof variantAnalysisManager.autoDownloadVariantAnalysisResult
42-
>;
4335

4436
const onVariantAnalysisChangeSpy = jest.fn();
37+
const mockEecuteCommand = jest.fn();
4538

4639
beforeEach(async () => {
4740
variantAnalysis = createMockVariantAnalysis({});
4841

4942
shouldCancelMonitor = jest.fn();
5043

51-
extension = await extensions
52-
.getExtension<CodeQLExtensionInterface | Record<string, never>>(
53-
"GitHub.vscode-codeql",
54-
)!
55-
.activate();
56-
variantAnalysisMonitor = new VariantAnalysisMonitor(shouldCancelMonitor);
44+
variantAnalysisMonitor = new VariantAnalysisMonitor(
45+
createMockApp({
46+
commands: createMockCommandManager({
47+
executeCommand: mockEecuteCommand,
48+
}),
49+
}),
50+
shouldCancelMonitor,
51+
);
5752
variantAnalysisMonitor.onVariantAnalysisChange(onVariantAnalysisChangeSpy);
5853

59-
variantAnalysisManager = extension.variantAnalysisManager;
60-
mockGetDownloadResult = jest
61-
.spyOn(variantAnalysisManager, "autoDownloadVariantAnalysisResult")
62-
.mockResolvedValue(undefined);
63-
6454
mockGetVariantAnalysis = jest
6555
.spyOn(ghApiClient, "getVariantAnalysis")
6656
.mockRejectedValue(new Error("Not mocked"));
@@ -71,10 +61,7 @@ describe("Variant Analysis Monitor", () => {
7161
it("should return early if variant analysis should be cancelled", async () => {
7262
shouldCancelMonitor.mockResolvedValue(true);
7363

74-
await variantAnalysisMonitor.monitorVariantAnalysis(
75-
variantAnalysis,
76-
testCredentialsWithStub(),
77-
);
64+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
7865

7966
expect(onVariantAnalysisChangeSpy).not.toHaveBeenCalled();
8067
});
@@ -88,10 +75,7 @@ describe("Variant Analysis Monitor", () => {
8875
});
8976

9077
it("should mark as failed and stop monitoring", async () => {
91-
await variantAnalysisMonitor.monitorVariantAnalysis(
92-
variantAnalysis,
93-
testCredentialsWithStub(),
94-
);
78+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
9579

9680
expect(mockGetVariantAnalysis).toHaveBeenCalledTimes(1);
9781

@@ -109,7 +93,6 @@ describe("Variant Analysis Monitor", () => {
10993
describe("when the variant analysis is in progress", () => {
11094
let mockApiResponse: VariantAnalysisApiResponse;
11195
let scannedRepos: ApiVariantAnalysisScannedRepository[];
112-
let succeededRepos: ApiVariantAnalysisScannedRepository[];
11396

11497
describe("when there are successfully scanned repos", () => {
11598
beforeEach(async () => {
@@ -124,52 +107,25 @@ describe("Variant Analysis Monitor", () => {
124107
]);
125108
mockApiResponse = createMockApiResponse("succeeded", scannedRepos);
126109
mockGetVariantAnalysis.mockResolvedValue(mockApiResponse);
127-
succeededRepos = scannedRepos.filter(
128-
(r) => r.analysis_status === "succeeded",
129-
);
130110
});
131111

132112
it("should trigger a download extension command for each repo", async () => {
133113
const succeededRepos = scannedRepos.filter(
134114
(r) => r.analysis_status === "succeeded",
135115
);
136-
const commandSpy = jest
137-
.spyOn(commands, "executeCommand")
138-
.mockResolvedValue(undefined);
139-
140-
await variantAnalysisMonitor.monitorVariantAnalysis(
141-
variantAnalysis,
142-
testCredentialsWithStub(),
143-
);
116+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
144117

145-
expect(commandSpy).toBeCalledTimes(succeededRepos.length);
118+
expect(mockEecuteCommand).toBeCalledTimes(succeededRepos.length);
146119

147120
succeededRepos.forEach((succeededRepo, index) => {
148-
expect(commandSpy).toHaveBeenNthCalledWith(
121+
expect(mockEecuteCommand).toHaveBeenNthCalledWith(
149122
index + 1,
150123
"codeQL.autoDownloadVariantAnalysisResult",
151124
processScannedRepository(succeededRepo),
152125
processUpdatedVariantAnalysis(variantAnalysis, mockApiResponse),
153126
);
154127
});
155128
});
156-
157-
it("should download all available results", async () => {
158-
await variantAnalysisMonitor.monitorVariantAnalysis(
159-
variantAnalysis,
160-
testCredentialsWithStub(),
161-
);
162-
163-
expect(mockGetDownloadResult).toBeCalledTimes(succeededRepos.length);
164-
165-
succeededRepos.forEach((succeededRepo, index) => {
166-
expect(mockGetDownloadResult).toHaveBeenNthCalledWith(
167-
index + 1,
168-
processScannedRepository(succeededRepo),
169-
processUpdatedVariantAnalysis(variantAnalysis, mockApiResponse),
170-
);
171-
});
172-
});
173129
});
174130

175131
describe("when there are only in progress repos", () => {
@@ -182,25 +138,9 @@ describe("Variant Analysis Monitor", () => {
182138
});
183139

184140
it("should succeed and not download any repos via a command", async () => {
185-
const commandSpy = jest
186-
.spyOn(commands, "executeCommand")
187-
.mockResolvedValue(undefined);
188-
189-
await variantAnalysisMonitor.monitorVariantAnalysis(
190-
variantAnalysis,
191-
testCredentialsWithStub(),
192-
);
141+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
193142

194-
expect(commandSpy).not.toHaveBeenCalled();
195-
});
196-
197-
it("should not try to download any repos", async () => {
198-
await variantAnalysisMonitor.monitorVariantAnalysis(
199-
variantAnalysis,
200-
testCredentialsWithStub(),
201-
);
202-
203-
expect(mockGetDownloadResult).not.toBeCalled();
143+
expect(mockEecuteCommand).not.toHaveBeenCalled();
204144
});
205145
});
206146

@@ -249,17 +189,10 @@ describe("Variant Analysis Monitor", () => {
249189
});
250190

251191
it("should trigger a download extension command for each repo", async () => {
252-
const commandSpy = jest
253-
.spyOn(commands, "executeCommand")
254-
.mockResolvedValue(undefined);
255-
256-
await variantAnalysisMonitor.monitorVariantAnalysis(
257-
variantAnalysis,
258-
testCredentialsWithStub(),
259-
);
192+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
260193

261194
expect(mockGetVariantAnalysis).toBeCalledTimes(4);
262-
expect(commandSpy).toBeCalledTimes(5);
195+
expect(mockEecuteCommand).toBeCalledTimes(5);
263196
});
264197
});
265198

@@ -271,12 +204,9 @@ describe("Variant Analysis Monitor", () => {
271204
});
272205

273206
it("should not try to download any repos", async () => {
274-
await variantAnalysisMonitor.monitorVariantAnalysis(
275-
variantAnalysis,
276-
testCredentialsWithStub(),
277-
);
207+
await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis);
278208

279-
expect(mockGetDownloadResult).not.toBeCalled();
209+
expect(mockEecuteCommand).not.toBeCalled();
280210
});
281211
});
282212
});

0 commit comments

Comments
 (0)