mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-25 10:31:55 -04:00
159 lines
5.0 KiB
TypeScript
159 lines
5.0 KiB
TypeScript
import isCI = require('is-ci')
|
|
import path = require('path')
|
|
import exists = require('path-exists')
|
|
import readPkg = require('read-pkg')
|
|
import sinon = require('sinon')
|
|
import {
|
|
install,
|
|
installPkgs,
|
|
RootLog,
|
|
} from 'supi'
|
|
import tape = require('tape')
|
|
import promisifyTape from 'tape-promise'
|
|
import {
|
|
prepare,
|
|
testDefaults,
|
|
} from '../utils'
|
|
|
|
const test = promisifyTape(tape)
|
|
|
|
test('from a github repo', async (t: tape.Test) => {
|
|
const project = prepare(t)
|
|
await installPkgs(['kevva/is-negative'], await testDefaults())
|
|
|
|
const m = project.requireModule('is-negative')
|
|
|
|
t.ok(m, 'isNegative() is available')
|
|
|
|
const pkgJson = await readPkg()
|
|
t.deepEqual(pkgJson.dependencies, {'is-negative': 'github:kevva/is-negative'}, 'has been added to dependencies in package.json')
|
|
})
|
|
|
|
test('from a github repo with different name via named installation', async (t: tape.Test) => {
|
|
const project = prepare(t)
|
|
|
|
const reporter = sinon.spy()
|
|
|
|
await installPkgs(['say-hi@github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd'], await testDefaults({reporter}))
|
|
|
|
const m = project.requireModule('say-hi')
|
|
|
|
t.ok(reporter.calledWithMatch({
|
|
added: {
|
|
dependencyType: 'prod',
|
|
name: 'say-hi',
|
|
realName: 'hi',
|
|
version: '1.0.0',
|
|
},
|
|
level: 'info',
|
|
name: 'pnpm:root',
|
|
} as RootLog), 'adding to root logged with real name and alias name')
|
|
|
|
t.equal(m, 'Hi', 'dep is available')
|
|
|
|
const pkgJson = await readPkg()
|
|
t.deepEqual(pkgJson.dependencies, {'say-hi': 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd'}, 'has been added to dependencies in package.json')
|
|
|
|
const shr = await project.loadShrinkwrap()
|
|
t.deepEqual(shr.dependencies, {
|
|
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
|
|
}, 'the aliased name added to shrinkwrap.yaml')
|
|
|
|
await project.isExecutable('.bin/hi')
|
|
await project.isExecutable('.bin/szia')
|
|
})
|
|
|
|
// This used to fail. Maybe won't be needed once api/install.ts gets refactored and covered with dedicated unit tests
|
|
test('from a github repo with different name', async (t: tape.Test) => {
|
|
const project = prepare(t, {
|
|
dependencies: {
|
|
'say-hi': 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
|
|
},
|
|
})
|
|
|
|
const reporter = sinon.spy()
|
|
|
|
await install(await testDefaults({reporter}))
|
|
|
|
const m = project.requireModule('say-hi')
|
|
|
|
t.ok(reporter.calledWithMatch({
|
|
added: {
|
|
dependencyType: 'prod',
|
|
name: 'say-hi',
|
|
realName: 'hi',
|
|
version: '1.0.0',
|
|
},
|
|
level: 'info',
|
|
name: 'pnpm:root',
|
|
} as RootLog), 'adding to root logged with real name and alias name')
|
|
|
|
t.equal(m, 'Hi', 'dep is available')
|
|
|
|
const pkgJson = await readPkg()
|
|
t.deepEqual(pkgJson.dependencies, {'say-hi': 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd'}, 'has been added to dependencies in package.json')
|
|
|
|
const shr = await project.loadShrinkwrap()
|
|
t.deepEqual(shr.dependencies, {
|
|
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
|
|
}, 'the aliased name added to shrinkwrap.yaml')
|
|
|
|
await project.isExecutable('.bin/hi')
|
|
await project.isExecutable('.bin/szia')
|
|
})
|
|
|
|
test('a subdependency is from a github repo with different name', async (t: tape.Test) => {
|
|
const project = prepare(t)
|
|
|
|
await installPkgs(['has-aliased-git-dependency'], await testDefaults())
|
|
|
|
const m = project.requireModule('has-aliased-git-dependency')
|
|
|
|
t.equal(m, 'Hi', 'subdep is accessible')
|
|
|
|
const shr = await project.loadShrinkwrap()
|
|
t.deepEqual(shr.packages['/has-aliased-git-dependency/1.0.0'].dependencies, {
|
|
'has-say-hi-peer': '/has-say-hi-peer/1.0.0/say-hi@1.0.0',
|
|
'say-hi': 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd',
|
|
}, 'the aliased name added to shrinkwrap.yaml')
|
|
|
|
await project.isExecutable('has-aliased-git-dependency/node_modules/.bin/hi')
|
|
await project.isExecutable('has-aliased-git-dependency/node_modules/.bin/szia')
|
|
|
|
t.ok(await exists(path.join('node_modules', '.localhost+4873', 'has-say-hi-peer', '1.0.0', 'say-hi@1.0.0', 'node_modules', 'has-say-hi-peer')),
|
|
'aliased name used to resolve a peer dependency')
|
|
})
|
|
|
|
test('from a git repo', async (t: tape.Test) => {
|
|
if (isCI) {
|
|
t.skip('not testing the SSH GIT access via CI')
|
|
return t.end()
|
|
}
|
|
const project = prepare(t)
|
|
await installPkgs(['git+ssh://git@github.com/kevva/is-negative.git'], await testDefaults())
|
|
|
|
const m = project.requireModule('is-negative')
|
|
|
|
t.ok(m, 'isNegative() is available')
|
|
})
|
|
|
|
test('from a non-github git repo', async (t: tape.Test) => {
|
|
const project = prepare(t)
|
|
|
|
await installPkgs(['git+http://ikt.pm2.io/ikt.git#3325a3e39a502418dc2e2e4bf21529cbbde96228'], await testDefaults())
|
|
|
|
const m = project.requireModule('ikt')
|
|
|
|
t.ok(m, 'ikt is available')
|
|
|
|
const shr = await project.loadShrinkwrap()
|
|
|
|
const pkgId = 'ikt.pm2.io/ikt/3325a3e39a502418dc2e2e4bf21529cbbde96228'
|
|
t.ok(shr.packages[pkgId])
|
|
t.deepEqual(shr.packages[pkgId].resolution, {
|
|
commit: '3325a3e39a502418dc2e2e4bf21529cbbde96228',
|
|
repo: 'http://ikt.pm2.io/ikt.git',
|
|
type: 'git',
|
|
})
|
|
})
|