mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-28 02:53:15 -04:00
Align function, type, and file names with the packages-to-projects rename in workspace packages (projects-filter, projects-reader, projects-sorter).
105 lines
2.7 KiB
TypeScript
105 lines
2.7 KiB
TypeScript
import { jest } from '@jest/globals'
|
|
import { preparePackages } from '@pnpm/prepare'
|
|
import { filterProjectsBySelectorObjectsFromDir } from '@pnpm/workspace.projects-filter'
|
|
|
|
import { DEFAULT_OPTS } from './utils/index.js'
|
|
|
|
const warn = jest.fn()
|
|
const info = jest.fn()
|
|
const debug = jest.fn()
|
|
const original = await import('@pnpm/logger')
|
|
jest.unstable_mockModule('@pnpm/logger', () => ({
|
|
...original,
|
|
logger: Object.assign(() => ({ warn, info, debug }), { warn, info, debug }),
|
|
}))
|
|
const { install } = await import('@pnpm/installing.commands')
|
|
|
|
afterEach(() => {
|
|
jest.mocked(warn).mockRestore()
|
|
})
|
|
|
|
test('should warn about cyclic dependencies', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
dependencies: { 'project-2': 'workspace:*' },
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '2.0.0',
|
|
devDependencies: { 'project-1': 'workspace:*' },
|
|
},
|
|
])
|
|
|
|
const { allProjects, selectedProjectsGraph } = await filterProjectsBySelectorObjectsFromDir(process.cwd(), [])
|
|
await install.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
})
|
|
|
|
expect(warn).toHaveBeenCalledTimes(1)
|
|
expect(warn).toHaveBeenCalledWith({
|
|
message: expect.stringMatching(/^There are cyclic workspace dependencies: /),
|
|
prefix: process.cwd(),
|
|
})
|
|
})
|
|
|
|
test('should not warn about cyclic dependencies if ignore-workspace-cycles is set', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
dependencies: { 'project-2': 'workspace:*' },
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '2.0.0',
|
|
devDependencies: { 'project-1': 'workspace:*' },
|
|
},
|
|
])
|
|
|
|
const { allProjects, selectedProjectsGraph } = await filterProjectsBySelectorObjectsFromDir(process.cwd(), [])
|
|
await install.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
ignoreWorkspaceCycles: true,
|
|
})
|
|
|
|
expect(warn).toHaveBeenCalledTimes(0)
|
|
})
|
|
|
|
test('should not warn about cyclic dependencies if there are not', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
dependencies: { 'project-2': 'workspace:*' },
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '2.0.0',
|
|
},
|
|
])
|
|
|
|
const { allProjects, selectedProjectsGraph } = await filterProjectsBySelectorObjectsFromDir(process.cwd(), [])
|
|
await install.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
})
|
|
|
|
expect(warn).toHaveBeenCalledTimes(0)
|
|
})
|