0
0
mirror of https://github.com/renovatebot/renovate.git synced 2024-12-23 05:58:05 +00:00
renovatebot_renovate/lib/modules/manager/npm/extract/post/monorepo.spec.ts
renovate[bot] 4c2ce97bb4
build(deps): update dependency prettier to v3.2.2 (#26755)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Rhys Arkins <rhys@arkins.net>
2024-01-21 08:20:41 +00:00

172 lines
4.7 KiB
TypeScript

import type { PackageFile } from '../../../types';
import { detectMonorepos } from './monorepo';
jest.mock('../pnpm');
describe('modules/manager/npm/extract/post/monorepo', () => {
describe('.extractPackageFile()', () => {
it('handles no monorepo', async () => {
const packageFiles: Partial<PackageFile>[] = [
{
packageFile: 'package.json',
deps: [],
},
];
await detectMonorepos(packageFiles);
expect(packageFiles).toHaveLength(1);
});
it('updates internal packages', async () => {
const packageFiles: Partial<PackageFile>[] = [
{
packageFile: 'package.json',
managerData: {
workspacesPackages: ['packages/*'],
},
deps: [
{
depName: '@org/a',
},
{
depName: '@org/b',
},
{
depName: '@org/c',
},
{
depName: 'foo',
currentValue: '6.1.0',
},
],
},
{
packageFile: 'packages/a/package.json',
managerData: { packageJsonName: '@org/a' },
deps: [
{
depName: '@org/b',
},
{
depName: '@org/c',
},
{
depName: 'bar',
},
],
},
{
packageFile: 'packages/b/package.json',
managerData: { packageJsonName: '@org/b' },
},
// for coverage
{
packageFile: 'packages/c/package.json',
},
];
await detectMonorepos(packageFiles);
expect(
packageFiles.some((packageFile) =>
packageFile.deps?.some((dep) => dep.isInternal),
),
).toBeTrue();
});
it('uses yarn workspaces package settings', async () => {
const packageFiles: Partial<PackageFile>[] = [
{
packageFile: 'package.json',
npmrc: '@org:registry=//registry.some.org\n',
managerData: { workspacesPackages: 'packages/*' },
},
{
packageFile: 'packages/a/package.json',
managerData: { packageJsonName: '@org/a', yarnLock: 'yarn.lock' },
},
{
packageFile: 'packages/b/package.json',
managerData: { packageJsonName: '@org/b' },
},
];
await detectMonorepos(packageFiles);
expect(packageFiles).toMatchObject([
{},
{ npmrc: '@org:registry=//registry.some.org\n' },
{},
]);
});
it('uses yarn workspaces package settings with extractedConstraints', async () => {
const packageFiles: Partial<PackageFile>[] = [
{
packageFile: 'package.json',
skipInstalls: true, // coverage
extractedConstraints: {
node: '^14.15.0 || >=16.13.0',
yarn: '3.2.1',
},
managerData: {
hasPackageManager: true,
workspacesPackages: ['docs'],
},
},
{
packageFile: 'docs/package.json',
managerData: { packageJsonName: 'docs', yarnLock: 'yarn.lock' },
extractedConstraints: { yarn: '^3.2.0' },
},
];
await detectMonorepos(packageFiles);
expect(packageFiles).toMatchObject([
{
extractedConstraints: {
node: '^14.15.0 || >=16.13.0',
yarn: '3.2.1',
},
managerData: {
hasPackageManager: true,
},
},
{
extractedConstraints: {
node: '^14.15.0 || >=16.13.0',
yarn: '^3.2.0',
},
managerData: {
hasPackageManager: true,
},
},
]);
});
it('uses yarnZeroInstall and skipInstalls from yarn workspaces package settings', async () => {
const packageFiles: Partial<PackageFile>[] = [
{
packageFile: 'package.json',
managerData: {
workspacesPackages: 'packages/*',
yarnZeroInstall: true,
},
skipInstalls: false,
npmrc: '@org:registry=//registry.some.org\n',
},
{
packageFile: 'packages/a/package.json',
managerData: { packageJsonName: '@org/a', yarnLock: 'yarn.lock' },
},
{
packageFile: 'packages/b/package.json',
managerData: { packageJsonName: '@org/b' },
skipInstalls: true,
},
];
await detectMonorepos(packageFiles);
expect(packageFiles).toMatchObject([
{},
{ managerData: { yarnZeroInstall: true }, skipInstalls: false },
{ managerData: { yarnZeroInstall: true }, skipInstalls: false },
]);
});
});
});