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.
		
		
		
		
		
			
		
			
				
					123 lines
				
				3.2 KiB
			
		
		
			
		
	
	
					123 lines
				
				3.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const test = require('ava')
							 | 
						||
| 
								 | 
							
								const build = require('./')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								process.removeAllListeners('warning')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Create warning with zero parameter', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  const buildWarnOpts = create('FastifyWarning', 'CODE', 'Not available')
							 | 
						||
| 
								 | 
							
								  const opts = buildWarnOpts()
							 | 
						||
| 
								 | 
							
								  t.is(opts.name, 'FastifyWarning')
							 | 
						||
| 
								 | 
							
								  t.is(opts.message, 'Not available')
							 | 
						||
| 
								 | 
							
								  t.is(opts.code, 'CODE')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Create error with 1 parameter', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  const buildWarningOpts = create('FastifyWarning', 'CODE', 'hey %s')
							 | 
						||
| 
								 | 
							
								  const opts = buildWarningOpts('alice')
							 | 
						||
| 
								 | 
							
								  t.is(opts.name, 'FastifyWarning')
							 | 
						||
| 
								 | 
							
								  t.is(opts.message, 'hey alice')
							 | 
						||
| 
								 | 
							
								  t.is(opts.code, 'CODE')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Create error with 2 parameters', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  const buildWarnOpts = create('FastifyWarning', 'CODE', 'hey %s, I like your %s')
							 | 
						||
| 
								 | 
							
								  const opts = buildWarnOpts('alice', 'attitude')
							 | 
						||
| 
								 | 
							
								  t.is(opts.name, 'FastifyWarning')
							 | 
						||
| 
								 | 
							
								  t.is(opts.message, 'hey alice, I like your attitude')
							 | 
						||
| 
								 | 
							
								  t.is(opts.code, 'CODE')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Create error with 3 parameters', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  const buildWarnOpts = create('FastifyWarning', 'CODE', 'hey %s, I like your %s %s')
							 | 
						||
| 
								 | 
							
								  const opts = buildWarnOpts('alice', 'attitude', 'see you')
							 | 
						||
| 
								 | 
							
								  t.is(opts.name, 'FastifyWarning')
							 | 
						||
| 
								 | 
							
								  t.is(opts.message, 'hey alice, I like your attitude see you')
							 | 
						||
| 
								 | 
							
								  t.is(opts.code, 'CODE')
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Should throw when error code has no fastify name', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    create()
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.is(err.message, 'Warning name must not be empty')
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Should throw when error has no code', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    create('name')
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.is(err.message, 'Warning code must not be empty')
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Should throw when error has no message', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    create('name', 'code')
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.is(err.message, 'Warning message must not be empty')
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test.serial.cb('emit should emit a given code only once', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								  const { create, emit, emitted } = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  process.on('warning', onWarning)
							 | 
						||
| 
								 | 
							
								  function onWarning (warning) {
							 | 
						||
| 
								 | 
							
								    t.is(warning.name, 'FastifyDeprecation')
							 | 
						||
| 
								 | 
							
								    t.is(warning.code, 'CODE')
							 | 
						||
| 
								 | 
							
								    t.is(warning.message, 'Hello world')
							 | 
						||
| 
								 | 
							
								    t.true(emitted.get('CODE'))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  create('FastifyDeprecation', 'CODE', 'Hello world')
							 | 
						||
| 
								 | 
							
								  emit('CODE')
							 | 
						||
| 
								 | 
							
								  emit('CODE')
							 | 
						||
| 
								 | 
							
								  setImmediate(() => {
							 | 
						||
| 
								 | 
							
								    process.removeListener('warning', onWarning)
							 | 
						||
| 
								 | 
							
								    t.end()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test.serial.cb('emit with interpolated string', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								  const { create, emit, emitted } = build()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  process.on('warning', onWarning)
							 | 
						||
| 
								 | 
							
								  function onWarning (warning) {
							 | 
						||
| 
								 | 
							
								    t.is(warning.name, 'FastifyDeprecation')
							 | 
						||
| 
								 | 
							
								    t.is(warning.code, 'CODE')
							 | 
						||
| 
								 | 
							
								    t.is(warning.message, 'Hello world')
							 | 
						||
| 
								 | 
							
								    t.true(emitted.get('CODE'))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  create('FastifyDeprecation', 'CODE', 'Hello %s')
							 | 
						||
| 
								 | 
							
								  emit('CODE', 'world')
							 | 
						||
| 
								 | 
							
								  emit('CODE', 'world')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  setImmediate(() => {
							 | 
						||
| 
								 | 
							
								    process.removeListener('warning', onWarning)
							 | 
						||
| 
								 | 
							
								    t.end()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('Cannot reuse the same code more than once', t => {
							 | 
						||
| 
								 | 
							
								  const { create } = build()
							 | 
						||
| 
								 | 
							
								  create('FastifyWarning', 'CODE', 'Not available')
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    create('FastifyWarning', 'CODE', 'Not available')
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    t.is(err.message, "The code 'CODE' already exist")
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 |