aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/turbo-workspaces/__tests__/index.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-workspaces/__tests__/index.test.ts
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'packages/turbo-workspaces/__tests__/index.test.ts')
-rw-r--r--packages/turbo-workspaces/__tests__/index.test.ts85
1 files changed, 85 insertions, 0 deletions
diff --git a/packages/turbo-workspaces/__tests__/index.test.ts b/packages/turbo-workspaces/__tests__/index.test.ts
new file mode 100644
index 0000000..21753be
--- /dev/null
+++ b/packages/turbo-workspaces/__tests__/index.test.ts
@@ -0,0 +1,85 @@
+import path from "path";
+import * as turboUtils from "@turbo/utils";
+import { setupTestFixtures } from "@turbo/test-utils";
+import { getWorkspaceDetails, convert } from "../src";
+import { generateConvertMatrix } from "./test-utils";
+import execa from "execa";
+
+jest.mock("execa", () => jest.fn());
+
+describe("Node entrypoint", () => {
+ const { useFixture } = setupTestFixtures({
+ directory: path.join(__dirname, "../"),
+ });
+
+ describe("convert", () => {
+ test.each(generateConvertMatrix())(
+ "detects $fixtureType project using $fixtureManager and converts to $toManager (interactive=$interactive dry=$dry install=$install)",
+ async ({
+ fixtureManager,
+ fixtureType,
+ toManager,
+ interactive,
+ dry,
+ install,
+ }) => {
+ const mockedGetAvailablePackageManagers = jest
+ .spyOn(turboUtils, "getAvailablePackageManagers")
+ .mockResolvedValue({
+ npm: {
+ available: true,
+ version: "8.19.2",
+ },
+ yarn: {
+ available: true,
+ version: "1.22.19",
+ },
+ pnpm: {
+ available: true,
+ version: "7.29.1",
+ },
+ });
+
+ const { root } = useFixture({
+ fixture: `./${fixtureManager}/${fixtureType}`,
+ });
+
+ // read
+ const details = await getWorkspaceDetails({ root });
+ expect(details.packageManager).toBe(fixtureManager);
+
+ // convert
+ const convertWrapper = () =>
+ convert({
+ root,
+ to: toManager,
+ options: { interactive, dry, skipInstall: !install },
+ });
+
+ if (fixtureManager === toManager) {
+ await expect(convertWrapper()).rejects.toThrowError(
+ "You are already using this package manager"
+ );
+ } else {
+ await expect(convertWrapper()).resolves.toBeUndefined();
+ // read again
+ const convertedDetails = await getWorkspaceDetails({
+ root,
+ });
+ expect(mockedGetAvailablePackageManagers).toHaveBeenCalled();
+
+ if (dry) {
+ expect(convertedDetails.packageManager).toBe(fixtureManager);
+ } else {
+ if (install) {
+ expect(execa).toHaveBeenCalled();
+ }
+ expect(convertedDetails.packageManager).toBe(toManager);
+ }
+ }
+
+ mockedGetAvailablePackageManagers.mockRestore();
+ }
+ );
+ });
+});