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]: https://github.com/github/vscode-codeql/pull/1545
This commit is contained in:
@@ -13,17 +13,18 @@ import {
|
||||
VariantAnalysisFailureReason
|
||||
} from '../../../remote-queries/gh-api/variant-analysis';
|
||||
import { createFailedMockApiResponse, createMockApiResponse } from '../../factories/remote-queries/gh-api/variant-analysis-api-response';
|
||||
import { VariantAnalysisStatus } from '../../../remote-queries/shared/variant-analysis';
|
||||
import { VariantAnalysis, VariantAnalysisStatus } from '../../../remote-queries/shared/variant-analysis';
|
||||
import { createMockScannedRepos } from '../../factories/remote-queries/gh-api/scanned-repositories';
|
||||
import { processFailureReason } from '../../../remote-queries/variant-analysis-processor';
|
||||
import { Credentials } from '../../../authentication';
|
||||
import { createMockVariantAnalysis } from '../../factories/remote-queries/shared/variant-analysis';
|
||||
|
||||
describe('Variant Analysis Monitor', async function() {
|
||||
let sandbox: sinon.SinonSandbox;
|
||||
let mockGetVariantAnalysis: sinon.SinonStub;
|
||||
let cancellationToken: CancellationToken;
|
||||
let variantAnalysisMonitor: VariantAnalysisMonitor;
|
||||
let variantAnalysis: any;
|
||||
let variantAnalysis: VariantAnalysis;
|
||||
|
||||
beforeEach(async () => {
|
||||
sandbox = sinon.createSandbox();
|
||||
@@ -34,10 +35,7 @@ describe('Variant Analysis Monitor', async function() {
|
||||
isCancellationRequested: false
|
||||
} as unknown as CancellationToken;
|
||||
|
||||
variantAnalysis = {
|
||||
id: 123,
|
||||
controllerRepoId: 1,
|
||||
};
|
||||
variantAnalysis = createMockVariantAnalysis();
|
||||
|
||||
try {
|
||||
const extension = await extensions.getExtension<CodeQLExtensionInterface | Record<string, never>>('GitHub.vscode-codeql')!.activate();
|
||||
@@ -93,13 +91,12 @@ describe('Variant Analysis Monitor', async function() {
|
||||
|
||||
it('should mark as failed locally and stop monitoring', async () => {
|
||||
const result = await variantAnalysisMonitor.monitorVariantAnalysis(variantAnalysis, cancellationToken);
|
||||
variantAnalysis = result.variantAnalysis;
|
||||
|
||||
expect(mockGetVariantAnalysis.calledOnce).to.be.true;
|
||||
expect(result.status).to.eql('Failed');
|
||||
expect(result.error).to.eql(`Variant Analysis has failed: ${mockFailedApiResponse.failure_reason}`);
|
||||
expect(variantAnalysis.status).to.equal(VariantAnalysisStatus.Failed);
|
||||
expect(variantAnalysis.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason));
|
||||
expect(result?.variantAnalysis?.status).to.equal(VariantAnalysisStatus.Failed);
|
||||
expect(result?.variantAnalysis?.failureReason).to.equal(processFailureReason(mockFailedApiResponse.failure_reason as VariantAnalysisFailureReason));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import { faker } from '@faker-js/faker';
|
||||
import {
|
||||
VariantAnalysisRepoStatus,
|
||||
VariantAnalysisScannedRepository
|
||||
} from '../../../../remote-queries/shared/variant-analysis';
|
||||
|
||||
export function createMockScannedRepo(
|
||||
name: string,
|
||||
isPrivate: boolean,
|
||||
analysisStatus: VariantAnalysisRepoStatus,
|
||||
): VariantAnalysisScannedRepository {
|
||||
return {
|
||||
repository: {
|
||||
id: faker.datatype.number(),
|
||||
fullName: 'github/' + name,
|
||||
private: isPrivate,
|
||||
},
|
||||
analysisStatus: analysisStatus,
|
||||
resultCount: faker.datatype.number(),
|
||||
artifactSizeInBytes: faker.datatype.number()
|
||||
};
|
||||
}
|
||||
|
||||
export function createMockScannedRepos(
|
||||
statuses: VariantAnalysisRepoStatus[] = [
|
||||
VariantAnalysisRepoStatus.Succeeded,
|
||||
VariantAnalysisRepoStatus.Pending,
|
||||
VariantAnalysisRepoStatus.InProgress,
|
||||
]
|
||||
): VariantAnalysisScannedRepository[] {
|
||||
return statuses.map(status => createMockScannedRepo(`mona-${status}`, false, status));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import { faker } from '@faker-js/faker';
|
||||
import {
|
||||
VariantAnalysisSkippedRepositories,
|
||||
VariantAnalysisSkippedRepositoryGroup
|
||||
} from '../../../../remote-queries/shared/variant-analysis';
|
||||
|
||||
export function createMockSkippedRepos(): VariantAnalysisSkippedRepositories {
|
||||
return {
|
||||
accessMismatchRepos: createMockSkippedRepoGroup(),
|
||||
noCodeqlDbRepos: createMockSkippedRepoGroup(),
|
||||
notFoundRepos: createMockSkippedRepoGroup(),
|
||||
overLimitRepos: createMockSkippedRepoGroup()
|
||||
};
|
||||
}
|
||||
|
||||
export function createMockSkippedRepoGroup(): VariantAnalysisSkippedRepositoryGroup {
|
||||
return {
|
||||
repositoryCount: 2,
|
||||
repositories: [
|
||||
{
|
||||
id: faker.datatype.number(),
|
||||
fullName: 'github/' + faker.random.word(),
|
||||
},
|
||||
{
|
||||
id: faker.datatype.number(),
|
||||
fullName: 'github/' + faker.random.word(),
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
VariantAnalysis,
|
||||
VariantAnalysisQueryLanguage,
|
||||
VariantAnalysisScannedRepository,
|
||||
VariantAnalysisSkippedRepositories,
|
||||
VariantAnalysisStatus,
|
||||
} from '../../../../remote-queries/shared/variant-analysis';
|
||||
import { createMockScannedRepos } from './scanned-repositories';
|
||||
import { createMockSkippedRepos } from './skipped-repositories';
|
||||
|
||||
export function createMockVariantAnalysis(
|
||||
status: VariantAnalysisStatus = VariantAnalysisStatus.InProgress,
|
||||
scannedRepos: VariantAnalysisScannedRepository[] = createMockScannedRepos(),
|
||||
skippedRepos: VariantAnalysisSkippedRepositories = createMockSkippedRepos()
|
||||
): VariantAnalysis {
|
||||
const variantAnalysis: VariantAnalysis = {
|
||||
id: 123,
|
||||
controllerRepoId: 456,
|
||||
query: {
|
||||
name: 'a-query-name',
|
||||
filePath: 'a-query-file-path',
|
||||
language: VariantAnalysisQueryLanguage.Javascript
|
||||
},
|
||||
databases: {
|
||||
repositories: ['1', '2', '3'],
|
||||
},
|
||||
status: status,
|
||||
actionsWorkflowRunId: 789,
|
||||
scannedRepos: scannedRepos,
|
||||
skippedRepos: skippedRepos
|
||||
};
|
||||
|
||||
return variantAnalysis;
|
||||
}
|
||||
Reference in New Issue
Block a user