aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/turbo-workspaces/__tests__/index.test.ts
diff options
context:
space:
mode:
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();
+ }
+ );
+ });
+});