aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts')
-rw-r--r--packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts576
1 files changed, 576 insertions, 0 deletions
diff --git a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts
new file mode 100644
index 0000000..1015589
--- /dev/null
+++ b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts
@@ -0,0 +1,576 @@
+import { setupTestFixtures } from "@turbo/test-utils";
+import getTurboUpgradeCommand from "../src/commands/migrate/steps/getTurboUpgradeCommand";
+import * as utils from "../src/commands/migrate/utils";
+import * as getPackageManager from "../src/utils/getPackageManager";
+import * as getPackageManagerVersion from "../src/utils/getPackageManagerVersion";
+
+const LOCAL_INSTALL_COMMANDS = [
+ // npm - workspaces
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "normal-workspaces-dev-install",
+ "npm install turbo@latest --save-dev",
+ ],
+ [
+ "1.6.3",
+ "npm",
+ "7.0.0",
+ "normal-workspaces-dev-install",
+ "npm install turbo@1.6.3 --save-dev",
+ ],
+ [
+ "canary",
+ "npm",
+ "7.0.0",
+ "normal-workspaces-dev-install",
+ "npm install turbo@canary --save-dev",
+ ],
+ ["latest", "npm", "7.0.0", "normal-workspaces", "npm install turbo@latest"],
+ // npm - single package
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "single-package-dev-install",
+ "npm install turbo@latest --save-dev",
+ ],
+ ["latest", "npm", "7.0.0", "single-package", "npm install turbo@latest"],
+ // pnpm - workspaces
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces-dev-install",
+ "pnpm install turbo@latest --save-dev -w",
+ ],
+ [
+ "1.6.3",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces-dev-install",
+ "pnpm install turbo@1.6.3 --save-dev -w",
+ ],
+ [
+ "canary",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces-dev-install",
+ "pnpm install turbo@canary --save-dev -w",
+ ],
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces",
+ "pnpm install turbo@latest -w",
+ ],
+ // pnpm - single package
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "single-package-dev-install",
+ "pnpm install turbo@latest --save-dev",
+ ],
+ ["latest", "pnpm", "7.0.0", "single-package", "pnpm install turbo@latest"],
+ // yarn 1.x - workspaces
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@latest --dev -W",
+ ],
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces",
+ "yarn add turbo@latest -W",
+ ],
+ [
+ "1.6.3",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@1.6.3 --dev -W",
+ ],
+ [
+ "canary",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@canary --dev -W",
+ ],
+ // yarn 1.x - single package
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "single-package-dev-install",
+ "yarn add turbo@latest --dev",
+ ],
+ ["latest", "yarn", "1.22.19", "single-package", "yarn add turbo@latest"],
+ // yarn 2.x - workspaces
+ [
+ "latest",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@latest --dev",
+ ],
+ ["latest", "yarn", "2.3.4", "normal-workspaces", "yarn add turbo@latest"],
+ [
+ "1.6.3",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@1.6.3 --dev",
+ ],
+ [
+ "canary",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@canary --dev",
+ ],
+ // yarn 2.x - single package
+ [
+ "latest",
+ "yarn",
+ "2.3.4",
+ "single-package-dev-install",
+ "yarn add turbo@latest --dev",
+ ],
+ ["latest", "yarn", "2.3.4", "single-package", "yarn add turbo@latest"],
+ // yarn 3.x - workspaces
+ [
+ "latest",
+ "yarn",
+ "3.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@latest --dev",
+ ],
+ ["latest", "yarn", "3.3.4", "normal-workspaces", "yarn add turbo@latest"],
+ [
+ "1.6.3",
+ "yarn",
+ "3.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@1.6.3 --dev",
+ ],
+ [
+ "canary",
+ "yarn",
+ "3.3.4",
+ "normal-workspaces-dev-install",
+ "yarn add turbo@canary --dev",
+ ],
+ // yarn 3.x - single package
+ [
+ "latest",
+ "yarn",
+ "3.3.4",
+ "single-package-dev-install",
+ "yarn add turbo@latest --dev",
+ ],
+ ["latest", "yarn", "3.3.4", "single-package", "yarn add turbo@latest"],
+];
+
+const GLOBAL_INSTALL_COMMANDS = [
+ // npm
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "normal-workspaces-dev-install",
+ "npm install turbo@latest --global",
+ ],
+ [
+ "1.6.3",
+ "npm",
+ "7.0.0",
+ "normal-workspaces-dev-install",
+ "npm install turbo@1.6.3 --global",
+ ],
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "normal-workspaces",
+ "npm install turbo@latest --global",
+ ],
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "single-package",
+ "npm install turbo@latest --global",
+ ],
+ [
+ "latest",
+ "npm",
+ "7.0.0",
+ "single-package-dev-install",
+ "npm install turbo@latest --global",
+ ],
+ // pnpm
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces-dev-install",
+ "pnpm install turbo@latest --global",
+ ],
+ [
+ "1.6.3",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces-dev-install",
+ "pnpm install turbo@1.6.3 --global",
+ ],
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "pnpm-workspaces",
+ "pnpm install turbo@latest --global",
+ ],
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "single-package",
+ "pnpm install turbo@latest --global",
+ ],
+ [
+ "latest",
+ "pnpm",
+ "7.0.0",
+ "single-package-dev-install",
+ "pnpm install turbo@latest --global",
+ ],
+ // yarn 1.x
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "1.6.3",
+ "yarn",
+ "1.22.19",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@1.6.3",
+ ],
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "single-package",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "latest",
+ "yarn",
+ "1.22.19",
+ "single-package-dev-install",
+ "yarn global add turbo@latest",
+ ],
+ // yarn 2.x
+ [
+ "latest",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "latest",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "1.6.3",
+ "yarn",
+ "2.3.4",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@1.6.3",
+ ],
+ ["latest", "yarn", "2.3.4", "single-package", "yarn global add turbo@latest"],
+ [
+ "latest",
+ "yarn",
+ "2.3.4",
+ "single-package-dev-install",
+ "yarn global add turbo@latest",
+ ],
+ // yarn 3.x
+ [
+ "latest",
+ "yarn",
+ "3.3.3",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "latest",
+ "yarn",
+ "3.3.3",
+ "normal-workspaces",
+ "yarn global add turbo@latest",
+ ],
+ [
+ "1.6.3",
+ "yarn",
+ "3.3.3",
+ "normal-workspaces-dev-install",
+ "yarn global add turbo@1.6.3",
+ ],
+ ["latest", "yarn", "3.3.4", "single-package", "yarn global add turbo@latest"],
+ [
+ "latest",
+ "yarn",
+ "3.3.4",
+ "single-package-dev-install",
+ "yarn global add turbo@latest",
+ ],
+];
+
+describe("get-turbo-upgrade-command", () => {
+ const { useFixture } = setupTestFixtures({
+ directory: __dirname,
+ test: "get-turbo-upgrade-command",
+ });
+
+ test.each(LOCAL_INSTALL_COMMANDS)(
+ "returns correct upgrade command for local install of turbo@%s using %s@%s (fixture: %s)",
+ (
+ turboVersion,
+ packageManager,
+ packageManagerVersion,
+ fixture,
+ expectedUpgradeCommand
+ ) => {
+ const { root } = useFixture({
+ fixture,
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ // fail the check for the turbo, and package manager bins to force local
+ if (command.includes("bin")) {
+ return undefined;
+ }
+ });
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue(packageManagerVersion);
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue(packageManager as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ to: turboVersion === "latest" ? undefined : turboVersion,
+ });
+
+ expect(upgradeCommand).toEqual(expectedUpgradeCommand);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ }
+ );
+
+ test.each(GLOBAL_INSTALL_COMMANDS)(
+ "returns correct upgrade command for global install of turbo@%s using %s@%s (fixture: %s)",
+ (
+ turboVersion,
+ packageManager,
+ packageManagerVersion,
+ fixture,
+ expectedUpgradeCommand
+ ) => {
+ const { root } = useFixture({
+ fixture,
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ if (command === "turbo bin") {
+ return `/global/${packageManager}/bin/turbo`;
+ }
+ if (command.includes(packageManager)) {
+ return `/global/${packageManager}/bin`;
+ }
+ });
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue(packageManagerVersion);
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue(packageManager as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ to: turboVersion === "latest" ? undefined : turboVersion,
+ });
+
+ expect(upgradeCommand).toEqual(expectedUpgradeCommand);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ }
+ );
+
+ test("fails gracefully if no package.json exists", () => {
+ const { root } = useFixture({
+ fixture: "no-package",
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ // fail the check for the turbo, and package manager bins to force local
+ if (command.includes("bin")) {
+ return undefined;
+ }
+ });
+
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue("8.0.0");
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue("pnpm" as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ });
+
+ expect(upgradeCommand).toEqual(undefined);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ });
+
+ test("fails gracefully if turbo cannot be found in package.json", () => {
+ const { root } = useFixture({
+ fixture: "no-turbo",
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ // fail the check for the turbo, and package manager bins to force local
+ if (command.includes("bin")) {
+ return undefined;
+ }
+ });
+
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue("8.0.0");
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue("pnpm" as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ });
+
+ expect(upgradeCommand).toEqual(undefined);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ });
+
+ test("fails gracefully if package.json has no deps or devDeps", () => {
+ const { root } = useFixture({
+ fixture: "no-deps",
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ // fail the check for the turbo, and package manager bins to force local
+ if (command.includes("bin")) {
+ return undefined;
+ }
+ });
+
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue("8.0.0");
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue("pnpm" as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ });
+
+ expect(upgradeCommand).toEqual(undefined);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ });
+
+ test("fails gracefully if can't find packageManager", () => {
+ const { root } = useFixture({
+ fixture: "no-deps",
+ });
+
+ const mockedExec = jest
+ .spyOn(utils, "exec")
+ .mockImplementation((command: string) => {
+ // fail the check for the turbo, and package manager bins to force local
+ if (command.includes("bin")) {
+ return undefined;
+ }
+ });
+
+ const mockedGetPackageManagerVersion = jest
+ .spyOn(getPackageManagerVersion, "default")
+ .mockReturnValue("8.0.0");
+ const mockedGetPackageManager = jest
+ .spyOn(getPackageManager, "default")
+ .mockReturnValue("pnpm" as getPackageManager.PackageManager);
+
+ // get the command
+ const upgradeCommand = getTurboUpgradeCommand({
+ directory: root,
+ });
+
+ expect(upgradeCommand).toEqual(undefined);
+
+ mockedExec.mockRestore();
+ mockedGetPackageManager.mockRestore();
+ mockedGetPackageManagerVersion.mockRestore();
+ });
+});