%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/npm/test/lib/commands/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/npm/test/lib/commands/hook.js |
const t = require('tap') const mockNpm = require('../../fixtures/mock-npm') const mockHook = async (t, { hookResponse, ...npmOpts } = {}) => { const now = Date.now() let hookArgs = null const pkgTypes = { semver: 'package', '@npmcli': 'scope', npm: 'owner', } const libnpmhook = { add: async (pkg, uri, secret, opts) => { hookArgs = { pkg, uri, secret, opts } return { id: 1, name: pkg, type: pkgTypes[pkg], endpoint: uri } }, ls: async opts => { hookArgs = opts let id = 0 if (hookResponse) { return hookResponse } return Object.keys(pkgTypes).map(name => ({ id: ++id, name, type: pkgTypes[name], endpoint: 'https://google.com', last_delivery: id % 2 === 0 ? now : undefined, })) }, rm: async (id, opts) => { hookArgs = { id, opts } const pkg = Object.keys(pkgTypes)[0] return { id: 1, name: pkg, type: pkgTypes[pkg], endpoint: 'https://google.com', } }, update: async (id, uri, secret, opts) => { hookArgs = { id, uri, secret, opts } const pkg = Object.keys(pkgTypes)[0] return { id, name: pkg, type: pkgTypes[pkg], endpoint: uri } }, } const mock = await mockNpm(t, { ...npmOpts, command: 'hook', mocks: { libnpmhook, ...npmOpts.mocks, }, }) return { ...mock, now, hookArgs: () => hookArgs, } } t.test('npm hook no args', async t => { const { hook } = await mockHook(t) await t.rejects(hook.exec([]), hook.usage, 'throws usage with no arguments') }) t.test('npm hook add', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t) await hook.exec(['add', 'semver', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: 'semver', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame(outputs[0], ['+ semver -> https://google.com'], 'prints the correct output') }) t.test('npm hook add - correct owner hook output', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t) await hook.exec(['add', '~npm', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: '~npm', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame(outputs[0], ['+ ~npm -> https://google.com'], 'prints the correct output') }) t.test('npm hook add - correct scope hook output', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t) await hook.exec(['add', '@npmcli', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: '@npmcli', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame(outputs[0], ['+ @npmcli -> https://google.com'], 'prints the correct output') }) t.test('npm hook add - unicode output', async t => { const config = { unicode: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['add', 'semver', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: 'semver', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame(outputs[0], ['+ semver ➜ https://google.com'], 'prints the correct output') }) t.test('npm hook add - json output', async t => { const config = { json: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['add', '@npmcli', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: '@npmcli', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame( JSON.parse(outputs[0][0]), { id: 1, name: '@npmcli', endpoint: 'https://google.com', type: 'scope', }, 'prints the correct json output' ) }) t.test('npm hook add - parseable output', async t => { const config = { parseable: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['add', '@npmcli', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: '@npmcli', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame( outputs[0][0].split(/\t/), ['id', 'name', 'type', 'endpoint'], 'prints the correct parseable output headers' ) t.strictSame( outputs[1][0].split(/\t/), ['1', '@npmcli', 'scope', 'https://google.com'], 'prints the correct parseable values' ) }) t.test('npm hook add - silent output', async t => { const config = { loglevel: 'silent' } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['add', '@npmcli', 'https://google.com', 'some-secret']) t.match( hookArgs(), { pkg: '@npmcli', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'provided the correct arguments to libnpmhook' ) t.strictSame(outputs, [], 'printed no output') }) t.test('npm hook ls', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) t.equal(outputs[0][0], 'You have 3 hooks configured.', 'prints the correct header') const { default: stripAnsi } = await import('strip-ansi') const out = stripAnsi(outputs[1][0]) t.match(out, /semver.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints package hook') t.match(out, /@npmcli.*https:\/\/google.com.*\n.*\n.*triggered just now/, 'prints scope hook') t.match(out, /~npm.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints owner hook') }) t.test('npm hook ls, no results', async t => { const hookResponse = [] const { npm, hook, outputs, hookArgs } = await mockHook(t, { hookResponse, }) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) t.equal(outputs[0][0], "You don't have any hooks configured yet.", 'prints the correct result') }) t.test('npm hook ls, single result', async t => { const hookResponse = [ { id: 1, name: 'semver', type: 'package', endpoint: 'https://google.com', }, ] const { npm, hook, outputs, hookArgs } = await mockHook(t, { hookResponse, }) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) t.equal(outputs[0][0], 'You have one hook configured.', 'prints the correct header') const { default: stripAnsi } = await import('strip-ansi') const out = stripAnsi(outputs[1][0]) t.match(out, /semver.*https:\/\/google.com.*\n.*\n.*never triggered/, 'prints package hook') }) t.test('npm hook ls - json output', async t => { const config = { json: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) const out = JSON.parse(outputs[0]) t.match( out, [ { id: 1, name: 'semver', type: 'package', endpoint: 'https://google.com', }, { id: 2, name: 'npmcli', type: 'scope', endpoint: 'https://google.com', }, { id: 3, name: 'npm', type: 'owner', endpoint: 'https://google.com', }, ], 'prints the correct output' ) }) t.test('npm hook ls - parseable output', async t => { const config = { parseable: true, } const { npm, hook, outputs, hookArgs, now } = await mockHook(t, { config, }) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) t.strictSame( outputs.map(line => line[0].split(/\t/)), [ ['id', 'name', 'type', 'endpoint', 'last_delivery'], ['1', 'semver', 'package', 'https://google.com', ''], ['2', '@npmcli', 'scope', 'https://google.com', `${now}`], ['3', 'npm', 'owner', 'https://google.com', ''], ], 'prints the correct result' ) }) t.test('npm hook ls - silent output', async t => { const config = { loglevel: 'silent' } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['ls']) t.match( hookArgs(), { ...npm.flatOptions, package: undefined, }, 'received the correct arguments' ) t.strictSame(outputs, [], 'printed no output') }) t.test('npm hook rm', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t, { }) await hook.exec(['rm', '1']) t.match( hookArgs(), { id: '1', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs[0], ['- semver X https://google.com'], 'printed the correct output') }) t.test('npm hook rm - unicode output', async t => { const config = { unicode: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['rm', '1']) t.match( hookArgs(), { id: '1', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs[0], ['- semver ✘ https://google.com'], 'printed the correct output') }) t.test('npm hook rm - silent output', async t => { const config = { loglevel: 'silent' } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['rm', '1']) t.match( hookArgs(), { id: '1', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs, [], 'printed no output') }) t.test('npm hook rm - json output', async t => { const config = { json: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['rm', '1']) t.match( hookArgs(), { id: '1', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame( JSON.parse(outputs[0]), { id: 1, name: 'semver', type: 'package', endpoint: 'https://google.com', }, 'printed correct output' ) }) t.test('npm hook rm - parseable output', async t => { const config = { parseable: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['rm', '1']) t.match( hookArgs(), { id: '1', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame( outputs.map(line => line[0].split(/\t/)), [ ['id', 'name', 'type', 'endpoint'], ['1', 'semver', 'package', 'https://google.com'], ], 'printed correct output' ) }) t.test('npm hook update', async t => { const { npm, hook, outputs, hookArgs } = await mockHook(t, { }) await hook.exec(['update', '1', 'https://google.com', 'some-secret']) t.match( hookArgs(), { id: '1', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs[0], ['+ semver -> https://google.com'], 'printed the correct output') }) t.test('npm hook update - unicode', async t => { const config = { unicode: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['update', '1', 'https://google.com', 'some-secret']) t.match( hookArgs(), { id: '1', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs[0], ['+ semver ➜ https://google.com'], 'printed the correct output') }) t.test('npm hook update - json output', async t => { const config = { json: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['update', '1', 'https://google.com', 'some-secret']) t.match( hookArgs(), { id: '1', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame( JSON.parse(outputs[0]), { id: '1', name: 'semver', type: 'package', endpoint: 'https://google.com', }, 'printed the correct output' ) }) t.test('npm hook update - parseable output', async t => { const config = { parseable: true, } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['update', '1', 'https://google.com', 'some-secret']) t.match( hookArgs(), { id: '1', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame( outputs.map(line => line[0].split(/\t/)), [ ['id', 'name', 'type', 'endpoint'], ['1', 'semver', 'package', 'https://google.com'], ], 'printed the correct output' ) }) t.test('npm hook update - silent output', async t => { const config = { loglevel: 'silent' } const { npm, hook, outputs, hookArgs } = await mockHook(t, { config, }) await hook.exec(['update', '1', 'https://google.com', 'some-secret']) t.match( hookArgs(), { id: '1', uri: 'https://google.com', secret: 'some-secret', opts: npm.flatOptions, }, 'received the correct arguments' ) t.strictSame(outputs, [], 'printed no output') })