PR-URL: https://github.com/nodejs/node/pull/42886 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Mestery <mestery@protonmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
153 lines
4.0 KiB
JavaScript
153 lines
4.0 KiB
JavaScript
const t = require('tap')
|
|
const { load: loadMockNpm } = require('../../fixtures/mock-npm')
|
|
|
|
const MockRegistry = require('../../fixtures/mock-registry.js')
|
|
|
|
const user = 'test-user'
|
|
const token = 'test-auth-token'
|
|
const auth = { '//registry.npmjs.org/:_authToken': token }
|
|
const versions = ['1.0.0', '1.0.1', '1.0.1-pre']
|
|
|
|
// libnpmaccess maps these to read-write and read-only
|
|
const packages = { foo: 'write', bar: 'write', baz: 'write', buzz: 'read' }
|
|
|
|
t.test('completion', async t => {
|
|
const { npm } = await loadMockNpm(t, {
|
|
config: {
|
|
...auth,
|
|
},
|
|
})
|
|
|
|
const deprecate = await npm.cmd('deprecate')
|
|
const testComp = async (argv, expect) => {
|
|
const res =
|
|
await deprecate.completion({ conf: { argv: { remain: argv } } })
|
|
t.strictSame(res, expect, `completion: ${argv}`)
|
|
}
|
|
|
|
const registry = new MockRegistry({
|
|
tap: t,
|
|
registry: npm.config.get('registry'),
|
|
authorization: token,
|
|
})
|
|
|
|
registry.whoami({ username: user, times: 4 })
|
|
registry.lsPackages({ team: user, packages, times: 4 })
|
|
await Promise.all([
|
|
testComp([], ['foo', 'bar', 'baz']),
|
|
testComp(['b'], ['bar', 'baz']),
|
|
testComp(['fo'], ['foo']),
|
|
testComp(['g'], []),
|
|
])
|
|
|
|
await testComp(['foo', 'something'], [])
|
|
|
|
registry.whoami({ statusCode: 404, body: {} })
|
|
|
|
t.rejects(testComp([], []), { code: 'ENEEDAUTH' })
|
|
})
|
|
|
|
t.test('no args', async t => {
|
|
const { npm } = await loadMockNpm(t)
|
|
await t.rejects(
|
|
npm.exec('deprecate', []),
|
|
{ code: 'EUSAGE' },
|
|
'logs usage'
|
|
)
|
|
})
|
|
|
|
t.test('only one arg', async t => {
|
|
const { npm } = await loadMockNpm(t)
|
|
await t.rejects(
|
|
npm.exec('deprecate', ['foo']),
|
|
{ code: 'EUSAGE' },
|
|
'logs usage'
|
|
)
|
|
})
|
|
|
|
t.test('invalid semver range', async t => {
|
|
const { npm } = await loadMockNpm(t)
|
|
await t.rejects(
|
|
npm.exec('deprecate', ['foo@notaversion', 'this will fail']),
|
|
/invalid version range/,
|
|
'logs semver error'
|
|
)
|
|
})
|
|
|
|
t.test('undeprecate', async t => {
|
|
const { npm, joinedOutput } = await loadMockNpm(t, { config: { ...auth } })
|
|
const registry = new MockRegistry({
|
|
tap: t,
|
|
registry: npm.config.get('registry'),
|
|
authorization: token,
|
|
})
|
|
const manifest = registry.manifest({
|
|
name: 'foo',
|
|
versions,
|
|
})
|
|
registry.package({ manifest, query: { write: true } })
|
|
registry.nock.put('/foo', body => {
|
|
for (const version of versions) {
|
|
if (body.versions[version].deprecated !== '') {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}).reply(200, {})
|
|
|
|
await npm.exec('deprecate', ['foo', ''])
|
|
t.match(joinedOutput(), '')
|
|
})
|
|
|
|
t.test('deprecates given range', async t => {
|
|
const { npm, joinedOutput } = await loadMockNpm(t, { config: { ...auth } })
|
|
const registry = new MockRegistry({
|
|
tap: t,
|
|
registry: npm.config.get('registry'),
|
|
authorization: token,
|
|
})
|
|
const manifest = registry.manifest({
|
|
name: 'foo',
|
|
versions,
|
|
})
|
|
registry.package({ manifest, query: { write: true } })
|
|
const message = 'test deprecation message'
|
|
registry.nock.put('/foo', body => {
|
|
if (body.versions['1.0.1'].deprecated) {
|
|
return false
|
|
}
|
|
if (body.versions['1.0.1-pre'].deprecated) {
|
|
return false
|
|
}
|
|
return body.versions['1.0.0'].deprecated === message
|
|
}).reply(200, {})
|
|
await npm.exec('deprecate', ['foo@1.0.0', message])
|
|
t.match(joinedOutput(), '')
|
|
})
|
|
|
|
t.test('deprecates all versions when no range is specified', async t => {
|
|
const { npm, joinedOutput } = await loadMockNpm(t, { config: { ...auth } })
|
|
const registry = new MockRegistry({
|
|
tap: t,
|
|
registry: npm.config.get('registry'),
|
|
authorization: token,
|
|
})
|
|
const manifest = registry.manifest({
|
|
name: 'foo',
|
|
versions,
|
|
})
|
|
registry.package({ manifest, query: { write: true } })
|
|
const message = 'test deprecation message'
|
|
registry.nock.put('/foo', body => {
|
|
for (const version of versions) {
|
|
if (body.versions[version].deprecated !== message) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}).reply(200, {})
|
|
|
|
await npm.exec('deprecate', ['foo', message])
|
|
t.match(joinedOutput(), '')
|
|
})
|