node/deps/npm/test/lib/commands/trust/revoke.js
npm CLI robot 10172e394b
deps: upgrade npm to 11.10.1
PR-URL: https://github.com/nodejs/node/pull/61892
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
2026-02-22 00:19:51 +00:00

319 lines
7.7 KiB
JavaScript

const t = require('tap')
const { load: loadMockNpm } = require('../../../fixtures/mock-npm.js')
const MockRegistry = require('@npmcli/mock-registry')
const packageName = '@npmcli/test-package'
t.test('revoke with package name argument and id', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id-1'
registry.trustRevoke({ packageName, id: trustId })
await npm.exec('trust', ['revoke', packageName, '--id', trustId])
})
t.test('revoke without package name (uses package.json)', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id-2'
registry.trustRevoke({ packageName, id: trustId })
await npm.exec('trust', ['revoke', '--id', trustId])
})
t.test('revoke with dry-run flag', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
'dry-run': true,
},
})
// No registry mock needed since dry-run should not make network requests
const trustId = 'test-id-3'
await npm.exec('trust', ['revoke', packageName, '--id', trustId])
})
t.test('revoke without package name and no package.json', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
await t.rejects(
npm.exec('trust', ['revoke', '--id', 'test-id']),
{ message: /Package name must be specified either as an argument or in the package\.json file/ }
)
})
t.test('revoke without package name and no name in package.json', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
await t.rejects(
npm.exec('trust', ['revoke', '--id', 'test-id']),
{ message: /Package name must be specified either as an argument or in the package\.json file/ }
)
})
t.test('revoke without id flag', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
await t.rejects(
npm.exec('trust', ['revoke', packageName]),
{ message: /ID of the trusted relationship to revoke must be specified with the --id option/ }
)
})
t.test('revoke with scoped package', async t => {
const scopedPackage = '@scope/package'
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: scopedPackage,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id-scoped'
registry.trustRevoke({ packageName: scopedPackage, id: trustId })
await npm.exec('trust', ['revoke', scopedPackage, '--id', trustId])
})
t.test('revoke with special characters in id', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id/with:special@chars'
registry.trustRevoke({ packageName, id: trustId })
await npm.exec('trust', ['revoke', packageName, '--id', trustId])
})
t.test('revoke with 404 response', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'non-existent-id'
registry.trustRevoke({
packageName,
id: trustId,
responseCode: 404,
body: { error: 'Not Found' },
})
await t.rejects(
npm.exec('trust', ['revoke', packageName, '--id', trustId]),
{ statusCode: 404 }
)
})
t.test('revoke with 500 response', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id-error'
registry.trustRevoke({
packageName,
id: trustId,
responseCode: 500,
body: { error: 'Internal Server Error' },
})
await t.rejects(
npm.exec('trust', ['revoke', packageName, '--id', trustId]),
{ statusCode: 500 }
)
})
t.test('revoke with unscoped package name', async t => {
const unscopedPackage = 'test-package'
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: unscopedPackage,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'test-id-unscoped'
registry.trustRevoke({ packageName: unscopedPackage, id: trustId })
await npm.exec('trust', ['revoke', unscopedPackage, '--id', trustId])
})
t.test('revoke with very long id', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = 'a'.repeat(100)
registry.trustRevoke({ packageName, id: trustId })
await npm.exec('trust', ['revoke', packageName, '--id', trustId])
})
t.test('revoke with UUID id format', async t => {
const { npm } = await loadMockNpm(t, {
prefixDir: {
'package.json': JSON.stringify({
name: packageName,
version: '1.0.0',
}),
},
config: {
'//registry.npmjs.org/:_authToken': 'test-auth-token',
},
})
const registry = new MockRegistry({
tap: t,
registry: npm.config.get('registry'),
authorization: 'test-auth-token',
})
const trustId = '550e8400-e29b-41d4-a716-446655440000'
registry.trustRevoke({ packageName, id: trustId })
await npm.exec('trust', ['revoke', packageName, '--id', trustId])
})