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.
531 lines
12 KiB
531 lines
12 KiB
var fs = require('fs')
|
|
var path = require('path')
|
|
var mkdirp = require('mkdirp')
|
|
var rimraf = require('rimraf')
|
|
var mr = require('npm-registry-mock')
|
|
|
|
var test = require('tap').test
|
|
var common = require('../common-tap.js')
|
|
|
|
var pkg = path.resolve(__dirname, 'access')
|
|
var server
|
|
|
|
var scoped = {
|
|
name: '@scoped/pkg',
|
|
version: '1.1.1'
|
|
}
|
|
|
|
test('setup', function (t) {
|
|
mkdirp(pkg, function (er) {
|
|
t.ifError(er, pkg + ' made successfully')
|
|
|
|
mr({port: common.port}, function (err, s) {
|
|
t.ifError(err, 'registry mocked successfully')
|
|
server = s
|
|
|
|
fs.writeFile(
|
|
path.join(pkg, 'package.json'),
|
|
JSON.stringify(scoped),
|
|
function (er) {
|
|
t.ifError(er, 'wrote package.json')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
})
|
|
})
|
|
|
|
test('npm access public on current package', function (t) {
|
|
server.post('/-/package/%40scoped%2Fpkg/access', JSON.stringify({
|
|
access: 'public'
|
|
})).reply(200, {
|
|
accessChanged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'public',
|
|
'--registry', common.registry,
|
|
'--loglevel', 'silent'
|
|
], {
|
|
cwd: pkg
|
|
},
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access')
|
|
t.equal(code, 0, 'exited OK')
|
|
t.equal(stderr, '', 'no error output')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access public when no package passed and no package.json', function (t) {
|
|
// need to simulate a missing package.json
|
|
var missing = path.join(__dirname, 'access-public-missing-guard')
|
|
mkdirp.sync(path.join(missing, 'node_modules'))
|
|
|
|
common.npm([
|
|
'access',
|
|
'public',
|
|
'--registry', common.registry
|
|
], {
|
|
cwd: missing
|
|
},
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access')
|
|
t.match(stderr, /no package name passed to command and no package.json found/)
|
|
rimraf.sync(missing)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('npm access public when no package passed and invalid package.json', function (t) {
|
|
// need to simulate a missing package.json
|
|
var invalid = path.join(__dirname, 'access-public-invalid-package')
|
|
mkdirp.sync(path.join(invalid, 'node_modules'))
|
|
// it's hard to force `read-package-json` to break w/o ENOENT, but this will do it
|
|
fs.writeFileSync(path.join(invalid, 'package.json'), '{\n')
|
|
|
|
common.npm([
|
|
'access',
|
|
'public',
|
|
'--registry', common.registry
|
|
], {
|
|
cwd: invalid
|
|
},
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access')
|
|
t.match(stderr, /Failed to parse json/)
|
|
rimraf.sync(invalid)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('npm access restricted on current package', function (t) {
|
|
server.post('/-/package/%40scoped%2Fpkg/access', JSON.stringify({
|
|
access: 'restricted'
|
|
})).reply(200, {
|
|
accessChanged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'restricted',
|
|
'--registry', common.registry,
|
|
'--loglevel', 'silent'
|
|
], {
|
|
cwd: pkg
|
|
},
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access')
|
|
t.equal(code, 0, 'exited OK')
|
|
t.equal(stderr, '', 'no error output')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access on named package', function (t) {
|
|
server.post('/-/package/%40scoped%2Fanother/access', {
|
|
access: 'public'
|
|
}).reply(200, {
|
|
accessChaged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'public', '@scoped/another',
|
|
'--registry', common.registry,
|
|
'--loglevel', 'silent'
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access')
|
|
t.equal(code, 0, 'exited OK')
|
|
t.equal(stderr, '', 'no error output')
|
|
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm change access on unscoped package', function (t) {
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'restricted', 'yargs',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ok(code, 'exited with Error')
|
|
t.matches(
|
|
stderr, /access commands are only accessible for scoped packages/)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access grant read-only', function (t) {
|
|
server.put('/-/team/myorg/myteam/package', {
|
|
permissions: 'read-only',
|
|
package: '@scoped/another'
|
|
}).reply(201, {
|
|
accessChaged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'grant', 'read-only',
|
|
'myorg:myteam',
|
|
'@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access grant')
|
|
t.equal(code, 0, 'exited with Error')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access grant read-write', function (t) {
|
|
server.put('/-/team/myorg/myteam/package', {
|
|
permissions: 'read-write',
|
|
package: '@scoped/another'
|
|
}).reply(201, {
|
|
accessChaged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'grant', 'read-write',
|
|
'myorg:myteam',
|
|
'@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access grant')
|
|
t.equal(code, 0, 'exited with Error')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access grant others', function (t) {
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'grant', 'rerere',
|
|
'myorg:myteam',
|
|
'@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ok(code, 'exited with Error')
|
|
t.matches(stderr, /read-only/)
|
|
t.matches(stderr, /read-write/)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access revoke', function (t) {
|
|
server.delete('/-/team/myorg/myteam/package', {
|
|
package: '@scoped/another'
|
|
}).reply(200, {
|
|
accessChaged: true
|
|
})
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'revoke',
|
|
'myorg:myteam',
|
|
'@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access grant')
|
|
t.equal(code, 0, 'exited with Error')
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-packages with no team', function (t) {
|
|
var serverPackages = {
|
|
'@foo/bar': 'write',
|
|
'@foo/util': 'read'
|
|
}
|
|
var clientPackages = {
|
|
'@foo/bar': 'read-write',
|
|
'@foo/util': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/org/username/package?format=cli'
|
|
).reply(200, serverPackages)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-packages',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-packages')
|
|
t.same(JSON.parse(stdout), clientPackages)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-packages on team', function (t) {
|
|
var serverPackages = {
|
|
'@foo/bar': 'write',
|
|
'@foo/util': 'read'
|
|
}
|
|
var clientPackages = {
|
|
'@foo/bar': 'read-write',
|
|
'@foo/util': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/team/myorg/myteam/package?format=cli'
|
|
).reply(200, serverPackages)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-packages',
|
|
'myorg:myteam',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-packages')
|
|
t.same(JSON.parse(stdout), clientPackages)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-packages on org', function (t) {
|
|
var serverPackages = {
|
|
'@foo/bar': 'write',
|
|
'@foo/util': 'read'
|
|
}
|
|
var clientPackages = {
|
|
'@foo/bar': 'read-write',
|
|
'@foo/util': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/org/myorg/package?format=cli'
|
|
).reply(200, serverPackages)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-packages',
|
|
'myorg',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-packages')
|
|
t.same(JSON.parse(stdout), clientPackages)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-packages on user', function (t) {
|
|
var serverPackages = {
|
|
'@foo/bar': 'write',
|
|
'@foo/util': 'read'
|
|
}
|
|
var clientPackages = {
|
|
'@foo/bar': 'read-write',
|
|
'@foo/util': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/org/myorg/package?format=cli'
|
|
).reply(404, {error: 'nope'})
|
|
server.get(
|
|
'/-/user/myorg/package?format=cli'
|
|
).reply(200, serverPackages)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-packages',
|
|
'myorg',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-packages')
|
|
t.same(JSON.parse(stdout), clientPackages)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-packages with no package specified or package.json', function (t) {
|
|
// need to simulate a missing package.json
|
|
var missing = path.join(__dirname, 'access-missing-guard')
|
|
mkdirp.sync(path.join(missing, 'node_modules'))
|
|
|
|
var serverPackages = {
|
|
'@foo/bar': 'write',
|
|
'@foo/util': 'read'
|
|
}
|
|
var clientPackages = {
|
|
'@foo/bar': 'read-write',
|
|
'@foo/util': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/org/myorg/package?format=cli'
|
|
).reply(404, {error: 'nope'})
|
|
server.get(
|
|
'/-/user/myorg/package?format=cli'
|
|
).reply(200, serverPackages)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-packages',
|
|
'myorg',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: missing },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-packages')
|
|
t.same(JSON.parse(stdout), clientPackages)
|
|
rimraf.sync(missing)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-collaborators on current', function (t) {
|
|
var serverCollaborators = {
|
|
'myorg:myteam': 'write',
|
|
'myorg:anotherteam': 'read'
|
|
}
|
|
var clientCollaborators = {
|
|
'myorg:myteam': 'read-write',
|
|
'myorg:anotherteam': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/package/%40scoped%2Fpkg/collaborators?format=cli'
|
|
).reply(200, serverCollaborators)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-collaborators',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-collaborators')
|
|
t.same(JSON.parse(stdout), clientCollaborators)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-collaborators on package', function (t) {
|
|
var serverCollaborators = {
|
|
'myorg:myteam': 'write',
|
|
'myorg:anotherteam': 'read'
|
|
}
|
|
var clientCollaborators = {
|
|
'myorg:myteam': 'read-write',
|
|
'myorg:anotherteam': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/package/%40scoped%2Fanother/collaborators?format=cli'
|
|
).reply(200, serverCollaborators)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-collaborators',
|
|
'@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-collaborators')
|
|
t.same(JSON.parse(stdout), clientCollaborators)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access ls-collaborators on current w/user filter', function (t) {
|
|
var serverCollaborators = {
|
|
'myorg:myteam': 'write',
|
|
'myorg:anotherteam': 'read'
|
|
}
|
|
var clientCollaborators = {
|
|
'myorg:myteam': 'read-write',
|
|
'myorg:anotherteam': 'read-only'
|
|
}
|
|
server.get(
|
|
'/-/package/%40scoped%2Fanother/collaborators?format=cli&user=zkat'
|
|
).reply(200, serverCollaborators)
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'ls-collaborators',
|
|
'@scoped/another',
|
|
'zkat',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ifError(er, 'npm access ls-collaborators')
|
|
t.same(JSON.parse(stdout), clientCollaborators)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access edit', function (t) {
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'edit', '@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ok(code, 'exited with Error')
|
|
t.match(stderr, /edit subcommand is not implemented yet/)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('npm access blerg', function (t) {
|
|
common.npm(
|
|
[
|
|
'access',
|
|
'blerg', '@scoped/another',
|
|
'--registry', common.registry
|
|
],
|
|
{ cwd: pkg },
|
|
function (er, code, stdout, stderr) {
|
|
t.ok(code, 'exited with Error')
|
|
t.matches(stderr, /Usage:/)
|
|
t.end()
|
|
}
|
|
)
|
|
})
|
|
|
|
test('cleanup', function (t) {
|
|
t.pass('cleaned up')
|
|
rimraf.sync(pkg)
|
|
server.done()
|
|
server.close()
|
|
t.end()
|
|
})
|
|
|