UNPKG

lerna-changelog

Version:

Generate a changelog for a lerna monorepo

171 lines (170 loc) 7.14 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; jest.mock("../src/progress-bar"); jest.mock("../src/changelog"); jest.mock("../src/github-api"); jest.mock("./git"); jest.mock("./fetch"); describe("Changelog", () => { describe("packageFromPath", () => { const MockedChangelog = require("./changelog").default; const TESTS = [ ["", ""], ["foo.js", ""], ["packages/foo.js", ""], ["packages/foo/bar.js", "foo"], ["packages/foo/bar/baz.js", "foo"], ["packages/@foo/bar.js", "@foo"], ["packages/@foo/bar/baz.js", "@foo/bar"], ]; for (let [input, expected] of TESTS) { it(`${input} -> ${expected}`, () => { const changelog = new MockedChangelog(); expect(changelog.packageFromPath(input)).toEqual(expected); }); } }); describe("getCommitInfos", () => { beforeEach(() => { require("./fetch").__resetMockResponses(); require("./git").listCommits.mockImplementation(() => [ { sha: "a0000005", refName: "HEAD -> master, tag: v0.2.0, origin/master, origin/HEAD", summary: "chore(release): releasing component", date: "2017-01-01", }, { sha: "a0000004", refName: "", summary: "Merge pull request #2 from my-feature", date: "2017-01-01", }, { sha: "a0000003", refName: "", summary: "feat(module) Add new module (#2)", date: "2017-01-01", }, { sha: "a0000002", refName: "", summary: "refactor(module) Simplify implementation", date: "2017-01-01", }, { sha: "a0000001", refName: "tag: v0.1.0", summary: "chore(release): releasing component", date: "2017-01-01", }, ]); require("./git").listTagNames.mockImplementation(() => ["v0.2.0", "v0.1.1", "v0.1.0", "v0.0.1"]); require("./git").changedPaths.mockImplementation(() => []); const usersCache = { "https://api.github.com/users/test-user": { body: { login: "test-user", html_url: "https://github.com/test-user", name: "Test User", }, }, }; const issuesCache = { "https://api.github.com/repos/lerna/lerna-changelog/issues/2": { body: { number: 2, title: "This is the commit title for the issue (#2)", labels: [{ name: "Type: New Feature" }, { name: "Status: In Progress" }], user: usersCache["https://api.github.com/users/test-user"].body, }, }, }; require("./fetch").__setMockResponses(Object.assign(Object.assign({}, usersCache), issuesCache)); }); afterEach(() => { jest.resetAllMocks(); }); it("parse commits with different tags", () => __awaiter(void 0, void 0, void 0, function* () { const MockedChangelog = require("./changelog").default; const changelog = new MockedChangelog(); const commitsInfo = yield changelog.getCommitInfos(); expect(commitsInfo).toMatchSnapshot(); })); }); describe("getCommitters", () => { beforeEach(() => { require("./fetch").__resetMockResponses(); const usersCache = { "https://api.github.com/users/test-user": { body: { login: "test-user", html_url: "https://github.com/test-user", name: "Test User", }, }, "https://api.github.com/users/test-user-1": { body: { login: "test-user-1", html_url: "https://github.com/test-user-1", name: "Test User 1", }, }, "https://api.github.com/users/test-user-2": { body: { login: "test-user-2", html_url: "https://github.com/test-user-2", name: "Test User 2", }, }, "https://api.github.com/users/user-bot": { body: { login: "user-bot", html_url: "https://github.com/user-bot", name: "User Bot", }, }, }; require("./fetch").__setMockResponses(usersCache); }); it("get list of valid commiters", () => __awaiter(void 0, void 0, void 0, function* () { const MockedChangelog = require("./changelog").default; const changelog = new MockedChangelog({ ignoreCommitters: ["user-bot"], }); const testCommits = [ { commitSHA: "a0000004", githubIssue: { user: { login: "test-user-1" } }, }, { commitSHA: "a0000003", githubIssue: { user: { login: "test-user-2" } }, }, { commitSHA: "a0000002", githubIssue: { user: { login: "user-bot" } } }, { commitSHA: "a0000001" }, ]; const committers = yield changelog.getCommitters(testCommits); expect(committers).toEqual([ { login: "test-user-1", html_url: "https://github.com/test-user-1", name: "Test User 1", }, { login: "test-user-2", html_url: "https://github.com/test-user-2", name: "Test User 2", }, ]); })); }); });