diff --git a/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx b/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx index 461f04a65d..084754ce06 100644 --- a/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx +++ b/plugins/github-release-manager/src/cards/CreateRc/CreateRc.test.tsx @@ -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: () => diff --git a/plugins/github-release-manager/src/cards/CreateRc/hooks/useCreateRc.test.tsx b/plugins/github-release-manager/src/cards/CreateRc/hooks/useCreateRc.test.tsx index e4549b5cb8..8da92a4f0e 100644 --- a/plugins/github-release-manager/src/cards/CreateRc/hooks/useCreateRc.test.tsx +++ b/plugins/github-release-manager/src/cards/CreateRc/hooks/useCreateRc.test.tsx @@ -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", diff --git a/plugins/github-release-manager/src/cards/Patch/hooks/usePatch.test.ts b/plugins/github-release-manager/src/cards/Patch/hooks/usePatch.test.ts index a7b6b2b58d..240d39292c 100644 --- a/plugins/github-release-manager/src/cards/Patch/hooks/usePatch.test.ts +++ b/plugins/github-release-manager/src/cards/Patch/hooks/usePatch.test.ts @@ -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 { diff --git a/plugins/github-release-manager/src/helpers/tagParts/getCalverTagParts.test.ts b/plugins/github-release-manager/src/helpers/tagParts/getCalverTagParts.test.ts new file mode 100644 index 0000000000..238abe720a --- /dev/null +++ b/plugins/github-release-manager/src/helpers/tagParts/getCalverTagParts.test.ts @@ -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"`); + }); +}); diff --git a/plugins/github-release-manager/src/helpers/tagParts/getSemverTagParts.test.ts b/plugins/github-release-manager/src/helpers/tagParts/getSemverTagParts.test.ts new file mode 100644 index 0000000000..9977ab7add --- /dev/null +++ b/plugins/github-release-manager/src/helpers/tagParts/getSemverTagParts.test.ts @@ -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"`); + }); +}); diff --git a/plugins/github-release-manager/src/hooks/useGetGitHubBatchInfo.test.ts b/plugins/github-release-manager/src/hooks/useGetGitHubBatchInfo.test.ts index 54ecfa866a..7d45fd111a 100644 --- a/plugins/github-release-manager/src/hooks/useGetGitHubBatchInfo.test.ts +++ b/plugins/github-release-manager/src/hooks/useGetGitHubBatchInfo.test.ts @@ -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 { diff --git a/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts b/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts index e6765a05ed..8dfa3e6fd5 100644 --- a/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts +++ b/plugins/github-release-manager/src/test-helpers/test-helpers.test.ts @@ -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", diff --git a/plugins/github-release-manager/src/test-helpers/test-helpers.ts b/plugins/github-release-manager/src/test-helpers/test-helpers.ts index 3daa449376..735bcd7d48 100644 --- a/plugins/github-release-manager/src/test-helpers/test-helpers.ts +++ b/plugins/github-release-manager/src/test-helpers/test-helpers.ts @@ -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 = { - rcBranch: 'rc/1.2.3', - rcReleaseTag: 'rc-1.2.3', - releaseName: 'Version 1.2.3', +export const mockNextGitHubInfoSemver: ReturnType = { + rcBranch: MOCK_RELEASE_BRANCH_NAME_SEMVER, + rcReleaseTag: MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER, + releaseName: MOCK_RELEASE_NAME_SEMVER, +}; + +export const mockNextGitHubInfoCalver: ReturnType = { + 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 => ({ - 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();