160 lines
4.9 KiB
Plaintext
160 lines
4.9 KiB
Plaintext
|
import fixturez from "fixturez";
|
||
|
import { getPackages, getPackagesSync } from "./";
|
||
|
|
||
|
const f = fixturez(__dirname);
|
||
|
|
||
|
type GetPackages = typeof getPackages | typeof getPackagesSync;
|
||
|
|
||
|
let runTests = (getPackages: GetPackages) => {
|
||
|
it("should resolve workspaces for yarn", async () => {
|
||
|
const allPackages = await getPackages(f.copy("yarn-workspace-base"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"yarn-workspace-base-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"yarn-workspace-base-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.tool).toEqual("yarn");
|
||
|
});
|
||
|
|
||
|
it("should resolve yarn workspaces if the yarn option is passed and packages field is used", async () => {
|
||
|
const allPackages = await getPackages(f.copy("yarn-workspace-base"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"yarn-workspace-base-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"yarn-workspace-base-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.tool).toEqual("yarn");
|
||
|
});
|
||
|
|
||
|
it("should resolve workspaces for bolt", async () => {
|
||
|
const allPackages = await getPackages(f.copy("bolt-workspace"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"bolt-workspace-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"bolt-workspace-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.tool).toEqual("bolt");
|
||
|
});
|
||
|
|
||
|
it("should resolve workspaces for pnpm", async () => {
|
||
|
const allPackages = await getPackages(f.copy("pnpm-workspace-base"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"pnpm-workspace-base-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"pnpm-workspace-base-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.tool).toEqual("pnpm");
|
||
|
});
|
||
|
|
||
|
it("should resolve workspace for pnpm with exclude rules", async () => {
|
||
|
const allPackages = await getPackages(f.copy("pnpm-exclude-workspace-case"));
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"pnpm-exclude-workspace-case-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"pnpm-exclude-workspace-case-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.packages.length).toEqual(2);
|
||
|
expect(allPackages.tool).toEqual("pnpm");
|
||
|
})
|
||
|
|
||
|
it("should resolve workspaces for lerna", async () => {
|
||
|
const allPackages = await getPackages(f.copy("lerna-workspace-base"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"lerna-workspace-base-pkg-a"
|
||
|
);
|
||
|
expect(allPackages.packages[1].packageJson.name).toEqual(
|
||
|
"lerna-workspace-base-pkg-b"
|
||
|
);
|
||
|
expect(allPackages.packages).toHaveLength(2);
|
||
|
expect(allPackages.tool).toEqual("lerna");
|
||
|
});
|
||
|
|
||
|
it("should resolve workspaces for lerna without explicit packages config", async () => {
|
||
|
const allPackages = await getPackages(f.copy("basic-lerna"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"@manypkg/basic-lerna-fixture-pkg-one"
|
||
|
);
|
||
|
expect(allPackages.packages).toHaveLength(1);
|
||
|
expect(allPackages.tool).toEqual("lerna");
|
||
|
});
|
||
|
|
||
|
it("should resolve the main package", async () => {
|
||
|
const path = f.copy("root-only");
|
||
|
const allPackages = await getPackages(path);
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].dir).toEqual(path);
|
||
|
expect(allPackages.packages.length).toEqual(1);
|
||
|
expect(allPackages.tool).toEqual("root");
|
||
|
});
|
||
|
|
||
|
it("should throw an error if a package.json is missing the name field", async () => {
|
||
|
try {
|
||
|
const allPackages = await getPackagesSync(f.copy("no-name-field"));
|
||
|
} catch (err) {
|
||
|
expect(err.message).toBe(
|
||
|
'The following package.jsons are missing the "name" field:\npackages/pkg-a/package.json\npackages/pkg-b/package.json'
|
||
|
);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
it("should not crash on cyclic deps", async () => {
|
||
|
const allPackages = await getPackages(f.copy("local-deps-cycle"));
|
||
|
|
||
|
if (allPackages.packages === null) {
|
||
|
return expect(allPackages.packages).not.toBeNull();
|
||
|
}
|
||
|
|
||
|
expect(allPackages.packages[0].packageJson.name).toEqual(
|
||
|
"@manypkg/cyclic-dep"
|
||
|
);
|
||
|
expect(allPackages.tool).toEqual("yarn");
|
||
|
});
|
||
|
};
|
||
|
|
||
|
describe("getPackages", () => {
|
||
|
runTests(getPackages);
|
||
|
});
|
||
|
|
||
|
describe("getPackagesSync", () => {
|
||
|
runTests(getPackagesSync);
|
||
|
});
|