Skip to content

Commit 3bf27b3

Browse files
committed
Set up factories for VSCode VariantAnalysis
In a previous PR [1] we introduced factories for generating variant analyses (and their associated objects) that were returned from the API. Let's also introduce factories for generating their VSCode equivalent. We can immediately use them for generating a VariantAnalysis object for the monitor tests. [1]: #1545
1 parent 9422c6d commit 3bf27b3

4 files changed

Lines changed: 103 additions & 9 deletions

File tree

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-monitor.test.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,18 @@ import {
1313
VariantAnalysisFailureReason
1414
} from '../../../remote-queries/gh-api/variant-analysis';
1515
import { createFailedMockApiResponse, createMockApiResponse } from '../../factories/remote-queries/gh-api/variant-analysis-api-response';
16-
import { VariantAnalysisStatus } from '../../../remote-queries/shared/variant-analysis';
16+
import { VariantAnalysis, VariantAnalysisStatus } from '../../../remote-queries/shared/variant-analysis';
1717
import { createMockScannedRepos } from '../../factories/remote-queries/gh-api/scanned-repositories';
1818
import { processFailureReason } from '../../../remote-queries/variant-analysis-processor';
1919
import { Credentials } from '../../../authentication';
20+
import { createMockVariantAnalysis } from '../../factories/remote-queries/shared/variant-analysis';
2021

2122
describe('Variant Analysis Monitor', async function() {
2223
let sandbox: sinon.SinonSandbox;
2324
let mockGetVariantAnalysis: sinon.SinonStub;
2425
let cancellationToken: CancellationToken;
2526
let variantAnalysisMonitor: VariantAnalysisMonitor;
26-
let variantAnalysis: any;
27+
let variantAnalysis: VariantAnalysis;
2728

2829
beforeEach(async () => {
2930
sandbox = sinon.createSandbox();
@@ -34,10 +35,7 @@ describe('Variant Analysis Monitor', async function() {
3435
isCancellationRequested: false
3536
} as unknown as CancellationToken;
3637

37-
variantAnalysis = {
38-
id: 123,
39-
controllerRepoId: 1,
40-
};
38+
variantAnalysis = createMockVariantAnalysis();
4139

4240
try {
4341
const extension = await extensions.getExtension<CodeQLExtensionInterface | Record<string, never>>('GitHub.vscode-codeql')!.activate();
@@ -93,13 +91,12 @@ describe('Variant Analysis Monitor', async function() {
9391

9492
it('should mark as failed locally and stop monitoring', async () => {
9593
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
96-
variantAnalysis = result.variantAnalysis;
9794

9895
expect(mockGetVariantAnalysis.calledOnce).to.be.true;
9996
expect(result.status).to.eql('Failed');
10097
expect(result.error).to.eql(`Variant Analysis has failed: ${mockFailedApiResponse.failure_reason}`);
101-
expect(variantAnalysis.status).to.equal(VariantAnalysisStatus.Failed);
102-
expect(variantAnalysis.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason));
98+
expect(result?.variantAnalysis?.status).to.equal(VariantAnalysisStatus.Failed);
99+
expect(result?.variantAnalysis?.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason));
103100
});
104101
});
105102

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { faker } from '@faker-js/faker';
2+
import {
3+
VariantAnalysisRepoStatus,
4+
VariantAnalysisScannedRepository
5+
} from '../../../../remote-queries/shared/variant-analysis';
6+
7+
export function createMockScannedRepo(
8+
name: string,
9+
isPrivate: boolean,
10+
analysisStatus: VariantAnalysisRepoStatus,
11+
): VariantAnalysisScannedRepository {
12+
return {
13+
repository: {
14+
id: faker.datatype.number(),
15+
fullName: 'github/' + name,
16+
private: isPrivate,
17+
},
18+
analysisStatus: analysisStatus,
19+
resultCount: faker.datatype.number(),
20+
artifactSizeInBytes: faker.datatype.number()
21+
};
22+
}
23+
24+
export function createMockScannedRepos(
25+
statuses: VariantAnalysisRepoStatus[] = [
26+
VariantAnalysisRepoStatus.Succeeded,
27+
VariantAnalysisRepoStatus.Pending,
28+
VariantAnalysisRepoStatus.InProgress,
29+
]
30+
): VariantAnalysisScannedRepository[] {
31+
return statuses.map(status => createMockScannedRepo(`mona-${status}`, false, status));
32+
}
33+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { faker } from '@faker-js/faker';
2+
import {
3+
VariantAnalysisSkippedRepositories,
4+
VariantAnalysisSkippedRepositoryGroup
5+
} from '../../../../remote-queries/shared/variant-analysis';
6+
7+
export function createMockSkippedRepos(): VariantAnalysisSkippedRepositories {
8+
return {
9+
accessMismatchRepos: createMockSkippedRepoGroup(),
10+
noCodeqlDbRepos: createMockSkippedRepoGroup(),
11+
notFoundRepos: createMockSkippedRepoGroup(),
12+
overLimitRepos: createMockSkippedRepoGroup()
13+
};
14+
}
15+
16+
export function createMockSkippedRepoGroup(): VariantAnalysisSkippedRepositoryGroup {
17+
return {
18+
repositoryCount: 2,
19+
repositories: [
20+
{
21+
id: faker.datatype.number(),
22+
fullName: 'github/' + faker.random.word(),
23+
},
24+
{
25+
id: faker.datatype.number(),
26+
fullName: 'github/' + faker.random.word(),
27+
}
28+
]
29+
};
30+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import {
2+
VariantAnalysis,
3+
VariantAnalysisQueryLanguage,
4+
VariantAnalysisScannedRepository,
5+
VariantAnalysisSkippedRepositories,
6+
VariantAnalysisStatus,
7+
} from '../../../../remote-queries/shared/variant-analysis';
8+
import { createMockScannedRepos } from './scanned-repositories';
9+
import { createMockSkippedRepos } from './skipped-repositories';
10+
11+
export function createMockVariantAnalysis(
12+
status: VariantAnalysisStatus = VariantAnalysisStatus.InProgress,
13+
scannedRepos: VariantAnalysisScannedRepository[] = createMockScannedRepos(),
14+
skippedRepos: VariantAnalysisSkippedRepositories = createMockSkippedRepos()
15+
): VariantAnalysis {
16+
const variantAnalysis: VariantAnalysis = {
17+
id: 123,
18+
controllerRepoId: 456,
19+
query: {
20+
name: 'a-query-name',
21+
filePath: 'a-query-file-path',
22+
language: VariantAnalysisQueryLanguage.Javascript
23+
},
24+
databases: {
25+
repositories: ['1', '2', '3'],
26+
},
27+
status: status,
28+
actionsWorkflowRunId: 789,
29+
scannedRepos: scannedRepos,
30+
skippedRepos: skippedRepos
31+
};
32+
33+
return variantAnalysis;
34+
}

0 commit comments

Comments
 (0)