1'use strict'; 2 3var errcode = require('../index'); 4var expect = require('expect.js'); 5 6describe('errcode', function () { 7 describe('string as first argument', function () { 8 it('should create an error object without code', function () { 9 var err = errcode('my message'); 10 11 expect(err).to.be.an(Error); 12 expect(err.hasOwnProperty(err.code)).to.be(false); 13 }); 14 15 it('should create an error object with code', function () { 16 var err = errcode('my message', 'ESOME'); 17 18 expect(err).to.be.an(Error); 19 expect(err.code).to.be('ESOME'); 20 }); 21 22 it('should create an error object with code and properties', function () { 23 var err = errcode('my message', 'ESOME', { foo: 'bar', bar: 'foo' }); 24 25 expect(err).to.be.an(Error); 26 expect(err.code).to.be('ESOME'); 27 expect(err.foo).to.be('bar'); 28 expect(err.bar).to.be('foo'); 29 }); 30 31 it('should create an error object without code but with properties', function () { 32 var err = errcode('my message', { foo: 'bar', bar: 'foo' }); 33 34 expect(err).to.be.an(Error); 35 expect(err.code).to.be(undefined); 36 expect(err.foo).to.be('bar'); 37 expect(err.bar).to.be('foo'); 38 }); 39 }); 40 41 describe('error as first argument', function () { 42 it('should accept an error and do nothing', function () { 43 var myErr = new Error('my message'); 44 var err = errcode(myErr); 45 46 expect(err).to.be(myErr); 47 expect(err.hasOwnProperty(err.code)).to.be(false); 48 }); 49 50 it('should accept an error and add a code', function () { 51 var myErr = new Error('my message'); 52 var err = errcode(myErr, 'ESOME'); 53 54 expect(err).to.be(myErr); 55 expect(err.code).to.be('ESOME'); 56 }); 57 58 it('should accept an error object and add code & properties', function () { 59 var myErr = new Error('my message'); 60 var err = errcode(myErr, 'ESOME', { foo: 'bar', bar: 'foo' }); 61 62 expect(err).to.be.an(Error); 63 expect(err.code).to.be('ESOME'); 64 expect(err.foo).to.be('bar'); 65 expect(err.bar).to.be('foo'); 66 }); 67 68 it('should create an error object without code but with properties', function () { 69 var myErr = new Error('my message'); 70 var err = errcode(myErr, { foo: 'bar', bar: 'foo' }); 71 72 expect(err).to.be.an(Error); 73 expect(err.code).to.be(undefined); 74 expect(err.foo).to.be('bar'); 75 expect(err.bar).to.be('foo'); 76 }); 77 }); 78 79 it('should allow passing null & undefined in the first argument', function () { 80 var err; 81 82 err = errcode(null, 'ESOME'); 83 expect(err).to.be.an(Error); 84 expect(err.message).to.be('null'); 85 expect(err.code).to.be('ESOME'); 86 87 err = errcode(undefined, 'ESOME'); 88 expect(err).to.be.an(Error); 89 expect(err.message).to.be(''); 90 expect(err.code).to.be('ESOME'); 91 }); 92}); 93