Skip to content

Commit 666d2de

Browse files
committed
add test for #963 #1759
1 parent 9e83c45 commit 666d2de

2 files changed

Lines changed: 74 additions & 9 deletions

File tree

‎packages/assemble-release-plan/src/index.test.ts‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,54 @@ describe("assembleReleasePlan", () => {
738738
},
739739
]);
740740
});
741+
742+
// https://github.com/changesets/changesets/issues/963
743+
// https://github.com/changesets/changesets/issues/1759
744+
it("should not bump fixed packages due to peer dependents", () => {
745+
const setup = new FakeFullState({ changesets: [] });
746+
747+
setup.addPackage("@ex/core", "0.1.0");
748+
setup.addPackage("@ex/errors", "0.1.0");
749+
setup.addPackage("@ex/api", "0.1.0");
750+
setup.addPackage("some-peer", "0.1.0"); // optional peer
751+
setup.addPackage("@ex/components", "0.1.0");
752+
753+
setup.updateDependencies("@ex/api", [
754+
{ name: "@ex/core", range: "0.1.0" },
755+
{ name: "@ex/errors", range: "0.1.0" },
756+
{ name: "some-peer", range: "0.1.0", type: "peer" },
757+
]);
758+
setup.updateDependencies("@ex/components", [
759+
{ name: "@ex/api", range: "0.1.0" },
760+
{ name: "some-peer", range: "0.1.0" },
761+
]);
762+
763+
setup.addChangeset({ releases: [{ name: "@ex/core", type: "minor" }] });
764+
765+
const result = assembleReleasePlan(
766+
setup.changesets,
767+
setup.packages,
768+
{
769+
...defaultConfig,
770+
fixed: [
771+
[
772+
"@ex/core",
773+
"@ex/errors",
774+
"@ex/api",
775+
"some-peer",
776+
"@ex/components",
777+
],
778+
],
779+
},
780+
undefined,
781+
);
782+
783+
expect(result.releases).toHaveLength(5);
784+
expect(
785+
result.releases.every((release) => release.newVersion === "0.2.0"),
786+
"every bump should be to 0.2.0",
787+
).toBe(true);
788+
});
741789
});
742790

743791
describe("pre mode", () => {

‎packages/assemble-release-plan/src/test-utils.ts‎

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,32 @@ export class FakeFullState {
102102
(a) => a.packageJson.name === dependent,
103103
);
104104
if (!pkg) throw new Error(`No "${dependent}" package`);
105-
if (!pkg.packageJson.dependencies) {
106-
pkg.packageJson.dependencies = {};
107-
}
105+
pkg.packageJson.dependencies ??= {};
108106
pkg.packageJson.dependencies[dependency] = versionRange;
109107
}
108+
updateDependencies(
109+
dependent: string,
110+
deps: Array<{
111+
name: string;
112+
range: string;
113+
type?: "direct" | "peer" | "dev";
114+
}>,
115+
) {
116+
const pkg = this.packages.packages.find(
117+
(p) => p.packageJson.name === dependent,
118+
);
119+
if (!pkg) throw new Error(`No "${dependent}" package`);
120+
for (const { name, range, type } of deps) {
121+
const property =
122+
type === "dev"
123+
? "devDependencies"
124+
: type === "peer"
125+
? "peerDependencies"
126+
: "dependencies";
127+
pkg.packageJson[property] ??= {};
128+
pkg.packageJson[property][name] = range;
129+
}
130+
}
110131
updateDevDependency(
111132
dependent: string,
112133
dependency: string,
@@ -116,9 +137,7 @@ export class FakeFullState {
116137
(a) => a.packageJson.name === dependent,
117138
);
118139
if (!pkg) throw new Error(`No "${dependent}" package`);
119-
if (!pkg.packageJson.devDependencies) {
120-
pkg.packageJson.devDependencies = {};
121-
}
140+
pkg.packageJson.devDependencies ??= {};
122141
pkg.packageJson.devDependencies[dependency] = versionRange;
123142
}
124143
updatePeerDependency(
@@ -130,9 +149,7 @@ export class FakeFullState {
130149
(a) => a.packageJson.name === dependent,
131150
);
132151
if (!pkg) throw new Error(`No "${dependent}" package`);
133-
if (!pkg.packageJson.peerDependencies) {
134-
pkg.packageJson.peerDependencies = {};
135-
}
152+
pkg.packageJson.peerDependencies ??= {};
136153
pkg.packageJson.peerDependencies[dependency] = versionRange;
137154
}
138155

0 commit comments

Comments
 (0)