Skip to content

Commit 8af5181

Browse files
committed
fix: include packageRename in second parseChangelog call
When updating existing entries and adding new ones for renamed packages, the second parseChangelog call was missing the packageRename parameter. This ensures both calls include packageRename for consistency.
1 parent 045331a commit 8af5181

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

src/changelog-validator.test.ts

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2245,5 +2245,144 @@ describe('changelog-validator', () => {
22452245
);
22462246
expect(mockChangelog.addChange).toHaveBeenCalled();
22472247
});
2248+
2249+
it('handles renamed packages when updating existing entries and adding new ones', async () => {
2250+
const renamedPackageChanges = {
2251+
'json-rpc-middleware-stream': {
2252+
packageName: '@metamask/json-rpc-middleware-stream',
2253+
dependencyChanges: [
2254+
{
2255+
package: 'json-rpc-middleware-stream',
2256+
dependency: '@metamask/json-rpc-engine',
2257+
type: 'dependencies' as const,
2258+
oldVersion: '^10.1.1',
2259+
newVersion: '^10.1.2',
2260+
},
2261+
{
2262+
package: 'json-rpc-middleware-stream',
2263+
dependency: '@metamask/base-controller',
2264+
type: 'dependencies' as const,
2265+
oldVersion: '^9.0.0',
2266+
newVersion: '^9.1.0',
2267+
},
2268+
],
2269+
},
2270+
};
2271+
2272+
const existingEntry =
2273+
'Bump `@metamask/json-rpc-engine` from `^10.1.1` to `^10.1.0` ([#1234](https://github.com/example-org/example-repo/pull/1234))';
2274+
2275+
const writeFileSpy = jest.spyOn(fsModule, 'writeFile');
2276+
2277+
when(jest.spyOn(fsModule, 'fileExists'))
2278+
.calledWith(
2279+
'/path/to/project/packages/json-rpc-middleware-stream/CHANGELOG.md',
2280+
)
2281+
.mockResolvedValue(true)
2282+
.calledWith(
2283+
'/path/to/project/packages/json-rpc-middleware-stream/package.json',
2284+
)
2285+
.mockResolvedValue(true);
2286+
2287+
when(jest.spyOn(fsModule, 'readFile'))
2288+
.calledWith(
2289+
'/path/to/project/packages/json-rpc-middleware-stream/CHANGELOG.md',
2290+
)
2291+
.mockResolvedValueOnce(
2292+
`# Changelog\n## [Unreleased]\n- ${existingEntry}`,
2293+
)
2294+
.mockResolvedValueOnce(
2295+
`# Changelog\n## [Unreleased]\n- Bump \`@metamask/json-rpc-engine\` from \`^10.1.1\` to \`^10.1.2\` ([#1234](https://github.com/example-org/example-repo/pull/1234), [#5678](https://github.com/example-org/example-repo/pull/5678))`,
2296+
)
2297+
.calledWith(
2298+
'/path/to/project/packages/json-rpc-middleware-stream/package.json',
2299+
)
2300+
.mockResolvedValue(
2301+
JSON.stringify({
2302+
name: '@metamask/json-rpc-middleware-stream',
2303+
scripts: {
2304+
'changelog:update':
2305+
'../../scripts/update-changelog.sh @metamask/json-rpc-middleware-stream --tag-prefix-before-package-rename json-rpc-middleware-stream@ --version-before-package-rename 5.0.1',
2306+
},
2307+
}),
2308+
);
2309+
2310+
jest.spyOn(packageModule, 'formatChangelog').mockResolvedValue('');
2311+
2312+
when(jest.spyOn(packageManifestModule, 'readPackageManifest'))
2313+
.calledWith(
2314+
'/path/to/project/packages/json-rpc-middleware-stream/package.json',
2315+
)
2316+
.mockResolvedValue({
2317+
unvalidated: {
2318+
name: '@metamask/json-rpc-middleware-stream',
2319+
scripts: {
2320+
'changelog:update':
2321+
'../../scripts/update-changelog.sh @metamask/json-rpc-middleware-stream --tag-prefix-before-package-rename json-rpc-middleware-stream@ --version-before-package-rename 5.0.1',
2322+
},
2323+
},
2324+
validated: buildMockManifest({
2325+
name: '@metamask/json-rpc-middleware-stream',
2326+
}),
2327+
});
2328+
2329+
const mockChangelog1 = {
2330+
getUnreleasedChanges: () => ({ Changed: [existingEntry] }),
2331+
};
2332+
2333+
const mockChangelog2 = {
2334+
getUnreleasedChanges: () => ({
2335+
Changed: [
2336+
'Bump `@metamask/json-rpc-engine` from `^10.1.1` to `^10.1.2` ([#1234](https://github.com/example-org/example-repo/pull/1234), [#5678](https://github.com/example-org/example-repo/pull/5678))',
2337+
],
2338+
}),
2339+
addChange: jest.fn(),
2340+
toString: jest.fn().mockResolvedValue('Final updated changelog'),
2341+
};
2342+
2343+
(parseChangelog as jest.Mock)
2344+
.mockReturnValueOnce(mockChangelog1)
2345+
.mockReturnValueOnce(mockChangelog2);
2346+
2347+
await updateChangelogs(renamedPackageChanges, {
2348+
projectRoot: '/path/to/project',
2349+
prNumber: '5678',
2350+
repoUrl: 'https://github.com/example-org/example-repo',
2351+
stdout,
2352+
stderr,
2353+
});
2354+
2355+
const packageRename = {
2356+
tagPrefixBeforeRename: 'json-rpc-middleware-stream@',
2357+
versionBeforeRename: '5.0.1',
2358+
};
2359+
2360+
// Verify both parseChangelog calls include packageRename
2361+
expect(parseChangelog).toHaveBeenCalledTimes(2);
2362+
expect(parseChangelog).toHaveBeenNthCalledWith(1, {
2363+
changelogContent: `# Changelog\n## [Unreleased]\n- ${existingEntry}`,
2364+
repoUrl: 'https://github.com/example-org/example-repo',
2365+
tagPrefix: '@metamask/json-rpc-middleware-stream@',
2366+
formatter: expect.any(Function),
2367+
packageRename,
2368+
});
2369+
expect(parseChangelog).toHaveBeenNthCalledWith(2, {
2370+
changelogContent:
2371+
'# Changelog\n## [Unreleased]\n- Bump `@metamask/json-rpc-engine` from `^10.1.1` to `^10.1.2` ([#1234](https://github.com/example-org/example-repo/pull/1234), [#5678](https://github.com/example-org/example-repo/pull/5678))',
2372+
repoUrl: 'https://github.com/example-org/example-repo',
2373+
tagPrefix: '@metamask/json-rpc-middleware-stream@',
2374+
formatter: expect.any(Function),
2375+
packageRename,
2376+
});
2377+
2378+
// Verify new entry was added
2379+
expect(mockChangelog2.addChange).toHaveBeenCalledWith({
2380+
category: 'Changed',
2381+
description: expect.stringContaining('@metamask/base-controller'),
2382+
});
2383+
2384+
// Verify writeFile was called (once for update, once for final)
2385+
expect(writeFileSpy).toHaveBeenCalledTimes(2);
2386+
});
22482387
});
22492388
});

src/changelog-validator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ export async function updateChangelogs(
434434
repoUrl,
435435
tagPrefix: `${actualPackageName}@`,
436436
formatter: formatChangelog,
437+
...(packageRename && { packageRename }),
437438
});
438439

439440
// Group new entries by type (dependencies first, then peerDependencies)

0 commit comments

Comments
 (0)