1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
import path from "path";
import chalk from "chalk";
import childProcess from "child_process";
import { setupTestFixtures, spyConsole } from "@turbo/test-utils";
import { create } from "../src/commands/create";
import type { CreateCommandArgument } from "../src/commands/create/types";
import { turboGradient } from "../src/logger";
import type { PackageManager } from "@turbo/workspaces";
// imports for mocks
import * as createProject from "../src/commands/create/createProject";
import * as turboWorkspaces from "@turbo/workspaces";
import { getWorkspaceDetailsMockReturnValue } from "./test-utils";
jest.mock("@turbo/workspaces", () => ({
__esModule: true,
...jest.requireActual("@turbo/workspaces"),
}));
describe("create-turbo", () => {
const { useFixture } = setupTestFixtures({
directory: path.join(__dirname, "../"),
});
const mockConsole = spyConsole();
test.each<{ packageManager: PackageManager }>([
{ packageManager: "yarn" },
{ packageManager: "npm" },
{ packageManager: "pnpm" },
])(
"outputs expected console messages when using $packageManager",
async ({ packageManager }) => {
const { root } = useFixture({ fixture: `create-turbo` });
const availableScripts = ["build", "test", "dev"];
const mockCreateProject = jest
.spyOn(createProject, "createProject")
.mockResolvedValue({
cdPath: "",
hasPackageJson: true,
availableScripts,
});
const mockGetWorkspaceDetails = jest
.spyOn(turboWorkspaces, "getWorkspaceDetails")
.mockResolvedValue(
getWorkspaceDetailsMockReturnValue({
root,
packageManager,
})
);
const mockExecSync = jest
.spyOn(childProcess, "execSync")
.mockImplementation(() => {
return "success";
});
await create(
root as CreateCommandArgument,
packageManager as CreateCommandArgument,
{
skipInstall: true,
example: "default",
}
);
const expected = `${chalk.bold(
turboGradient(">>> Success!")
)} Created a new Turborepo at "${path.relative(process.cwd(), root)}".`;
expect(mockConsole.log).toHaveBeenCalledWith(expected);
expect(mockConsole.log).toHaveBeenCalledWith(
"Inside that directory, you can run several commands:"
);
availableScripts.forEach((script) => {
expect(mockConsole.log).toHaveBeenCalledWith(
chalk.cyan(` ${packageManager} run ${script}`)
);
});
mockCreateProject.mockRestore();
mockGetWorkspaceDetails.mockRestore();
mockExecSync.mockRestore();
}
);
});
|