Add repository metadata to types

This adds the new `stargazers_count` and `updated_at` fields in the
repositories to the appropriate `gh-api` and `shared` types.

To make testing easier this also moves the
`variant-analysis-processor.test.ts` to the pure tests since it doesn't
and shouldn't depend on any `vscode` APIs.
This commit is contained in:
Koen Vlaswinkel
2022-11-01 12:05:50 +01:00
parent be2ca6c368
commit 5a2a9fc4bf
8 changed files with 69 additions and 22 deletions

View File

@@ -1,6 +1,6 @@
/**
* Defines basic information about a repository.
*
*
* Different parts of the API may return different subsets of information
* about a repository, but this model represents the very basic information
* that will always be available.
@@ -11,3 +11,8 @@ export interface Repository {
full_name: string,
private: boolean,
}
export interface RepositoryWithMetadata extends Repository {
stargazers_count: number;
updated_at: string | null;
}

View File

@@ -1,4 +1,4 @@
import { Repository } from './repository';
import { Repository, RepositoryWithMetadata } from './repository';
export interface VariantAnalysisSubmissionRequest {
action_repo_ref: string,
@@ -50,7 +50,7 @@ export type VariantAnalysisRepoStatus =
| 'timed_out';
export interface VariantAnalysisScannedRepository {
repository: Repository,
repository: RepositoryWithMetadata,
analysis_status: VariantAnalysisRepoStatus,
result_count?: number,
artifact_size_in_bytes?: number,
@@ -59,7 +59,7 @@ export interface VariantAnalysisScannedRepository {
export interface VariantAnalysisSkippedRepositoryGroup {
repository_count: number,
repositories: Repository[]
repositories: RepositoryWithMetadata[]
}
export interface VariantAnalysisNotFoundRepositoryGroup {

View File

@@ -3,3 +3,8 @@ export interface Repository {
fullName: string,
private: boolean,
}
export interface RepositoryWithMetadata extends Repository {
stargazersCount: number;
updatedAt: string | null;
}

View File

@@ -1,4 +1,4 @@
import { Repository } from './repository';
import { Repository, RepositoryWithMetadata } from './repository';
import { AnalysisAlert, AnalysisRawResults } from './analysis-result';
export interface VariantAnalysis {
@@ -62,7 +62,7 @@ export enum VariantAnalysisRepoStatus {
}
export interface VariantAnalysisScannedRepository {
repository: Repository,
repository: RepositoryWithMetadata,
analysisStatus: VariantAnalysisRepoStatus,
resultCount?: number,
artifactSizeInBytes?: number,
@@ -85,6 +85,8 @@ export interface VariantAnalysisSkippedRepository {
id?: number,
fullName: string,
private?: boolean,
stargazersCount?: number,
updatedAt?: string | null,
}
export enum VariantAnalysisScannedRepositoryDownloadStatus {

View File

@@ -85,6 +85,8 @@ function processScannedRepositories(
id: scannedRepo.repository.id,
fullName: scannedRepo.repository.full_name,
private: scannedRepo.repository.private,
stargazersCount: scannedRepo.repository.stargazers_count,
updatedAt: scannedRepo.repository.updated_at,
},
analysisStatus: processApiRepoStatus(scannedRepo.analysis_status),
resultCount: scannedRepo.result_count,
@@ -114,7 +116,10 @@ function processRepoGroup(repoGroup: ApiVariantAnalysisSkippedRepositoryGroup |
const repos = repoGroup.repositories.map(repo => {
return {
id: repo.id,
fullName: repo.full_name
fullName: repo.full_name,
private: repo.private,
stargazersCount: repo.stargazers_count,
updatedAt: repo.updated_at
};
});

View File

@@ -15,6 +15,8 @@ export function createMockScannedRepo(
name: name,
full_name: 'github/' + name,
private: isPrivate,
stargazers_count: faker.datatype.number(),
updated_at: faker.date.past().toISOString(),
},
analysis_status: analysisStatus,
result_count: faker.datatype.number(),

View File

@@ -22,13 +22,17 @@ export function createMockSkippedRepoGroup(): VariantAnalysisSkippedRepositoryGr
id: faker.datatype.number(),
name: faker.random.word(),
full_name: 'github/' + faker.random.word(),
private: true
private: true,
stargazers_count: faker.datatype.number(),
updated_at: faker.date.past().toISOString()
},
{
id: faker.datatype.number(),
name: faker.random.word(),
full_name: 'github/' + faker.random.word(),
private: false
private: false,
stargazers_count: faker.datatype.number(),
updated_at: faker.date.past().toISOString()
}
]
};

View File

@@ -1,17 +1,21 @@
import { expect } from 'chai';
import {
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository,
} from '../../../remote-queries/gh-api/variant-analysis';
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository
} from '../../../src/remote-queries/gh-api/variant-analysis';
import {
VariantAnalysisQueryLanguage,
VariantAnalysisScannedRepository,
VariantAnalysisRepoStatus
} from '../../../remote-queries/shared/variant-analysis';
import { processVariantAnalysis } from '../../../remote-queries/variant-analysis-processor';
import { createMockScannedRepos } from '../../factories/remote-queries/gh-api/scanned-repositories';
import { createMockSkippedRepos } from '../../factories/remote-queries/gh-api/skipped-repositories';
import { createMockApiResponse } from '../../factories/remote-queries/gh-api/variant-analysis-api-response';
import { createMockSubmission } from '../../factories/remote-queries/shared/variant-analysis-submission';
} from '../../../src/remote-queries/shared/variant-analysis';
import { processVariantAnalysis } from '../../../src/remote-queries/variant-analysis-processor';
import { createMockScannedRepos } from '../../../src/vscode-tests/factories/remote-queries/gh-api/scanned-repositories';
import { createMockSkippedRepos } from '../../../src/vscode-tests/factories/remote-queries/gh-api/skipped-repositories';
import {
createMockApiResponse
} from '../../../src/vscode-tests/factories/remote-queries/gh-api/variant-analysis-api-response';
import {
createMockSubmission
} from '../../../src/vscode-tests/factories/remote-queries/shared/variant-analysis-submission';
describe('Variant Analysis processor', function() {
const scannedRepos = createMockScannedRepos();
@@ -56,11 +60,17 @@ describe('Variant Analysis processor', function() {
'repositories': [
{
'fullName': access_mismatch_repos?.repositories[0].full_name,
'id': access_mismatch_repos?.repositories[0].id
'id': access_mismatch_repos?.repositories[0].id,
'private': access_mismatch_repos?.repositories[0].private,
'stargazersCount': access_mismatch_repos?.repositories[0].stargazers_count,
'updatedAt': access_mismatch_repos?.repositories[0].updated_at,
},
{
'fullName': access_mismatch_repos?.repositories[1].full_name,
'id': access_mismatch_repos?.repositories[1].id
'id': access_mismatch_repos?.repositories[1].id,
'private': access_mismatch_repos?.repositories[1].private,
'stargazersCount': access_mismatch_repos?.repositories[1].stargazers_count,
'updatedAt': access_mismatch_repos?.repositories[1].updated_at,
}
],
'repositoryCount': access_mismatch_repos?.repository_count
@@ -69,11 +79,17 @@ describe('Variant Analysis processor', function() {
'repositories': [
{
'fullName': no_codeql_db_repos?.repositories[0].full_name,
'id': no_codeql_db_repos?.repositories[0].id
'id': no_codeql_db_repos?.repositories[0].id,
'private': no_codeql_db_repos?.repositories[0].private,
'stargazersCount': no_codeql_db_repos?.repositories[0].stargazers_count,
'updatedAt': no_codeql_db_repos?.repositories[0].updated_at,
},
{
'fullName': no_codeql_db_repos?.repositories[1].full_name,
'id': no_codeql_db_repos?.repositories[1].id,
'private': no_codeql_db_repos?.repositories[1].private,
'stargazersCount': no_codeql_db_repos?.repositories[1].stargazers_count,
'updatedAt': no_codeql_db_repos?.repositories[1].updated_at,
}
],
'repositoryCount': 2
@@ -93,11 +109,17 @@ describe('Variant Analysis processor', function() {
'repositories': [
{
'fullName': over_limit_repos?.repositories[0].full_name,
'id': over_limit_repos?.repositories[0].id
'id': over_limit_repos?.repositories[0].id,
'private': over_limit_repos?.repositories[0].private,
'stargazersCount': over_limit_repos?.repositories[0].stargazers_count,
'updatedAt': over_limit_repos?.repositories[0].updated_at,
},
{
'fullName': over_limit_repos?.repositories[1].full_name,
'id': over_limit_repos?.repositories[1].id
'id': over_limit_repos?.repositories[1].id,
'private': over_limit_repos?.repositories[1].private,
'stargazersCount': over_limit_repos?.repositories[1].stargazers_count,
'updatedAt': over_limit_repos?.repositories[1].updated_at,
}
],
'repositoryCount': over_limit_repos?.repository_count
@@ -118,6 +140,8 @@ describe('Variant Analysis processor', function() {
'fullName': scannedRepo.repository.full_name,
'id': scannedRepo.repository.id,
'private': scannedRepo.repository.private,
'stargazersCount': scannedRepo.repository.stargazers_count,
'updatedAt': scannedRepo.repository.updated_at
},
'resultCount': scannedRepo.result_count
};