From 1040731e321b120bf1540d644222064104cb64cf Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Tue, 10 Sep 2024 22:07:08 -0400 Subject: [PATCH] ci(release-commenter): update tests for lock/unlock feature --- .../src/__snapshots__/index.test.ts.snap | 33 ++++++++++ .../release-commenter/src/index.test.ts | 65 ++++++++++++++++--- 2 files changed, 88 insertions(+), 10 deletions(-) diff --git a/.github/actions/release-commenter/src/__snapshots__/index.test.ts.snap b/.github/actions/release-commenter/src/__snapshots__/index.test.ts.snap index e4f2c49fc71..822fc263007 100644 --- a/.github/actions/release-commenter/src/__snapshots__/index.test.ts.snap +++ b/.github/actions/release-commenter/src/__snapshots__/index.test.ts.snap @@ -194,6 +194,39 @@ exports[`tests main test 1`] = ` }, ], }, + "get": [MockFunction] { + "calls": [ + [ + { + "issue_number": 3, + }, + ], + [ + { + "issue_number": 123, + }, + ], + [ + { + "issue_number": 7, + }, + ], + ], + "results": [ + { + "type": "return", + "value": Promise {}, + }, + { + "type": "return", + "value": Promise {}, + }, + { + "type": "return", + "value": Promise {}, + }, + ], + }, }, "repos": { "compareCommits": [MockFunction] { diff --git a/.github/actions/release-commenter/src/index.test.ts b/.github/actions/release-commenter/src/index.test.ts index 27f95617b1c..523b3cb1ce0 100644 --- a/.github/actions/release-commenter/src/index.test.ts +++ b/.github/actions/release-commenter/src/index.test.ts @@ -1,5 +1,6 @@ import type * as githubModule from '@actions/github' import type * as coreModule from '@actions/core' +import { mock } from 'node:test' jest.mock('@actions/core') jest.mock('@actions/github') @@ -28,7 +29,6 @@ describe('tests', () => { beforeEach(() => { tagFilter = null currentTag = 'current_tag_name' - ;(github.context as any) = { payload: { repo: { @@ -46,7 +46,6 @@ describe('tests', () => { expect(token).toBe('GITHUB_TOKEN_VALUE') return mockOctokit }) as any) - ;(core.getInput as any).mockImplementation((key: string) => { if (key == 'GITHUB_TOKEN') { return 'GITHUB_TOKEN_VALUE' @@ -72,6 +71,7 @@ describe('tests', () => { simpleMockOctokit = { rest: { issues: { + get: jest.fn(() => Promise.resolve({ data: { locked: false } })), createComment: jest.fn(() => Promise.resolve()), addLabels: jest.fn(() => Promise.resolve()), }, @@ -115,9 +115,9 @@ describe('tests', () => { }) afterEach(() => { - expect(core.error).not.toBeCalled() - expect(core.warning).not.toBeCalled() - expect(core.setFailed).not.toBeCalled() + expect(core.error).not.toHaveBeenCalled() + expect(core.warning).not.toHaveBeenCalled() + expect(core.setFailed).not.toHaveBeenCalled() }) test('main test', async () => { @@ -125,6 +125,7 @@ describe('tests', () => { ...simpleMockOctokit, rest: { issues: { + get: jest.fn(() => Promise.resolve({ data: { locked: false } })), createComment: jest.fn(() => Promise.resolve()), addLabels: jest.fn(() => Promise.resolve()), }, @@ -230,6 +231,7 @@ describe('tests', () => { await new Promise(setImmediate) expect(mockOctokit).toMatchSnapshot() + expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(3) }) describe('can filter tags', () => { @@ -276,6 +278,7 @@ describe('tests', () => { ...simpleMockOctokit, rest: { issues: { + get: jest.fn(() => Promise.resolve({ data: { locked: false } })), createComment: jest.fn(() => Promise.resolve()), addLabels: jest.fn(() => Promise.resolve()), }, @@ -313,7 +316,7 @@ describe('tests', () => { await new Promise(resolve => setImmediate(() => resolve())) - expect(github.getOctokit).toBeCalled() + expect(github.getOctokit).toHaveBeenCalled() expect(mockOctokit.rest.repos.compareCommits.mock.calls).toEqual([ [{ base: prevTag, head: currentTag }], ]) @@ -334,11 +337,53 @@ describe('tests', () => { await new Promise(resolve => setImmediate(() => resolve())) - expect(github.getOctokit).toBeCalled() - expect(mockOctokit.rest.issues.createComment).not.toBeCalled() + expect(github.getOctokit).toHaveBeenCalled() + expect(mockOctokit.rest.issues.createComment).not.toHaveBeenCalled() + }) + + it('should unlock and comment', async () => { + mockOctokit = { + ...simpleMockOctokit, + rest: { + ...simpleMockOctokit.rest, + issues: { + // Return locked for both issues to be commented on + get: jest.fn(() => Promise.resolve({ data: { locked: true } })), + lock: jest.fn(() => Promise.resolve()), + unlock: jest.fn(() => Promise.resolve()), + createComment: jest.fn(() => Promise.resolve()), + }, + }, + graphql: jest.fn(() => + Promise.resolve({ + resource: { + messageHeadlineHTML: '', + messageBodyHTML: + 'Closes

Closes', + associatedPullRequests: { + pageInfo: { hasNextPage: false }, + edges: [], + }, + }, + }), + ), + } + + jest.isolateModules(() => { + require('./index') + }) + + await new Promise(resolve => setImmediate(() => resolve())) + + expect(github.getOctokit).toHaveBeenCalled() + + // Should call once for both linked issues + expect(mockOctokit.rest.issues.unlock).toHaveBeenCalledTimes(2) + expect(mockOctokit.rest.issues.createComment).toHaveBeenCalledTimes(2) + expect(mockOctokit.rest.issues.lock).toHaveBeenCalledTimes(2) }) - it('can apply labels', async () => { + it.skip('can apply labels', async () => { labelTemplate = ':dart: landed,release-{release_tag},{release_name}' jest.isolateModules(() => { @@ -347,7 +392,7 @@ describe('tests', () => { await new Promise(resolve => setImmediate(() => resolve())) - expect(github.getOctokit).toBeCalled() + expect(github.getOctokit).toHaveBeenCalled() expect(mockOctokit.rest.issues.addLabels.mock.calls).toMatchSnapshot() }) })