-
Notifications
You must be signed in to change notification settings - Fork 2
/
test.js
152 lines (120 loc) · 5.48 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import { expect } from 'chai'
import chalk from 'chalk'
import herokuLog, { format, log, parse, info, debug, error, warn, trace, fatal, mergeStringsAndArrays, addDoubleQuotesIfStringHasWhitespaces } from './index'
describe('heroku-log', () => {
beforeEach(() => {
process.env.NODE_ENV = undefined
})
it('sub imports are working', () => {
console.info = () => {}
console.error = () => {}
console.warn = () => {}
console.trace = () => {}
expect(() => {
info('This is', { some: 'important', message: 'yep' }, { foo: 'bar' })
debug('If this happens you should take a look...')
error('oh my gosh, there is a error')
warn('oh wait.. what is this?')
trace('trace the f out of it')
fatal('honestly? fatal doesnt sound like something i want to see.. :S')
}).to.not.throw()
})
describe('format', () => {
it('returns a string', () => {
expect(format()).to.be.a('string')
})
it('returns a string with heroku like format of passed object', () => {
expect(format({ hello: 'world' })).to.equal(chalk.grey('hello=world'))
})
it('returns a multiple props in a object in heroku like format', () => {
expect(format({ hello: 'world', foo: 'bar' })).to.equal(`${chalk.grey('hello=world')} ${chalk.grey('foo=bar')}`)
})
})
describe('parse', () => {
it('returns a object', () => {
expect(parse()).to.be.a('object')
})
it('returns the prop of the passed heroku-like format in an object', () => {
expect(parse('hello=world')).to.deep.equal({ hello: 'world' })
})
it('returns the prop of a object with multiple props of the passed heroku-like format in an object', () => {
expect(parse('hello=world foo=bar mambo=nr.5')).to.deep.equal({ hello: 'world', foo: 'bar', mambo: 'nr.5' })
})
it('returns the prop with double-quotes of a object with multiple props of the passed heroku-like format in an object', () => {
expect(parse('foo="hello world"')).to.deep.equal({ foo: 'hello world' })
})
})
describe('log', () => {
describe('production enviroment', () => {
beforeEach(() => {
process.env.NODE_ENV = 'production'
})
it('returns a string', () => {
expect(log()).to.be.a('string')
})
it('returns a single string as message', () => {
expect(log('hello world')).to.equal('message="hello world"')
})
it('returns a array comma-seperated as message', () => {
expect(log([ 'mozart', 'beethoven' ])).to.equal('message="mozart, beethoven"')
})
it('returns a passed object splitted by props with the format function', () => {
expect(log({ hello: 'world' })).to.equal('hello=world')
})
it('returns a deep object with a similary syntax but a : instead of =', () => {
expect(log({ hello: 'world', foo: { bar: 'baz' } })).to.equal('hello=world foo=[bar:baz]')
})
it('returns a Error in a error', () => {
expect(log(new Error('This is an error'))).to.equal('error=This is an error')
})
it('returns a combination of string and object', () => {
expect(log('foo', { hello: 'world' })).to.equal('message=foo hello=world')
})
it('returns a combination of string and multie object', () => {
expect(log('foo', { hello: 'world', foo: { hello: 'world' } })).to.equal('message=foo hello=world foo=[hello:world]')
})
it('returns a combination of string and array', () => {
expect(log('foo', ['bar'], { hey: 'you!' })).to.equal('message="foo, bar" hey=you!')
})
})
describe('non-production enviroment', () => {
it('returns a string, starting with the timestamp', () => {
const hh = new Date().getHours()
const mm = new Date().getMinutes()
const ss = new Date().getSeconds()
expect(log('some message')).to.equal(`${chalk.gray(`[${hh}:${mm}:${ss}]`)} message="some message"`)
})
})
})
describe('mergeStringsAndArrays', () => {
it('returns an array', () => {
expect(mergeStringsAndArrays()).to.be.a('array')
})
it('returns a passed array and return it in the response', () => {
expect(mergeStringsAndArrays(['foo'])).to.deep.equal([['foo']])
})
it('returns a passed string and return it in the response as array', () => {
expect(mergeStringsAndArrays('hello world')).to.deep.equal([['hello world']])
})
it('returns multple passed strings and return them in the response as array', () => {
expect(mergeStringsAndArrays('hello world', 'foobar')).to.deep.equal([['hello world', 'foobar']])
})
it('returns a mix of passed props and return them in the response as array', () => {
expect(mergeStringsAndArrays('foo', 'baz', ['hello world', 'foobar'])).to.deep.equal([['foo', 'baz', 'hello world', 'foobar']])
})
it('returns a mix of passed props and return them in the response as array', () => {
expect(mergeStringsAndArrays([ 'foo', [ 'bar' ], { hey: 'you!' } ])).to.deep.equal([['foo', 'bar'], { hey: 'you!' }])
})
})
describe('addDoubleQuotesIfStringHasWhitespaces', () => {
it('returns a string', () => {
expect(addDoubleQuotesIfStringHasWhitespaces()).to.be.a('string')
})
it('returns a single word without double-quotes', () => {
expect(addDoubleQuotesIfStringHasWhitespaces('hello')).to.equal('hello')
})
it('returns multple passed words with double-quotes', () => {
expect(addDoubleQuotesIfStringHasWhitespaces('hello world')).to.equal('"hello world"')
})
})
})