UNPKG

@kazupon/lerna-changelog

Version:

Generate a changelog for a lerna monorepo

206 lines (205 loc) 7.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const markdown_renderer_1 = __importDefault(require("./markdown-renderer")); const UNRELEASED_TAG = '___unreleased___'; const BASIC_COMMIT = { githubIssue: { title: 'My cool PR', user: { login: 'hzoo', html_url: 'http://hzoo.com' } } }; const COMMIT_WITH_NUMBER = { githubIssue: { title: 'My cool PR', user: { login: 'hzoo', html_url: 'http://hzoo.com' }, number: 42, pull_request: { html_url: 'http://github.com/42' } } }; const COMMIT_WITH_GH_ISSUE_REF = { githubIssue: { title: 'My cool PR (resolved #123)', user: { login: 'hzoo', html_url: 'http://hzoo.com' } } }; const COMMIT_WITH_PHAB_ISSUE_REF = { githubIssue: { title: 'My cool PR (resolved T42)', user: { login: 'hzoo', html_url: 'http://hzoo.com' } } }; function renderer(options = {}) { return new markdown_renderer_1.default({ baseIssueUrl: 'http://foo.bar/', categories: [], unreleasedName: 'Unreleased', ...options }); } function getToday() { return '2018-07-10'; } describe('MarkdownRenderer', () => { describe('renderPackageNames', () => { it(`renders an empty list of package names as "Other"`, () => { const result = renderer().renderPackageNames([]); expect(result).toEqual('Other'); }); it(`renders a single package name`, () => { const result = renderer().renderPackageNames(['package1']); expect(result).toEqual('`package1`'); }); it(`renders a list of package names`, () => { const result = renderer().renderPackageNames([ 'package1', 'package2', 'package3' ]); expect(result).toEqual('`package1`, `package2`, `package3`'); }); }); describe('renderContributionList', () => { it(`renders a list of contributions`, () => { const emptyCommit = {}; const result = renderer().renderContributionList([ BASIC_COMMIT, emptyCommit, COMMIT_WITH_NUMBER ]); expect(result).toMatchSnapshot(); }); }); describe('renderContribution', () => { it(`returns undefined if "githubIssue" is not set`, () => { const result = renderer().renderContribution({}); expect(result).toBeUndefined(); }); it(`renders basic GitHub PRs`, () => { const result = renderer().renderContribution(BASIC_COMMIT); expect(result).toEqual('My cool PR ([@hzoo](http://hzoo.com))'); }); it(`renders GitHub PRs with numbers`, () => { const result = renderer().renderContribution(COMMIT_WITH_NUMBER); expect(result).toEqual('[#42](http://github.com/42) My cool PR ([@hzoo](http://hzoo.com))'); }); it(`normalizes GitHub issue references`, () => { const result = renderer().renderContribution(COMMIT_WITH_GH_ISSUE_REF); expect(result).toEqual('My cool PR (Closes [#123](http://foo.bar/123)) ([@hzoo](http://hzoo.com))'); }); it(`normalizes Phabricator issue references`, () => { const result = renderer().renderContribution(COMMIT_WITH_PHAB_ISSUE_REF); expect(result).toEqual('My cool PR (Closes [#42](http://foo.bar/42)) ([@hzoo](http://hzoo.com))'); }); }); describe('renderContributorList', () => { it(`renders a list of GitHub users`, () => { const user1 = { login: 'hzoo', name: '', html_url: 'https://github.com/hzoo' }; const user2 = { login: 'Turbo87', name: 'Tobias Bieniek', html_url: 'https://github.com/Turbo87' }; const result = renderer().renderContributorList([user1, user2]); expect(result).toMatchSnapshot(); }); }); describe('renderContributor', () => { it(`renders GitHub user without name`, () => { const result = renderer().renderContributor({ login: 'foo', name: '', html_url: 'http://github.com/foo' }); expect(result).toEqual('[@foo](http://github.com/foo)'); }); it(`renders GitHub user with name`, () => { const result = renderer().renderContributor({ login: 'foo', name: 'Foo Bar', html_url: 'http://github.com/foo' }); expect(result).toEqual('Foo Bar ([@foo](http://github.com/foo))'); }); }); describe('groupByCategory', () => { it('group commits by category', () => { const r = renderer({ categories: [ ':rocket: New Feature', ':boom: Breaking Change', ':bug: Bug Fix', ':nail_care: Enhancement', ':memo: Documentation', ':house: Maintenance' ] }); const testCommits = [ { commitSHA: 'a0000005', categories: [] }, { commitSHA: 'a0000004', categories: [':bug: Bug Fix'] }, { commitSHA: 'a0000003', categories: [':rocket: New Feature'] }, { commitSHA: 'a0000002', categories: [] }, { commitSHA: 'a0000001', categories: [':bug: Bug Fix'] } ]; const commitsByCategory = r['groupByCategory'](testCommits); expect(commitsByCategory).toMatchSnapshot(); }); }); describe('renderRelease', () => { it(`renders unreleased commits`, () => { const release = { name: UNRELEASED_TAG, date: getToday(), commits: [ { ...BASIC_COMMIT, categories: [':rocket: New Feature'] } ] }; const options = { categories: [':rocket: New Feature'] }; const result = renderer(options).renderRelease(release); expect(result).toMatchSnapshot(); }); it(`renders unreleased commits, with named next release`, () => { const release = { name: UNRELEASED_TAG, date: getToday(), commits: [ { ...BASIC_COMMIT, categories: [':rocket: New Feature'] } ] }; const options = { categories: [':rocket: New Feature'], unreleasedName: 'v2.0.0-alpha.0' }; const result = renderer(options).renderRelease(release); expect(result).toMatchSnapshot(); }); }); });