mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.1 KiB
108 lines
2.1 KiB
'use strict'
|
|
var npm = require('../../lib/npm.js')
|
|
var log = require('npmlog')
|
|
var test = require('tap').test
|
|
|
|
var mockLog = {
|
|
finish: function () {},
|
|
silly: function () {}
|
|
}
|
|
|
|
var actions
|
|
test('setup', function (t) {
|
|
npm.load(function () {
|
|
log.disableProgress()
|
|
actions = require('../../lib/install/actions.js').actions
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('->optdep:a->dep:b', function (t) {
|
|
var moduleA = {
|
|
name: 'a',
|
|
path: '/',
|
|
package: {
|
|
scripts: {
|
|
postinstall: 'false'
|
|
},
|
|
dependencies: {
|
|
b: '*'
|
|
}
|
|
}
|
|
}
|
|
var moduleB = {
|
|
name: 'b',
|
|
path: '/',
|
|
package: {},
|
|
requires: [],
|
|
requiredBy: [moduleA]
|
|
}
|
|
moduleA.requires = [moduleB]
|
|
|
|
var tree = {
|
|
path: '/',
|
|
package: {
|
|
optionalDependencies: {
|
|
a: '*'
|
|
}
|
|
},
|
|
children: [moduleA, moduleB],
|
|
requires: [moduleA]
|
|
}
|
|
moduleA.requiredBy = [tree]
|
|
|
|
t.plan(3)
|
|
actions.postinstall('/', '/', moduleA, mockLog, function (er) {
|
|
t.ok(er && er.code === 'ELIFECYCLE', 'Lifecycle failed')
|
|
t.ok(moduleA.failed, 'moduleA (optional dep) is marked failed')
|
|
t.ok(moduleB.failed, 'moduleB (direct dep of moduleA) is marked as failed')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('->dep:b,->optdep:a->dep:b', function (t) {
|
|
var moduleA = {
|
|
name: 'a',
|
|
path: '/',
|
|
package: {
|
|
scripts: {
|
|
postinstall: 'false'
|
|
},
|
|
dependencies: {
|
|
b: '*'
|
|
}
|
|
}
|
|
}
|
|
var moduleB = {
|
|
name: 'b',
|
|
path: '/',
|
|
package: {},
|
|
requires: [],
|
|
requiredBy: [moduleA]
|
|
}
|
|
moduleA.requires = [moduleB]
|
|
|
|
var tree = {
|
|
path: '/',
|
|
package: {
|
|
dependencies: {
|
|
b: '*'
|
|
},
|
|
optionalDependencies: {
|
|
a: '*'
|
|
}
|
|
},
|
|
children: [moduleA, moduleB],
|
|
requires: [moduleA, moduleB]
|
|
}
|
|
moduleA.requiredBy = [tree]
|
|
moduleB.requiredBy.push(tree)
|
|
|
|
t.plan(3)
|
|
actions.postinstall('/', '/', moduleA, mockLog, function (er) {
|
|
t.ok(er && er.code === 'ELIFECYCLE', 'Lifecycle failed')
|
|
t.ok(moduleA.failed, 'moduleA (optional dep) is marked failed')
|
|
t.ok(!moduleB.failed, 'moduleB (direct dep of moduleA) is marked as failed')
|
|
t.end()
|
|
})
|
|
})
|
|
|