mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-02 20:18:15 -05:00
187 lines
4.2 KiB
TypeScript
187 lines
4.2 KiB
TypeScript
import path from 'path'
|
|
import { filterPkgsBySelectorObjects, readProjects } from '@pnpm/filter-workspace-packages'
|
|
import { test as testCommand } from '@pnpm/plugin-commands-script-runners'
|
|
import { preparePackages } from '@pnpm/prepare'
|
|
import execa from 'execa'
|
|
import { DEFAULT_OPTS, REGISTRY_URL } from './utils'
|
|
|
|
const pnpmBin = path.join(__dirname, '../../../pnpm/bin/pnpm.cjs')
|
|
|
|
test('pnpm recursive test', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'json-append': '1',
|
|
},
|
|
scripts: {
|
|
test: 'node -e "process.stdout.write(\'project-1\')" | json-append ../output1.json && node -e "process.stdout.write(\'project-1\')" | json-append ../output2.json',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'json-append': '1',
|
|
'project-1': '1',
|
|
},
|
|
scripts: {
|
|
test: 'node -e "process.stdout.write(\'project-2\')" | json-append ../output1.json',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-3',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'json-append': '1',
|
|
'project-1': '1',
|
|
},
|
|
scripts: {
|
|
test: 'node -e "process.stdout.write(\'project-3\')" | json-append ../output2.json',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-0',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {},
|
|
},
|
|
])
|
|
|
|
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
|
await execa('node', [
|
|
pnpmBin,
|
|
'install',
|
|
'-r',
|
|
'--registry',
|
|
REGISTRY_URL,
|
|
'--store-dir',
|
|
path.resolve(DEFAULT_OPTS.storeDir),
|
|
])
|
|
await testCommand.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
})
|
|
|
|
const { default: outputs1 } = await import(path.resolve('output1.json'))
|
|
const { default: outputs2 } = await import(path.resolve('output2.json'))
|
|
|
|
expect(outputs1).toStrictEqual(['project-1', 'project-2'])
|
|
expect(outputs2).toStrictEqual(['project-1', 'project-3'])
|
|
})
|
|
|
|
test('`pnpm recursive test` does not fail if none of the packages has a test command', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'project-1': '1',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-3',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'project-1': '1',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-0',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {},
|
|
},
|
|
])
|
|
|
|
const { allProjects, selectedProjectsGraph } = await readProjects(process.cwd(), [])
|
|
await execa('node', [
|
|
pnpmBin,
|
|
'install',
|
|
'-r',
|
|
'--registry',
|
|
REGISTRY_URL,
|
|
'--store-dir',
|
|
path.resolve(DEFAULT_OPTS.storeDir),
|
|
])
|
|
|
|
await testCommand.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
})
|
|
})
|
|
|
|
test('pnpm recursive test with filtering', async () => {
|
|
preparePackages([
|
|
{
|
|
name: 'project-1',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'json-append': '1',
|
|
},
|
|
scripts: {
|
|
test: 'node -e "process.stdout.write(\'project-1\')" | json-append ../output.json',
|
|
},
|
|
},
|
|
{
|
|
name: 'project-2',
|
|
version: '1.0.0',
|
|
|
|
dependencies: {
|
|
'json-append': '1',
|
|
'project-1': '1',
|
|
},
|
|
scripts: {
|
|
test: 'node -e "process.stdout.write(\'project-2\')" | json-append ../output.json',
|
|
},
|
|
},
|
|
])
|
|
|
|
const { allProjects } = await readProjects(process.cwd(), [])
|
|
const { selectedProjectsGraph } = await filterPkgsBySelectorObjects(
|
|
allProjects,
|
|
[{ namePattern: 'project-1' }],
|
|
{ workspaceDir: process.cwd() }
|
|
)
|
|
await execa('node', [
|
|
pnpmBin,
|
|
'install',
|
|
'-r',
|
|
'--registry',
|
|
REGISTRY_URL,
|
|
'--store-dir',
|
|
path.resolve(DEFAULT_OPTS.storeDir),
|
|
])
|
|
await testCommand.handler({
|
|
...DEFAULT_OPTS,
|
|
allProjects,
|
|
dir: process.cwd(),
|
|
recursive: true,
|
|
selectedProjectsGraph,
|
|
workspaceDir: process.cwd(),
|
|
})
|
|
|
|
const { default: outputs } = await import(path.resolve('output.json'))
|
|
|
|
expect(outputs).toStrictEqual(['project-1'])
|
|
})
|