test: Added unit tests for utils.

Signed-off-by: Marley Powell <Marley.Powell@exclaimer.com>
This commit is contained in:
Marley Powell
2021-11-11 12:20:17 +00:00
parent 6ba7001659
commit 4e0fc8f8a4
@@ -0,0 +1,161 @@
/*
* Copyright 2021 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
DashboardPullRequest,
PullRequestVoteStatus,
Reviewer,
} from '@backstage/plugin-azure-devops-common';
import {
arrayExtract,
getCreatedByUserFilter,
getPullRequestGroups,
reviewerFilter,
} from './utils';
describe('getCreatedByUserFilter', () => {
it('should filter if pull request is created by user', () => {
const userEmail = 'user1@backstage.com';
const pr = {
createdBy: { uniqueName: userEmail },
} as DashboardPullRequest;
const result = getCreatedByUserFilter(userEmail)(pr);
expect(result).toBe(true);
});
it('should not filter if pull request is not created by user', () => {
const userEmail1 = 'user1@backstage.com';
const userEmail2 = 'user2@backstage.com';
const pr = {
createdBy: { uniqueName: userEmail1 },
} as DashboardPullRequest;
const result = getCreatedByUserFilter(userEmail2)(pr);
expect(result).toBe(false);
});
});
describe('reviewerFilter', () => {
it('should return false if reviewer has no vote and is not required', () => {
const reviewer = {
voteStatus: PullRequestVoteStatus.NoVote,
isRequired: false,
} as Reviewer;
const result = reviewerFilter(reviewer);
expect(result).toBe(false);
});
it('should return true if reviewer has no vote and is required', () => {
const reviewer = {
voteStatus: PullRequestVoteStatus.NoVote,
isRequired: true,
} as Reviewer;
const result = reviewerFilter(reviewer);
expect(result).toBe(true);
});
it('should return true if reviewer has a vote and is not a container', () => {
const reviewer = {
voteStatus: PullRequestVoteStatus.Approved,
isContainer: false,
} as Reviewer;
const result = reviewerFilter(reviewer);
expect(result).toBe(true);
});
it('should return true if reviewer has a vote and is a container', () => {
const reviewer = {
voteStatus: PullRequestVoteStatus.Approved,
isContainer: true,
} as Reviewer;
const result = reviewerFilter(reviewer);
expect(result).toBe(false);
});
});
describe('arrayExtract', () => {
it('should extract numbers greater than 3', () => {
const numbers = [1, 2, 3, 4, 5, 6];
const numberFilter = (num: number): boolean => num > 3;
const extractedNumbers = arrayExtract(numbers, numberFilter);
expect(numbers).toEqual([1, 2, 3]);
expect(extractedNumbers).toEqual([4, 5, 6]);
});
it('should extract even numbers', () => {
const numbers = [1, 2, 3, 4, 5, 6];
const numberFilter = (num: number): boolean => num % 2 === 0;
const extractedNumbers = arrayExtract(numbers, numberFilter);
expect(numbers).toEqual([1, 3, 5]);
expect(extractedNumbers).toEqual([2, 4, 6]);
});
});
describe('getPullRequestGroups', () => {
it('should create groups of pull requests based on the provided configs', () => {
const userEmail = 'user1@backstage.com';
const userEmail2 = 'user2@backstage.com';
const pullRequests = [
{
pullRequestId: 1,
createdBy: { uniqueName: userEmail },
} as DashboardPullRequest,
{
pullRequestId: 2,
createdBy: { uniqueName: userEmail },
} as DashboardPullRequest,
{
pullRequestId: 3,
createdBy: { uniqueName: userEmail2 },
} as DashboardPullRequest,
{
pullRequestId: 4,
createdBy: { uniqueName: userEmail2 },
} as DashboardPullRequest,
];
const configs = [
{ title: 'Created by me', filter: getCreatedByUserFilter(userEmail) },
{ title: 'Other PRs', filter: (_: unknown) => true, simplified: true },
];
const result = getPullRequestGroups(pullRequests, configs);
expect(result.length).toBe(2);
const group1 = result[0];
expect(group1.title).toBe('Created by me');
expect(group1.simplified).toBeFalsy();
expect(group1.pullRequests.length).toBe(2);
expect(group1.pullRequests).toContainEqual(
expect.objectContaining({ pullRequestId: 1 }),
);
expect(group1.pullRequests).toContainEqual(
expect.objectContaining({ pullRequestId: 2 }),
);
const group2 = result[1];
expect(group2.title).toBe('Other PRs');
expect(group2.simplified).toBe(true);
expect(group2.pullRequests.length).toBe(2);
expect(group2.pullRequests).toContainEqual(
expect.objectContaining({ pullRequestId: 3 }),
);
expect(group2.pullRequests).toContainEqual(
expect.objectContaining({ pullRequestId: 4 }),
);
});
});