diff options
author | 2023-07-24 07:19:10 +0300 | |
---|---|---|
committer | 2023-07-23 21:19:10 -0700 | |
commit | d8135e85ca28272bd01c4ffef07441ff33baaf0a (patch) | |
tree | 9f5ae856dc3af7b5500184ad1bfa28c32d865148 | |
parent | b02f097f4d77472bf4c2672eebb2d807a09d3536 (diff) | |
download | bun-d8135e85ca28272bd01c4ffef07441ff33baaf0a.tar.gz bun-d8135e85ca28272bd01c4ffef07441ff33baaf0a.tar.zst bun-d8135e85ca28272bd01c4ffef07441ff33baaf0a.zip |
more tests for #3754 (#3774)
-rw-r--r-- | test/cli/install/bun-install.test.ts | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/test/cli/install/bun-install.test.ts b/test/cli/install/bun-install.test.ts index e0c6715c9..21c98efb3 100644 --- a/test/cli/install/bun-install.test.ts +++ b/test/cli/install/bun-install.test.ts @@ -4852,6 +4852,55 @@ it("should not override npm dependency by workspace with mismatched version", as } }); +it("should override @scoped npm dependency by matching workspace", async () => { + const urls: string[] = []; + setHandler(dummyRegistry(urls)); + await writeFile( + join(package_dir, "package.json"), + JSON.stringify({ + name: "foo", + workspaces: ["packages/*"], + dependencies: { + "@bar/baz": "^0.1", + }, + }), + ); + await mkdir(join(package_dir, "packages", "bar-baz"), { recursive: true }); + const baz_package = JSON.stringify({ + name: "@bar/baz", + version: "0.1.2", + }); + await writeFile(join(package_dir, "packages", "bar-baz", "package.json"), baz_package); + const { stdout, stderr, exited } = spawn({ + cmd: [bunExe(), "install"], + cwd: package_dir, + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr).toBeDefined(); + const err = await new Response(stderr).text(); + expect(err).toContain("Saved lockfile"); + expect(stdout).toBeDefined(); + const out = await new Response(stdout).text(); + expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + @bar/baz@workspace:packages/bar-baz", + "", + " 1 packages installed", + ]); + expect(await exited).toBe(0); + expect(urls.sort()).toBeEmpty(); + expect(requested).toBe(0); + expect(await readdirSorted(join(package_dir, "node_modules"))).toEqual([".cache", "@bar"]); + expect(await readdirSorted(join(package_dir, "node_modules", "@bar"))).toEqual(["baz"]); + expect(await readlink(join(package_dir, "node_modules", "@bar", "baz"))).toBe( + join("..", "..", "packages", "bar-baz"), + ); + expect(await file(join(package_dir, "node_modules", "@bar", "baz", "package.json")).text()).toEqual(baz_package); + await access(join(package_dir, "bun.lockb")); +}); + it("should override child npm dependency by matching workspace", async () => { const urls: string[] = []; setHandler(dummyRegistry(urls)); @@ -4972,3 +5021,64 @@ it("should not override child npm dependency by workspace with mismatched versio }); await access(join(package_dir, "bun.lockb")); }); + +it("should override @scoped child npm dependency by matching workspace", async () => { + const urls: string[] = []; + setHandler(dummyRegistry(urls)); + await writeFile( + join(package_dir, "package.json"), + JSON.stringify({ + name: "foo", + workspaces: ["packages/*"], + }), + ); + await mkdir(join(package_dir, "packages", "moo-bar"), { recursive: true }); + const bar_package = JSON.stringify({ + name: "@moo/bar", + version: "1.2.3", + }); + await writeFile(join(package_dir, "packages", "moo-bar", "package.json"), bar_package); + await mkdir(join(package_dir, "packages", "moo-baz"), { recursive: true }); + await writeFile( + join(package_dir, "packages", "moo-baz", "package.json"), + JSON.stringify({ + name: "@moo/baz", + dependencies: { + "@moo/bar": "1.x", + }, + }), + ); + const { stdout, stderr, exited } = spawn({ + cmd: [bunExe(), "install"], + cwd: package_dir, + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr).toBeDefined(); + const err = await new Response(stderr).text(); + expect(err).toContain("Saved lockfile"); + expect(stdout).toBeDefined(); + const out = await new Response(stdout).text(); + expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + @moo/bar@workspace:packages/moo-bar", + " + @moo/baz@workspace:packages/moo-baz", + "", + " 2 packages installed", + ]); + expect(await exited).toBe(0); + expect(urls.sort()).toBeEmpty(); + expect(requested).toBe(0); + expect(await readdirSorted(join(package_dir, "node_modules"))).toEqual([".cache", "@moo"]); + expect(await readdirSorted(join(package_dir, "node_modules", "@moo"))).toEqual(["bar", "baz"]); + expect(await readlink(join(package_dir, "node_modules", "@moo", "bar"))).toBe( + join("..", "..", "packages", "moo-bar"), + ); + expect(await file(join(package_dir, "node_modules", "@moo", "bar", "package.json")).text()).toEqual(bar_package); + expect(await readlink(join(package_dir, "node_modules", "@moo", "baz"))).toBe( + join("..", "..", "packages", "moo-baz"), + ); + expect(await readdirSorted(join(package_dir, "node_modules", "@moo", "baz"))).toEqual(["package.json"]); + await access(join(package_dir, "bun.lockb")); +}); |