UNPKG

fastify-cli

Version:

Run a fastify route with one command!

154 lines (119 loc) 4.12 kB
'use strict' const proxyquire = require('proxyquire') const tap = require('tap') const sinon = require('sinon') const util = require('node:util') const exec = util.promisify(require('node:child_process').exec) const printRoutes = require('../print-routes') const test = tap.test const { NYC_PROCESS_ID, NODE_V8_COVERAGE } = process.env const SHOULD_SKIP = NYC_PROCESS_ID || NODE_V8_COVERAGE test('should print routes', async t => { t.plan(2) const spy = sinon.spy() const command = proxyquire('../print-routes', { './log': spy }) const fastify = await command.printRoutes(['./examples/plugin.js']) await fastify.close() t.ok(spy.called) t.same(spy.args, [['debug', '└── / (GET, HEAD, POST)\n']]) }) // This never exits in CI for some reason test('should print routes via cli', { skip: SHOULD_SKIP }, async t => { t.plan(1) const { stdout } = await exec('node cli.js print-routes ./examples/plugin.js', { encoding: 'utf-8', timeout: 10000 }) t.same( stdout, '└── / (GET, HEAD, POST)\n\n' ) }) test('should warn on file not found', t => { t.plan(1) const oldStop = printRoutes.stop t.teardown(() => { printRoutes.stop = oldStop }) printRoutes.stop = function (message) { t.ok(/not-found.js doesn't exist within/.test(message), message) } const argv = ['./data/not-found.js'] printRoutes.printRoutes(argv) }) test('should throw on package not found', t => { t.plan(1) const oldStop = printRoutes.stop t.teardown(() => { printRoutes.stop = oldStop }) printRoutes.stop = function (err) { t.ok(/Cannot find module 'unknown-package'/.test(err.message), err.message) } const argv = ['./test/data/package-not-found.js'] printRoutes.printRoutes(argv) }) test('should throw on parsing error', t => { t.plan(1) const oldStop = printRoutes.stop t.teardown(() => { printRoutes.stop = oldStop }) printRoutes.stop = function (err) { t.equal(err.constructor, SyntaxError) } const argv = ['./test/data/parsing-error.js'] printRoutes.printRoutes(argv) }) test('should exit without error on help', t => { const exit = process.exit process.exit = sinon.spy() t.teardown(() => { process.exit = exit }) const argv = ['-h', 'true'] printRoutes.printRoutes(argv) t.ok(process.exit.called) t.equal(process.exit.lastCall.args[0], undefined) t.end() }) test('should print routes of server with an async/await plugin', async t => { const nodeMajorVersion = process.versions.node.split('.').map(x => parseInt(x, 10))[0] if (nodeMajorVersion < 7) { t.pass('Skip because Node version < 7') return t.end() } t.plan(2) const spy = sinon.spy() const command = proxyquire('../print-routes', { './log': spy }) const argv = ['./examples/async-await-plugin.js'] const fastify = await command.printRoutes(argv) await fastify.close() t.ok(spy.called) t.same(spy.args, [['debug', '└── / (GET, HEAD)\n']]) }) test('should print uncimpressed routes with --common-refix flag', async t => { t.plan(2) const spy = sinon.spy() const command = proxyquire('../print-routes', { './log': spy }) await command.cli(['./examples/plugin-common-prefix.js', '--commonPrefix']) t.ok(spy.called) t.same(spy.args, [['debug', '└── /\n └── hel\n ├── lo-world (GET, HEAD)\n └── p (POST)\n']]) }) test('should print debug safe GET routes with --method GET flag', async t => { t.plan(2) const spy = sinon.spy() const command = proxyquire('../print-routes', { './log': spy }) await command.cli(['./examples/plugin.js', '--method', 'GET']) t.ok(spy.called) t.same(spy.args, [['debug', '└── / (GET)\n']]) }) test('should print routes with hooks with --include-hooks flag', async t => { t.plan(2) const spy = sinon.spy() const command = proxyquire('../print-routes', { './log': spy }) await command.cli(['./examples/plugin.js', '--include-hooks']) t.ok(spy.called) t.same(spy.args, [['debug', '└── / (GET, POST)\n / (HEAD)\n • (onSend) ["headRouteOnSendHandler()"]\n']]) })