227 lines
5.5 KiB
Plaintext
227 lines
5.5 KiB
Plaintext
|
import { enterPre, exitPre, readPreState } from "./index";
|
||
|
import * as fs from "fs-extra";
|
||
|
import path from "path";
|
||
|
import {
|
||
|
PreEnterButInPreModeError,
|
||
|
PreExitButNotInPreModeError,
|
||
|
} from "@changesets/errors";
|
||
|
import { testdir } from "@changesets/test-utils";
|
||
|
|
||
|
describe("enterPre", () => {
|
||
|
it("should enter", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
});
|
||
|
await enterPre(cwd, "next");
|
||
|
|
||
|
expect(await fs.readJson(path.join(cwd, ".changeset", "pre.json")))
|
||
|
.toMatchInlineSnapshot(`
|
||
|
{
|
||
|
"changesets": [],
|
||
|
"initialVersions": {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
"mode": "pre",
|
||
|
"tag": "next",
|
||
|
}
|
||
|
`);
|
||
|
});
|
||
|
it("should throw if already in pre", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
".changeset/pre.json": JSON.stringify({
|
||
|
changesets: [],
|
||
|
initialVersions: {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
mode: "pre",
|
||
|
tag: "next",
|
||
|
}),
|
||
|
});
|
||
|
await expect(enterPre(cwd, "some-tag")).rejects.toBeInstanceOf(
|
||
|
PreEnterButInPreModeError
|
||
|
);
|
||
|
});
|
||
|
it("should enter if already exited pre mode", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
".changeset/pre.json": JSON.stringify({
|
||
|
changesets: ["slimy-dingos-whisper"],
|
||
|
initialVersions: {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
mode: "exit",
|
||
|
tag: "beta",
|
||
|
}),
|
||
|
});
|
||
|
await enterPre(cwd, "next");
|
||
|
expect(await fs.readJson(path.join(cwd, ".changeset", "pre.json")))
|
||
|
.toMatchInlineSnapshot(`
|
||
|
{
|
||
|
"changesets": [
|
||
|
"slimy-dingos-whisper",
|
||
|
],
|
||
|
"initialVersions": {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
"mode": "pre",
|
||
|
"tag": "next",
|
||
|
}
|
||
|
`);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("exitPre", () => {
|
||
|
it("should exit", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
".changeset/pre.json": JSON.stringify({
|
||
|
changesets: [],
|
||
|
initialVersions: {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
mode: "pre",
|
||
|
tag: "next",
|
||
|
}),
|
||
|
});
|
||
|
await exitPre(cwd);
|
||
|
|
||
|
expect(await fs.readJson(path.join(cwd, ".changeset", "pre.json")))
|
||
|
.toMatchInlineSnapshot(`
|
||
|
{
|
||
|
"changesets": [],
|
||
|
"initialVersions": {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
"mode": "exit",
|
||
|
"tag": "next",
|
||
|
}
|
||
|
`);
|
||
|
});
|
||
|
it("should throw if not in pre", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
".changeset/config.json": JSON.stringify({}),
|
||
|
});
|
||
|
await expect(exitPre(cwd)).rejects.toBeInstanceOf(
|
||
|
PreExitButNotInPreModeError
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test("readPreState reads the pre state", async () => {
|
||
|
const cwd = await testdir({
|
||
|
"package.json": JSON.stringify({
|
||
|
private: true,
|
||
|
workspaces: ["packages/*"],
|
||
|
}),
|
||
|
"packages/pkg-a/package.json": JSON.stringify({
|
||
|
name: "pkg-a",
|
||
|
version: "1.0.0",
|
||
|
dependencies: {
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
}),
|
||
|
"packages/pkg-b/package.json": JSON.stringify({
|
||
|
name: "pkg-b",
|
||
|
version: "1.0.0",
|
||
|
}),
|
||
|
".changeset/pre.json": JSON.stringify({
|
||
|
changesets: [],
|
||
|
initialVersions: {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
mode: "pre",
|
||
|
tag: "next",
|
||
|
}),
|
||
|
});
|
||
|
expect(await readPreState(cwd)).toMatchInlineSnapshot(`
|
||
|
{
|
||
|
"changesets": [],
|
||
|
"initialVersions": {
|
||
|
"pkg-a": "1.0.0",
|
||
|
"pkg-b": "1.0.0",
|
||
|
},
|
||
|
"mode": "pre",
|
||
|
"tag": "next",
|
||
|
}
|
||
|
`);
|
||
|
});
|