From 75a865215cd70a1bd41e136d56ea5240b749e464 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 23 Oct 2021 11:47:54 -0500 Subject: [PATCH] Added duration and identity as well as minor refactoring Signed-off-by: Andre Wanlin --- plugins/azure-devops-backend/api-report.md | 3 + .../src/api/AzureDevOpsApi.test.ts | 70 +++++++++++++++++-- .../src/api/AzureDevOpsApi.ts | 15 ++-- plugins/azure-devops-backend/src/api/types.ts | 3 + 4 files changed, 78 insertions(+), 13 deletions(-) diff --git a/plugins/azure-devops-backend/api-report.md b/plugins/azure-devops-backend/api-report.md index 4b49872161..fac6261a39 100644 --- a/plugins/azure-devops-backend/api-report.md +++ b/plugins/azure-devops-backend/api-report.md @@ -81,7 +81,10 @@ export type RepoBuild = { status?: BuildStatus; result?: BuildResult; queueTime?: Date; + startTime?: Date; + finishTime?: Date; source: string; + uniqueName?: string; }; // Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.test.ts b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.test.ts index fd9aa169d5..fdd49c0440 100644 --- a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.test.ts +++ b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.test.ts @@ -13,19 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { mappedPullRequest, mappedRepoBuild } from './AzureDevOpsApi'; -import { PullRequest, RepoBuild } from './types'; + import { Build, BuildResult, BuildStatus, - DefinitionReference, -} from 'azure-devops-node-api/interfaces/BuildInterfaces'; -import { GitPullRequest, + GitRepository, + PullRequest, PullRequestStatus, -} from 'azure-devops-node-api/interfaces/GitInterfaces'; -import { GitRepository } from 'azure-devops-node-api/interfaces/TfvcInterfaces'; + RepoBuild, +} from './types'; +import { mappedPullRequest, mappedRepoBuild } from './AzureDevOpsApi'; + +import { DefinitionReference } from 'azure-devops-node-api/interfaces/BuildInterfaces'; import { IdentityRef } from 'azure-devops-node-api/interfaces/common/VSSInterfaces'; describe('AzureDevOpsApi', () => { @@ -41,16 +42,24 @@ describe('AzureDevOpsApi', () => { }, }; + const inputIdentityRef: IdentityRef = { + displayName: 'Jane Doe', + uniqueName: 'DOMAINjdoe', + }; + const inputBuild: Build = { id: 1, buildNumber: 'Build-1', status: BuildStatus.Completed, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), sourceBranch: 'refs/heads/develop', sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c', definition: inputBuildDefinition, _links: inputLinks, + requestedFor: inputIdentityRef, }; const outputRepoBuild: RepoBuild = { @@ -60,7 +69,10 @@ describe('AzureDevOpsApi', () => { status: BuildStatus.Completed, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), source: 'refs/heads/develop (f4f78b31)', + uniqueName: 'DOMAINjdoe', }; expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild); @@ -75,16 +87,24 @@ describe('AzureDevOpsApi', () => { }, }; + const inputIdentityRef: IdentityRef = { + displayName: 'Jane Doe', + uniqueName: 'DOMAINjdoe', + }; + const inputBuild: Build = { id: 1, buildNumber: 'Build-1', status: BuildStatus.Completed, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), sourceBranch: 'refs/heads/develop', sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c', definition: undefined, _links: inputLinks, + requestedFor: inputIdentityRef, }; const outputRepoBuild: RepoBuild = { @@ -94,7 +114,10 @@ describe('AzureDevOpsApi', () => { status: BuildStatus.Completed, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), source: 'refs/heads/develop (f4f78b31)', + uniqueName: 'DOMAINjdoe', }; expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild); @@ -109,16 +132,24 @@ describe('AzureDevOpsApi', () => { }, }; + const inputIdentityRef: IdentityRef = { + displayName: 'Jane Doe', + uniqueName: 'DOMAINjdoe', + }; + const inputBuild: Build = { id: 1, buildNumber: 'Build-1', status: undefined, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), sourceBranch: 'refs/heads/develop', sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c', definition: undefined, _links: inputLinks, + requestedFor: inputIdentityRef, }; const outputRepoBuild: RepoBuild = { @@ -128,7 +159,10 @@ describe('AzureDevOpsApi', () => { status: BuildStatus.None, result: BuildResult.Succeeded, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), source: 'refs/heads/develop (f4f78b31)', + uniqueName: 'DOMAINjdoe', }; expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild); @@ -143,16 +177,24 @@ describe('AzureDevOpsApi', () => { }, }; + const inputIdentityRef: IdentityRef = { + displayName: 'Jane Doe', + uniqueName: 'DOMAINjdoe', + }; + const inputBuild: Build = { id: 1, buildNumber: 'Build-1', status: BuildStatus.InProgress, result: undefined, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), sourceBranch: 'refs/heads/develop', sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c', definition: undefined, _links: inputLinks, + requestedFor: inputIdentityRef, }; const outputRepoBuild: RepoBuild = { @@ -162,7 +204,10 @@ describe('AzureDevOpsApi', () => { status: BuildStatus.InProgress, result: BuildResult.None, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), source: 'refs/heads/develop (f4f78b31)', + uniqueName: 'DOMAINjdoe', }; expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild); @@ -171,16 +216,24 @@ describe('AzureDevOpsApi', () => { describe('mappedRepoBuild with undefined link', () => { it('should return empty string for link', () => { + const inputIdentityRef: IdentityRef = { + displayName: 'Jane Doe', + uniqueName: 'DOMAINjdoe', + }; + const inputBuild: Build = { id: 1, buildNumber: 'Build-1', status: BuildStatus.InProgress, result: undefined, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), sourceBranch: 'refs/heads/develop', sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c', definition: undefined, _links: undefined, + requestedFor: inputIdentityRef, }; const outputRepoBuild: RepoBuild = { @@ -190,7 +243,10 @@ describe('AzureDevOpsApi', () => { status: BuildStatus.InProgress, result: BuildResult.None, queueTime: new Date('2020-09-12T06:10:23.9325232Z'), + startTime: new Date('2020-09-12T06:15:23.9325232Z'), + finishTime: new Date('2020-09-12T06:20:23.9325232Z'), source: 'refs/heads/develop (f4f78b31)', + uniqueName: 'DOMAINjdoe', }; expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild); diff --git a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts index 1a80a3d42b..26378496ea 100644 --- a/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts +++ b/plugins/azure-devops-backend/src/api/AzureDevOpsApi.ts @@ -111,7 +111,7 @@ export class AzureDevOpsApi { options: PullRequestOptions, ): Promise { this.logger?.debug( - `Calling Azure DevOps REST API, getting up to ${top} Pull Requests for Repository ${repoName} for Project ${projectName}`, + `Calling Azure DevOps REST API, getting up to ${options.top} Pull Requests for Repository ${repoName} for Project ${projectName}`, ); const gitRepository = await this.getGitRepository(projectName, repoName); @@ -144,11 +144,14 @@ export function mappedRepoBuild(build: Build): RepoBuild { title: [build.definition?.name, build.buildNumber] .filter(Boolean) .join(' - '), - link: build._links?.web.href ? build._links?.web.href : '', - status: build.status ? build.status : BuildStatus.None, - result: build.result ? build.result : BuildResult.None, + link: build._links?.web.href ?? '', + status: build.status ?? BuildStatus.None, + result: build.result ?? BuildResult.None, queueTime: build.queueTime, + startTime: build.startTime, + finishTime: build.finishTime, source: `${build.sourceBranch} (${build.sourceVersion?.substr(0, 8)})`, + uniqueName: build.requestedFor?.uniqueName ?? 'N/A', }; } @@ -160,8 +163,8 @@ export function mappedPullRequest( pullRequestId: pullRequest.pullRequestId, repoName: pullRequest.repository?.name, title: pullRequest.title, - uniqueName: pullRequest.createdBy?.uniqueName, - createdBy: pullRequest.createdBy?.displayName, + uniqueName: pullRequest.createdBy?.uniqueName ?? 'N/A', + createdBy: pullRequest.createdBy?.displayName ?? 'N/A', creationDate: pullRequest.creationDate, sourceRefName: pullRequest.sourceRefName, targetRefName: pullRequest.targetRefName, diff --git a/plugins/azure-devops-backend/src/api/types.ts b/plugins/azure-devops-backend/src/api/types.ts index 0fd30243af..fab61d26c9 100644 --- a/plugins/azure-devops-backend/src/api/types.ts +++ b/plugins/azure-devops-backend/src/api/types.ts @@ -41,7 +41,10 @@ export type RepoBuild = { status?: BuildStatus; result?: BuildResult; queueTime?: Date; + startTime?: Date; + finishTime?: Date; source: string; + uniqueName?: string; }; export type PullRequest = {