Files
pnpm/test/prune.ts

116 lines
4.4 KiB
TypeScript

import tape = require('tape')
import promisifyTape = require('tape-promise')
const test = promisifyTape(tape)
import path = require('path')
import {installPkgs, prune, prunePkgs} from '../src'
import prepare from './support/prepare'
import exists, {existsSymlink} from './support/exists'
test('prune removes extraneous packages', async function (t) {
prepare()
await installPkgs(['is-negative@2.1.0'], {save: true})
await installPkgs(['applyq@0.2.1'], {saveDev: true})
await installPkgs(['fnumber@0.1.0'], {saveOptional: true})
await installPkgs(['is-positive@2.0.0', '@zkochan/logger@0.1.0'])
await prune()
const store = path.join(process.cwd(), 'node_modules', '.store')
const modules = path.join(process.cwd(), 'node_modules')
let stat = await exists(path.join(store, 'is-positive@2.0.0'))
t.ok(!stat, 'extraneous package is removed from store')
stat = await existsSymlink(path.join(modules, 'is-positive'))
t.ok(!stat, 'extraneous package is removed from node_modules')
stat = await exists(path.join(store, '@zkochan+logger@0.1.0'))
t.ok(!stat, 'scoped extraneous package is removed from store')
stat = await existsSymlink(path.join(modules, '@zkochan/logger'))
t.ok(!stat, 'scoped extraneous package is removed from node_modules')
stat = await exists(path.join(store, 'is-negative@2.1.0'))
t.ok(stat, 'dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'is-negative'))
t.ok(stat, 'dependency package is not removed from node_modules')
stat = await exists(path.join(store, 'applyq@0.2.1'))
t.ok(stat, 'dev dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'applyq'))
t.ok(stat, 'dev dependency package is not removed from node_modules')
stat = await exists(path.join(store, 'fnumber@0.1.0'))
t.ok(stat, 'optional dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'fnumber'))
t.ok(stat, 'optional dependency package is not removed from node_modules')
})
test('prune removes only the specified extraneous packages', async function (t) {
prepare()
await installPkgs(['is-positive@2.0.0', 'is-negative@2.1.0'])
await prunePkgs(['is-positive'])
const store = path.join(process.cwd(), 'node_modules', '.store')
const modules = path.join(process.cwd(), 'node_modules')
let stat = await exists(path.join(store, 'is-positive@2.0.0'))
t.ok(!stat, 'extraneous package is removed from store')
stat = await existsSymlink(path.join(modules, 'is-positive'))
t.ok(!stat, 'extraneous package is removed from node_modules')
stat = await exists(path.join(store, 'is-negative@2.1.0'))
t.ok(stat, 'dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'is-negative'))
t.ok(stat, 'dependency package is not removed from node_modules')
})
test('prune throws error when trying to removes not an extraneous package', async function (t) {
prepare()
await installPkgs(['is-positive@2.0.0'], {save: true})
try {
await prunePkgs(['is-positive'])
t.fail('prune had to fail')
} catch (err) {
t.equal(err['code'], 'PRUNE_NOT_EXTR', 'cannot prune non-extraneous package error thrown')
}
})
test('prune removes dev dependencies in production', async function (t) {
prepare()
await installPkgs(['is-positive@2.0.0'], {saveDev: true})
await installPkgs(['is-negative@2.1.0'], {save: true})
await installPkgs(['fnumber@0.1.0'], {saveOptional: true})
await prune({production: true})
const store = path.join(process.cwd(), 'node_modules', '.store')
const modules = path.join(process.cwd(), 'node_modules')
let stat = await exists(path.join(store, 'is-positive@2.0.0'))
t.ok(!stat, 'dev dependency package is removed from store')
stat = await existsSymlink(path.join(modules, 'is-positive'))
t.ok(!stat, 'dev dependency package is removed from node_modules')
stat = await exists(path.join(store, 'is-negative@2.1.0'))
t.ok(stat, 'dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'is-negative'))
t.ok(stat, 'dependency package is not removed from node_modules')
stat = await exists(path.join(store, 'fnumber@0.1.0'))
t.ok(stat, 'optional dependency package is not removed from store')
stat = await existsSymlink(path.join(modules, 'fnumber'))
t.ok(stat, 'optional dependency package is not removed from node_modules')
})