Improve test coverage

Signed-off-by: Erik Engervall <erik.engervall@gmail.com>
This commit is contained in:
Erik Engervall
2021-04-21 17:54:13 +02:00
parent 881e22c2cd
commit 99cabc5865
8 changed files with 205 additions and 27 deletions
@@ -20,7 +20,7 @@ import { render } from '@testing-library/react';
import {
mockApiClient,
mockCalverProject,
mockNextGitHubInfo,
mockNextGitHubInfoSemver,
mockReleaseBranch,
mockReleaseCandidateCalver,
mockReleaseVersionCalver,
@@ -36,7 +36,7 @@ jest.mock('../../contexts/ProjectContext', () => ({
useProjectContext: jest.fn(() => mockCalverProject),
}));
jest.mock('../../helpers/getRcGitHubInfo', () => ({
getRcGitHubInfo: () => mockNextGitHubInfo,
getRcGitHubInfo: () => mockNextGitHubInfoSemver,
}));
jest.mock('./hooks/useCreateRc', () => ({
useCreateRc: () =>
@@ -21,7 +21,7 @@ import {
mockApiClient,
mockCalverProject,
mockDefaultBranch,
mockNextGitHubInfo,
mockNextGitHubInfoCalver,
mockReleaseVersionCalver,
} from '../../../test-helpers/test-helpers';
import { useCreateRc } from './useCreateRc';
@@ -34,7 +34,7 @@ describe('useCreateRc', () => {
useCreateRc({
defaultBranch: mockDefaultBranch,
latestRelease: mockReleaseVersionCalver,
nextGitHubInfo: mockNextGitHubInfo,
nextGitHubInfo: mockNextGitHubInfoCalver,
pluginApiClient: mockApiClient,
project: mockCalverProject,
}),
@@ -53,7 +53,7 @@ describe('useCreateRc', () => {
useCreateRc({
defaultBranch: mockDefaultBranch,
latestRelease: mockReleaseVersionCalver,
nextGitHubInfo: mockNextGitHubInfo,
nextGitHubInfo: mockNextGitHubInfoCalver,
pluginApiClient: mockApiClient,
project: mockCalverProject,
successCb: jest.fn(),
@@ -81,12 +81,12 @@ describe('useCreateRc', () => {
Object {
"link": "mock_compareCommits_html_url",
"message": "Fetched commit comparison",
"secondaryMessage": "rc/1.2.3...rc/1.2.3",
"secondaryMessage": "rc/2020.01.01_1...rc/2020.01.01_1",
},
Object {
"link": "mock_createRelease_html_url",
"message": "Created Release Candidate \\"mock_createRelease_name\\"",
"secondaryMessage": "with tag \\"rc-1.2.3\\"",
"secondaryMessage": "with tag \\"rc-2020.01.01_1\\"",
},
Object {
"icon": "success",
@@ -80,11 +80,11 @@ describe('patch', () => {
"secondaryMessage": "with message \\"mock_commit_message\\"",
},
Object {
"message": "Forced branch \\"rc/1.2.3\\" to temporary commit \\"mock_commit_sha\\"",
"message": "Forced branch \\"rc/2020.01.01_1\\" to temporary commit \\"mock_commit_sha\\"",
},
Object {
"link": "mock_merge_html_url",
"message": "Merged temporary commit into \\"rc/1.2.3\\"",
"message": "Merged temporary commit into \\"rc/2020.01.01_1\\"",
"secondaryMessage": "with message \\"mock_merge_commit_message\\"",
},
Object {
@@ -0,0 +1,71 @@
/*
* Copyright 2021 Spotify AB
*
* 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 {
mockReleaseVersionCalver,
mockReleaseCandidateCalver,
} from '../../test-helpers/test-helpers';
import { getCalverTagParts } from './getCalverTagParts';
describe('getCalverTagParts', () => {
it('should return tagParts for RC tag', () => {
const result = getCalverTagParts(mockReleaseCandidateCalver.tagName);
expect(result).toMatchInlineSnapshot(`
Object {
"calver": "2020.01.01",
"patch": 1,
"prefix": "rc",
}
`);
});
it('should return tagParts for Version tag', () => {
const result = getCalverTagParts(mockReleaseVersionCalver.tagName);
expect(result).toMatchInlineSnapshot(`
Object {
"calver": "2020.01.01",
"patch": 1,
"prefix": "version",
}
`);
});
it('should return null for invalid prefix', () => {
expect(() =>
getCalverTagParts('invalid-2020.01.01_1'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid calver tag"`);
});
it('should return null for invalid calver (missing padded zero)', () => {
expect(() =>
getCalverTagParts('rc-2020.1.01_1'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid calver tag"`);
});
it('should return null for invalid calver (missing day)', () => {
expect(() =>
getCalverTagParts('rc-2020.01_1'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid calver tag"`);
});
it('should return null for invalid patch (letter instead of number)', () => {
expect(() =>
getCalverTagParts('rc-2020.01.01_a'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid calver tag"`);
});
});
@@ -0,0 +1,63 @@
/*
* Copyright 2021 Spotify AB
*
* 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 {
mockReleaseCandidateSemver,
mockReleaseVersionSemver,
} from '../../test-helpers/test-helpers';
import { getSemverTagParts } from './getSemverTagParts';
describe('getSemverTagParts', () => {
it('should return tagParts for RC tag', () =>
expect(getSemverTagParts(mockReleaseCandidateSemver.tagName))
.toMatchInlineSnapshot(`
Object {
"major": 1,
"minor": 2,
"patch": 3,
"prefix": "rc",
}
`));
it('should return tagParts for Version tag', () =>
expect(getSemverTagParts(mockReleaseVersionSemver.tagName))
.toMatchInlineSnapshot(`
Object {
"major": 1,
"minor": 2,
"patch": 3,
"prefix": "version",
}
`));
it('should throw for invalid prefix', () => {
expect(() =>
getSemverTagParts('invalid-1.2.3'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid semver tag"`);
});
it('should throw for invalid semver (missing patch)', () => {
expect(() =>
getSemverTagParts('rc-1.2'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid semver tag"`);
});
it('should throw for invalid semver (founds calver)', () => {
expect(() =>
getSemverTagParts('rc-1337.01.01_1'),
).toThrowErrorMatchingInlineSnapshot(`"Invalid semver tag, found calver"`);
});
});
@@ -43,7 +43,7 @@ describe('useGetGitHubBatchInfo', () => {
"id": 1,
"prerelease": false,
"tagName": "rc-2020.01.01_1",
"targetCommitish": "rc/1.2.3",
"targetCommitish": "rc/2020.01.01_1",
},
"releaseBranch": Object {
"commit": Object {
@@ -58,7 +58,12 @@ describe('testHelpers', () => {
"versioningStrategy": "calver",
},
"mockDefaultBranch": "mock_defaultBranch",
"mockNextGitHubInfo": Object {
"mockNextGitHubInfoCalver": Object {
"rcBranch": "rc/2020.01.01_1",
"rcReleaseTag": "rc-2020.01.01_1",
"releaseName": "Version 2020.01.01_1",
},
"mockNextGitHubInfoSemver": Object {
"rcBranch": "rc/1.2.3",
"rcReleaseTag": "rc-1.2.3",
"releaseName": "Version 1.2.3",
@@ -82,6 +87,13 @@ describe('testHelpers', () => {
"id": 1,
"prerelease": true,
"tagName": "rc-2020.01.01_1",
"targetCommitish": "rc/2020.01.01_1",
},
"mockReleaseCandidateSemver": Object {
"htmlUrl": "mock_release_html_url",
"id": 1,
"prerelease": true,
"tagName": "rc-1.2.3",
"targetCommitish": "rc/1.2.3",
},
"mockReleaseVersionCalver": Object {
@@ -89,7 +101,7 @@ describe('testHelpers', () => {
"id": 1,
"prerelease": false,
"tagName": "version-2020.01.01_1",
"targetCommitish": "rc/1.2.3",
"targetCommitish": "rc/2020.01.01_1",
},
"mockReleaseVersionSemver": Object {
"htmlUrl": "mock_release_html_url",
@@ -27,6 +27,18 @@ import { getRcGitHubInfo } from '../helpers/getRcGitHubInfo';
const mockOwner = 'mock_owner';
const mockRepo = 'mock_repo';
const A_CALVER_VERSION = '2020.01.01_1';
const MOCK_RELEASE_NAME_CALVER = `Version ${A_CALVER_VERSION}`;
const MOCK_RELEASE_BRANCH_NAME_CALVER = `rc/${A_CALVER_VERSION}`;
const MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER = `rc-${A_CALVER_VERSION}`;
const MOCK_RELEASE_VERSION_TAG_NAME_CALVER = `version-${A_CALVER_VERSION}`;
const A_SEMVER_VERSION = '1.2.3';
const MOCK_RELEASE_NAME_SEMVER = `Version ${A_SEMVER_VERSION}`;
const MOCK_RELEASE_BRANCH_NAME_SEMVER = `rc/${A_SEMVER_VERSION}`;
const MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER = `rc-${A_SEMVER_VERSION}`;
const MOCK_RELEASE_VERSION_TAG_NAME_SEMVER = `version-${A_SEMVER_VERSION}`;
export const mockSemverProject: Project = {
owner: mockOwner,
repo: mockRepo,
@@ -47,10 +59,16 @@ export const mockSearchSemver = `?versioningStrategy=${mockSemverProject.version
export const mockDefaultBranch = 'mock_defaultBranch';
export const mockNextGitHubInfo: ReturnType<typeof getRcGitHubInfo> = {
rcBranch: 'rc/1.2.3',
rcReleaseTag: 'rc-1.2.3',
releaseName: 'Version 1.2.3',
export const mockNextGitHubInfoSemver: ReturnType<typeof getRcGitHubInfo> = {
rcBranch: MOCK_RELEASE_BRANCH_NAME_SEMVER,
rcReleaseTag: MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER,
releaseName: MOCK_RELEASE_NAME_SEMVER,
};
export const mockNextGitHubInfoCalver: ReturnType<typeof getRcGitHubInfo> = {
rcBranch: MOCK_RELEASE_BRANCH_NAME_CALVER,
rcReleaseTag: MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER,
releaseName: MOCK_RELEASE_NAME_CALVER,
};
export const mockTagParts = {
@@ -74,24 +92,32 @@ const createMockRelease = ({
id: 1,
htmlUrl: 'mock_release_html_url',
prerelease,
tagName: 'rc-2020.01.01_1',
targetCommitish: 'rc/1.2.3',
tagName: MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER,
targetCommitish: MOCK_RELEASE_BRANCH_NAME_CALVER,
...rest,
});
export const mockReleaseCandidateCalver = createMockRelease({
prerelease: true,
tagName: 'rc-2020.01.01_1',
targetCommitish: 'rc/1.2.3',
tagName: MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER,
targetCommitish: MOCK_RELEASE_BRANCH_NAME_CALVER,
});
export const mockReleaseVersionCalver = createMockRelease({
prerelease: false,
tagName: 'version-2020.01.01_1',
targetCommitish: 'rc/1.2.3',
tagName: MOCK_RELEASE_VERSION_TAG_NAME_CALVER,
targetCommitish: MOCK_RELEASE_BRANCH_NAME_CALVER,
});
export const mockReleaseCandidateSemver = createMockRelease({
prerelease: true,
tagName: MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER,
targetCommitish: MOCK_RELEASE_BRANCH_NAME_SEMVER,
});
export const mockReleaseVersionSemver = createMockRelease({
prerelease: false,
tagName: 'version-1.2.3',
targetCommitish: 'rc/1.2.3',
tagName: MOCK_RELEASE_VERSION_TAG_NAME_SEMVER,
targetCommitish: MOCK_RELEASE_BRANCH_NAME_SEMVER,
});
/**
@@ -100,12 +126,18 @@ export const mockReleaseVersionSemver = createMockRelease({
const createMockBranch = ({
...rest
}: Partial<GetBranchResult> = {}): GetBranchResult => ({
name: 'rc/1.2.3',
name: MOCK_RELEASE_BRANCH_NAME_SEMVER,
commit: {
sha: 'mock_branch_commit_sha',
commit: { tree: { sha: 'mock_branch_commit_commit_tree_sha' } },
commit: {
tree: {
sha: 'mock_branch_commit_commit_tree_sha',
},
},
},
links: {
html: 'mock_branch_links_html',
},
links: { html: 'mock_branch_links_html' },
...rest,
});
export const mockReleaseBranch = createMockBranch();