Skip to content

Commit

Permalink
test(version): Assert on mocked releases, not calls
Browse files Browse the repository at this point in the history
  • Loading branch information
evocateur committed Feb 10, 2021
1 parent 1f17e0c commit 63f18ba
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 20 deletions.
15 changes: 13 additions & 2 deletions commands/__mocks__/@lerna/github-client.js
@@ -1,12 +1,23 @@
"use strict";

const releases = new Map();

// keep test data isolated
afterEach(() => {
releases.clear();
});

const client = {
repos: {
createRelease: jest.fn(),
createRelease: jest.fn((opts) => {
releases.set(opts.name, opts);
return Promise.resolve();
}),
},
};

module.exports.createGitHubClient = () => client;
module.exports.createGitHubClient = jest.fn(() => client);
module.exports.createGitHubClient.releases = releases;
module.exports.parseGitRepo = () => ({
owner: "lerna",
name: "lerna",
Expand Down
15 changes: 13 additions & 2 deletions commands/__mocks__/@lerna/gitlab-client.js
@@ -1,9 +1,20 @@
"use strict";

const releases = new Map();

// keep test data isolated
afterEach(() => {
releases.clear();
});

const client = {
repos: {
createRelease: jest.fn(),
createRelease: jest.fn((opts) => {
releases.set(opts.name, opts);
return Promise.resolve();
}),
},
};

module.exports.createGitLabClient = () => client;
module.exports.createGitLabClient = jest.fn(() => client);
module.exports.createGitLabClient.releases = releases;
32 changes: 16 additions & 16 deletions commands/version/__tests__/version-create-release.test.js
Expand Up @@ -10,8 +10,8 @@ jest.mock("../lib/is-behind-upstream");
jest.mock("../lib/remote-branch-exists");

// mocked modules
const githubClient = require("@lerna/github-client").createGitHubClient();
const gitlabClient = require("@lerna/gitlab-client").createGitLabClient();
const { createGitHubClient } = require("@lerna/github-client");
const { createGitLabClient } = require("@lerna/gitlab-client");
const { recommendVersion } = require("@lerna/conventional-commits");

// helpers
Expand All @@ -21,15 +21,15 @@ const initFixture = require("@lerna-test/init-fixture")(__dirname);
const lernaVersion = require("@lerna-test/command-runner")(require("../command"));

describe.each([
["github", githubClient],
["gitlab", gitlabClient],
["github", createGitHubClient],
["gitlab", createGitLabClient],
])("--create-release %s", (type, client) => {
it("does not create a release if --no-push is passed", async () => {
const cwd = await initFixture("independent");

await lernaVersion(cwd)("--create-release", type, "--conventional-commits", "--no-push");

expect(client.repos.createRelease).not.toHaveBeenCalled();
expect(client.releases.size).toBe(0);
});

it("throws an error if --conventional-commits is not passed", async () => {
Expand All @@ -38,7 +38,7 @@ describe.each([

await expect(command).rejects.toThrow("To create a release, you must enable --conventional-commits");

expect(client.repos.createRelease).not.toHaveBeenCalled();
expect(client.releases.size).toBe(0);
});

it("throws an error if --no-changelog also passed", async () => {
Expand All @@ -47,7 +47,7 @@ describe.each([

await expect(command).rejects.toThrow("To create a release, you cannot pass --no-changelog");

expect(client.repos.createRelease).not.toHaveBeenCalled();
expect(client.releases.size).toBe(0);
});

it("marks a version as a pre-release if it contains a valid part", async () => {
Expand All @@ -57,8 +57,8 @@ describe.each([

await lernaVersion(cwd)("--create-release", type, "--conventional-commits");

expect(client.repos.createRelease).toHaveBeenCalledTimes(1);
expect(client.repos.createRelease).toHaveBeenCalledWith({
expect(client.releases.size).toBe(1);
expect(client.releases.get("v2.0.0-alpha.1")).toEqual({
owner: "lerna",
repo: "lerna",
tag_name: "v2.0.0-alpha.1",
Expand All @@ -83,9 +83,9 @@ describe.each([

await lernaVersion(cwd)("--create-release", type, "--conventional-commits");

expect(client.repos.createRelease).toHaveBeenCalledTimes(5);
expect(client.releases.size).toBe(5);
versionBumps.forEach((version, name) => {
expect(client.repos.createRelease).toHaveBeenCalledWith({
expect(client.releases.get(`${name}@${version}`)).toEqual({
owner: "lerna",
repo: "lerna",
tag_name: `${name}@${version}`,
Expand All @@ -104,8 +104,8 @@ describe.each([

await lernaVersion(cwd)("--create-release", type, "--conventional-commits");

expect(client.repos.createRelease).toHaveBeenCalledTimes(1);
expect(client.repos.createRelease).toHaveBeenCalledWith({
expect(client.releases.size).toBe(1);
expect(client.releases.get("v1.1.0")).toEqual({
owner: "lerna",
repo: "lerna",
tag_name: "v1.1.0",
Expand All @@ -123,7 +123,7 @@ describe("legacy option --github-release", () => {

await lernaVersion(cwd)("--github-release", "--conventional-commits");

expect(githubClient.repos.createRelease).toHaveBeenCalled();
expect(createGitHubClient.releases.size).toBe(1);
});
});

Expand All @@ -134,7 +134,7 @@ describe("--create-release [unrecognized]", () => {

await expect(command).rejects.toThrow("create-release");

expect(githubClient.repos.createRelease).not.toHaveBeenCalled();
expect(gitlabClient.repos.createRelease).not.toHaveBeenCalled();
expect(createGitHubClient.releases.size).toBe(0);
expect(createGitLabClient.releases.size).toBe(0);
});
});

0 comments on commit 63f18ba

Please sign in to comment.