semantic-release/test/get-release-to-add.test.js
2022-11-23 16:02:51 -08:00

283 lines
8.1 KiB
JavaScript

import test from "ava";
import getReleaseToAdd from "../lib/get-release-to-add.js";
test("Return versions merged from release to maintenance branch, excluding lower than branch start range", (t) => {
const result = getReleaseToAdd({
branch: {
name: "2.x",
channel: "2.x",
type: "maintenance",
mergeRange: ">=2.0.0 <3.0.0",
tags: [
{ gitTag: "v2.0.0", version: "2.0.0", channels: ["2.x"] },
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
{ gitTag: "v2.1.0", version: "2.1.0", channels: [null] },
{ gitTag: "v2.1.1", version: "2.1.1", channels: [null] },
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: [null] },
],
},
branches: [{ name: "2.x", channel: "2.x" }, { name: "master" }],
options: { tagFormat: `v\${version}` },
});
t.deepEqual(result, {
lastRelease: { version: "2.1.0", channels: [null], gitTag: "v2.1.0", name: "v2.1.0", gitHead: "v2.1.0" },
currentRelease: {
type: "patch",
version: "2.1.1",
channels: [null],
gitTag: "v2.1.1",
name: "v2.1.1",
gitHead: "v2.1.1",
},
nextRelease: {
type: "patch",
version: "2.1.1",
channel: "2.x",
gitTag: "v2.1.1",
name: "v2.1.1",
gitHead: "v2.1.1",
},
});
});
test("Return versions merged between release branches", (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
tags: [
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null, "next"] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: ["next"] },
{ gitTag: "v2.0.0", version: "2.0.0", channels: ["next-major"] },
],
},
branches: [{ name: "master" }, { name: "next", channel: "next" }, { name: "next-major", channel: "next-major" }],
options: { tagFormat: `v\${version}` },
});
t.deepEqual(result, {
lastRelease: {
version: "1.1.0",
gitTag: "v1.1.0",
name: "v1.1.0",
gitHead: "v1.1.0",
channels: ["next"],
},
currentRelease: {
type: "major",
version: "2.0.0",
channels: ["next-major"],
gitTag: "v2.0.0",
name: "v2.0.0",
gitHead: "v2.0.0",
},
nextRelease: {
type: "major",
version: "2.0.0",
channel: null,
gitTag: "v2.0.0",
name: "v2.0.0",
gitHead: "v2.0.0",
},
});
});
test("Return releases sorted by ascending order", (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
tags: [
{ gitTag: "v2.0.0", version: "2.0.0", channels: ["next-major"] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: ["next"] },
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null, "next"] },
],
},
branches: [{ name: "master" }, { name: "next", channel: "next" }, { name: "next-major", channel: "next-major" }],
options: { tagFormat: `v\${version}` },
});
t.deepEqual(result, {
lastRelease: { version: "1.1.0", gitTag: "v1.1.0", name: "v1.1.0", gitHead: "v1.1.0", channels: ["next"] },
currentRelease: {
type: "major",
version: "2.0.0",
channels: ["next-major"],
gitTag: "v2.0.0",
name: "v2.0.0",
gitHead: "v2.0.0",
},
nextRelease: {
type: "major",
version: "2.0.0",
channel: null,
gitTag: "v2.0.0",
name: "v2.0.0",
gitHead: "v2.0.0",
},
});
});
test("No lastRelease", (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
tags: [{ gitTag: "v1.0.0", version: "1.0.0", channels: ["next"] }],
},
branches: [{ name: "master" }, { name: "next", channel: "next" }],
options: { tagFormat: `v\${version}` },
});
t.deepEqual(result, {
lastRelease: {},
currentRelease: {
type: "major",
version: "1.0.0",
channels: ["next"],
gitTag: "v1.0.0",
name: "v1.0.0",
gitHead: "v1.0.0",
},
nextRelease: {
type: "major",
version: "1.0.0",
channel: null,
gitTag: "v1.0.0",
name: "v1.0.0",
gitHead: "v1.0.0",
},
});
});
test("Ignore pre-release versions", (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
tags: [
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null, "next"] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: ["next"] },
{ gitTag: "v2.0.0-alpha.1", version: "2.0.0-alpha.1", channels: ["alpha"] },
],
},
branches: [
{ name: "master" },
{ name: "next", channel: "next" },
{ name: "alpha", type: "prerelease", channel: "alpha" },
],
options: { tagFormat: `v\${version}` },
});
t.deepEqual(result, {
lastRelease: { version: "1.0.0", channels: [null, "next"], gitTag: "v1.0.0", name: "v1.0.0", gitHead: "v1.0.0" },
currentRelease: {
type: "minor",
version: "1.1.0",
channels: ["next"],
gitTag: "v1.1.0",
name: "v1.1.0",
gitHead: "v1.1.0",
},
nextRelease: {
type: "minor",
version: "1.1.0",
channel: null,
gitTag: "v1.1.0",
name: "v1.1.0",
gitHead: "v1.1.0",
},
});
});
test('Exclude versions merged from release to maintenance branch if they have the same "channel"', (t) => {
const result = getReleaseToAdd({
branch: {
name: "2.x",
channel: "latest",
type: "maintenance",
mergeRange: ">=2.0.0 <3.0.0",
tags: [
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
{ gitTag: "v2.1.0", version: "2.1.0", channels: [null] },
{ gitTag: "v2.1.1", version: "2.1.1", channels: [null] },
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: [null] },
],
},
branches: [
{ name: "2.x", channel: "latest" },
{ name: "master", channel: "latest" },
],
options: { tagFormat: `v\${version}` },
});
t.is(result, undefined);
});
test('Exclude versions merged between release branches if they have the same "channel"', (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
channel: "latest",
tags: [
{ gitTag: "v1.0.0", channels: ["latest"], version: "1.0.0" },
{ gitTag: "v1.1.0", channels: ["latest"], version: "1.1.0" },
{ gitTag: "v2.0.0", channels: ["latest"], version: "2.0.0" },
],
},
branches: [
{ name: "master", channel: "latest" },
{ name: "next", channel: "latest" },
{ name: "next-major", channel: "latest" },
],
options: { tagFormat: `v\${version}` },
});
t.is(result, undefined);
});
test('Exclude versions merged between release branches if they all have "channel" set to "false"', (t) => {
const result = getReleaseToAdd({
branch: {
name: "master",
channel: false,
tags: [
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: [null] },
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
],
},
branches: [
{ name: "master", channel: false },
{ name: "next", channel: false },
{ name: "next-major", channel: false },
],
options: { tagFormat: `v\${version}` },
});
t.is(result, undefined);
});
test("Exclude versions number less than the latest version already released on that branch", (t) => {
const result = getReleaseToAdd({
branch: {
name: "2.x",
channel: "2.x",
type: "maintenance",
mergeRange: ">=2.0.0 <3.0.0",
tags: [
{ gitTag: "v2.0.0", version: "2.0.0", channels: ["2.x"] },
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
{ gitTag: "v2.1.0", version: "2.1.0", channels: [null] },
{ gitTag: "v2.1.1", version: "2.1.1", channels: [null, "2.x"] },
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null] },
{ gitTag: "v1.1.0", version: "1.1.0", channels: [null] },
],
},
branches: [{ name: "2.x", channel: "2.x" }, { name: "master" }],
options: { tagFormat: `v\${version}` },
});
t.is(result, undefined);
});