Update bun-install.test.ts

This commit is contained in:
Dylan Conway
2023-09-26 22:19:33 -07:00
parent 0268807be2
commit 4d2b442a33

View File

@@ -5436,16 +5436,30 @@ it("should handle installing packages from inside a workspace with `*`", async (
});
it("should handle installing packages inside workspaces with difference versions", async () => {
await writeFile(
join(package_dir, "package.json"),
let package_jsons = [
JSON.stringify({
name: "main",
workspaces: ["packages/*"],
private: true,
}),
);
JSON.stringify({
name: "main",
private: true,
workspaces: [
"packages/package1",
"packages/package2",
"packages/package3",
"packages/package4",
"packages/package5",
],
}),
];
await mkdir(join(package_dir, "packages", "package1"), { recursive: true });
await mkdir(join(package_dir, "packages", "package2"));
await mkdir(join(package_dir, "packages", "package3"));
await mkdir(join(package_dir, "packages", "package4"));
await mkdir(join(package_dir, "packages", "package5"));
{
await mkdir(join(package_dir, "packages", "package1"), { recursive: true });
const package1 = JSON.stringify({
name: "package1",
version: "0.0.2",
@@ -5453,7 +5467,6 @@ it("should handle installing packages inside workspaces with difference versions
await writeFile(join(package_dir, "packages", "package1", "package.json"), package1);
}
{
await mkdir(join(package_dir, "packages", "package2"));
const package2 = JSON.stringify({
name: "package2",
version: "0.0.1",
@@ -5464,7 +5477,6 @@ it("should handle installing packages inside workspaces with difference versions
await writeFile(join(package_dir, "packages", "package2", "package.json"), package2);
}
{
await mkdir(join(package_dir, "packages", "package3"));
const package3 = JSON.stringify({
name: "package3",
version: "0.0.1",
@@ -5475,7 +5487,6 @@ it("should handle installing packages inside workspaces with difference versions
await writeFile(join(package_dir, "packages", "package3", "package.json"), package3);
}
{
await mkdir(join(package_dir, "packages", "package4"));
const package4 = JSON.stringify({
name: "package4",
version: "0.0.1",
@@ -5486,7 +5497,6 @@ it("should handle installing packages inside workspaces with difference versions
await writeFile(join(package_dir, "packages", "package4", "package.json"), package4);
}
{
await mkdir(join(package_dir, "packages", "package5"));
const package5 = JSON.stringify({
name: "package5",
version: "0.0.1",
@@ -5496,274 +5506,328 @@ it("should handle installing packages inside workspaces with difference versions
});
await writeFile(join(package_dir, "packages", "package5", "package.json"), package5);
}
for (const package_json of package_jsons) {
await writeFile(join(package_dir, "package.json"), package_json);
const {
stdout: stdout1,
stderr: stderr1,
exited: exited1,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package2"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr1).toBeDefined();
const err1 = await new Response(stderr1).text();
expect(err1).toContain("Saved lockfile");
const out1 = await new Response(stdout1).text();
expect(out1.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 5 packages installed",
]);
expect(await exited1).toBe(0);
expect(requested).toBe(0);
await access(join(package_dir, "bun.lockb"));
{
const package1 = JSON.stringify({
name: "package1",
version: "0.0.2",
});
await writeFile(join(package_dir, "packages", "package1", "package.json"), package1);
}
{
const package2 = JSON.stringify({
name: "package2",
version: "0.0.1",
dependencies: {
package1: "workspace:*",
},
});
await writeFile(join(package_dir, "packages", "package2", "package.json"), package2);
}
{
const package3 = JSON.stringify({
name: "package3",
version: "0.0.1",
dependencies: {
package1: "workspace:^",
},
});
await writeFile(join(package_dir, "packages", "package3", "package.json"), package3);
}
{
const package4 = JSON.stringify({
name: "package4",
version: "0.0.1",
dependencies: {
package1: "workspace:../package1",
},
});
await writeFile(join(package_dir, "packages", "package4", "package.json"), package4);
}
{
const package5 = JSON.stringify({
name: "package5",
version: "0.0.1",
dependencies: {
package1: "workspace:0.0.2",
},
});
await writeFile(join(package_dir, "packages", "package5", "package.json"), package5);
}
var urls: string[] = [];
setHandler(dummyRegistry(urls));
const {
stdout: stdout1,
stderr: stderr1,
exited: exited1,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package2"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr1).toBeDefined();
const err1 = await new Response(stderr1).text();
expect(err1).toContain("Saved lockfile");
const out1 = await new Response(stdout1).text();
expect(out1.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 5 packages installed",
]);
expect(await exited1).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout1_2,
stderr: stderr1_2,
exited: exited1_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package2"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr1_2).toBeDefined();
expect(stderr1_2).toBeDefined();
const err1_2 = await new Response(stderr1_2).text();
expect(err1_2).toContain("Saved lockfile");
expect(stdout1_2).toBeDefined();
const out1_2 = await new Response(stdout1_2).text();
expect(out1_2).toContain("installed bar");
expect(await exited1_2).toBe(0);
expect(urls.sort()).toEqual([`${root_url}/bar`, `${root_url}/bar-0.0.2.tgz`]);
await access(join(package_dir, "bun.lockb"));
var urls: string[] = [];
setHandler(dummyRegistry(urls));
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout1_2,
stderr: stderr1_2,
exited: exited1_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package2"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr1_2).toBeDefined();
expect(stderr1_2).toBeDefined();
const err1_2 = await new Response(stderr1_2).text();
expect(err1_2).toContain("Saved lockfile");
expect(stdout1_2).toBeDefined();
const out1_2 = await new Response(stdout1_2).text();
expect(out1_2).toContain("installed bar");
expect(await exited1_2).toBe(0);
expect(urls.sort()).toEqual([`${root_url}/bar`, `${root_url}/bar-0.0.2.tgz`]);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout2,
stderr: stderr2,
exited: exited2,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package3"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2).toBeDefined();
const err2 = await new Response(stderr2).text();
expect(err2).toContain("Saved lockfile");
expect(stdout2).toBeDefined();
const out2 = await new Response(stdout2).text();
expect(out2.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited2).toBe(0);
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout2_2,
stderr: stderr2_2,
exited: exited2_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package3"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2_2).toBeDefined();
expect(stderr2_2).toBeDefined();
const err2_2 = await new Response(stderr2_2).text();
expect(err2_2).toContain("Saved lockfile");
expect(stdout2_2).toBeDefined();
const out2_2 = await new Response(stdout2_2).text();
expect(out2_2).toContain("installed bar");
expect(await exited2_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout2,
stderr: stderr2,
exited: exited2,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package3"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2).toBeDefined();
const err2 = await new Response(stderr2).text();
expect(err2).toContain("Saved lockfile");
expect(stdout2).toBeDefined();
const out2 = await new Response(stdout2).text();
expect(out2.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited2).toBe(0);
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout2_2,
stderr: stderr2_2,
exited: exited2_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package3"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2_2).toBeDefined();
expect(stderr2_2).toBeDefined();
const err2_2 = await new Response(stderr2_2).text();
expect(err2_2).toContain("Saved lockfile");
expect(stdout2_2).toBeDefined();
const out2_2 = await new Response(stdout2_2).text();
expect(out2_2).toContain("installed bar");
expect(await exited2_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout3,
stderr: stderr3,
exited: exited3,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package4"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2).toBeDefined();
const err3 = await new Response(stderr3).text();
expect(err3).toContain("Saved lockfile");
expect(stdout3).toBeDefined();
const out3 = await new Response(stdout3).text();
expect(out3.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited3).toBe(0);
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout3_2,
stderr: stderr3_2,
exited: exited3_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package4"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr3_2).toBeDefined();
expect(stderr3_2).toBeDefined();
const err3_2 = await new Response(stderr3_2).text();
expect(err3_2).toContain("Saved lockfile");
expect(stdout3_2).toBeDefined();
const out3_2 = await new Response(stdout3_2).text();
expect(out3_2).toContain("installed bar");
expect(await exited3_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout3,
stderr: stderr3,
exited: exited3,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package4"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr2).toBeDefined();
const err3 = await new Response(stderr3).text();
expect(err3).toContain("Saved lockfile");
expect(stdout3).toBeDefined();
const out3 = await new Response(stdout3).text();
expect(out3.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited3).toBe(0);
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout3_2,
stderr: stderr3_2,
exited: exited3_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package4"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr3_2).toBeDefined();
expect(stderr3_2).toBeDefined();
const err3_2 = await new Response(stderr3_2).text();
expect(err3_2).toContain("Saved lockfile");
expect(stdout3_2).toBeDefined();
const out3_2 = await new Response(stdout3_2).text();
expect(out3_2).toContain("installed bar");
expect(await exited3_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout4,
stderr: stderr4,
exited: exited4,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package5"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr4).toBeDefined();
const err4 = await new Response(stderr4).text();
expect(err4).toContain("Saved lockfile");
expect(stdout4).toBeDefined();
const out4 = await new Response(stdout4).text();
expect(out4.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited4).toBe(0);
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout4_2,
stderr: stderr4_2,
exited: exited4_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package5"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr4_2).toBeDefined();
expect(stderr4_2).toBeDefined();
const err4_2 = await new Response(stderr4_2).text();
expect(err4_2).toContain("Saved lockfile");
expect(stdout4_2).toBeDefined();
const out4_2 = await new Response(stdout4_2).text();
expect(out4_2).toContain("installed bar");
expect(await exited4_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout4,
stderr: stderr4,
exited: exited4,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir, "packages", "package5"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr4).toBeDefined();
const err4 = await new Response(stderr4).text();
expect(err4).toContain("Saved lockfile");
expect(stdout4).toBeDefined();
const out4 = await new Response(stdout4).text();
expect(out4.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited4).toBe(0);
// from the root
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout4_2,
stderr: stderr4_2,
exited: exited4_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir, "packages", "package5"),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr4_2).toBeDefined();
expect(stderr4_2).toBeDefined();
const err4_2 = await new Response(stderr4_2).text();
expect(err4_2).toContain("Saved lockfile");
expect(stdout4_2).toBeDefined();
const out4_2 = await new Response(stdout4_2).text();
expect(out4_2).toContain("installed bar");
expect(await exited4_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout5,
stderr: stderr5,
exited: exited5,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr5).toBeDefined();
const err5 = await new Response(stderr5).text();
expect(err5).toContain("Saved lockfile");
expect(stdout5).toBeDefined();
const out5 = await new Response(stdout5).text();
expect(out5.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited5).toBe(0);
// from the root
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
const {
stdout: stdout5_2,
stderr: stderr5_2,
exited: exited5_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr5_2).toBeDefined();
expect(stderr5_2).toBeDefined();
const err5_2 = await new Response(stderr5_2).text();
expect(err5_2).toContain("Saved lockfile");
expect(stdout5_2).toBeDefined();
const out5_2 = await new Response(stdout5_2).text();
expect(out5_2).toContain("installed bar");
expect(await exited5_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
const {
stdout: stdout5,
stderr: stderr5,
exited: exited5,
} = spawn({
cmd: [bunExe(), "install"],
cwd: join(package_dir),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr5).toBeDefined();
const err5 = await new Response(stderr5).text();
expect(err5).toContain("Saved lockfile");
expect(stdout5).toBeDefined();
const out5 = await new Response(stdout5).text();
expect(out5.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
" + package1@workspace:packages/package1",
" + package2@workspace:packages/package2",
" + package3@workspace:packages/package3",
" + package4@workspace:packages/package4",
" + package5@workspace:packages/package5",
"",
" 6 packages installed",
]);
expect(await exited5).toBe(0);
const {
stdout: stdout5_2,
stderr: stderr5_2,
exited: exited5_2,
} = spawn({
cmd: [bunExe(), "install", "bar"],
cwd: join(package_dir),
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr5_2).toBeDefined();
expect(stderr5_2).toBeDefined();
const err5_2 = await new Response(stderr5_2).text();
expect(err5_2).toContain("Saved lockfile");
expect(stdout5_2).toBeDefined();
const out5_2 = await new Response(stdout5_2).text();
expect(out5_2).toContain("installed bar");
expect(await exited5_2).toBe(0);
await access(join(package_dir, "bun.lockb"));
await rm(join(package_dir, "node_modules"), { force: true, recursive: true });
await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true });
await rm(join(package_dir, "package.json"));
}
});
it("should override npm dependency by matching workspace", async () => {