source: frontend/node_modules/bfj/test/unit/write.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 6.8 KB
Line 
1'use strict'
2
3const assert = require('chai').assert
4const proxyquire = require('proxyquire')
5const spooks = require('spooks')
6const Promise = require('bluebird')
7
8const modulePath = '../../src/write'
9
10suite('write:', () => {
11 test('require does not throw', () => {
12 assert.doesNotThrow(() => {
13 require(modulePath)
14 })
15 })
16
17 test('require returns function', () => {
18 assert.isFunction(require(modulePath))
19 })
20
21 suite('require:', () => {
22 let log, results, write
23
24 setup(() => {
25 log = {}
26 results = {
27 createWriteStream: [ {} ]
28 }
29
30 write = proxyquire(modulePath, {
31 'fs': {
32 createWriteStream: spooks.fn({
33 name: 'createWriteStream',
34 log: log,
35 results: results.createWriteStream
36 })
37 },
38 './streamify': spooks.fn({
39 name: 'streamify',
40 log: log,
41 results: [
42 {
43 pipe: spooks.fn({ name: 'pipe', log: log, chain: true }),
44 on: spooks.fn({ name: 'on', log: log, chain: true })
45 }
46 ]
47 })
48 })
49 })
50
51 test('write expects three arguments', () => {
52 assert.lengthOf(write, 3)
53 })
54
55 test('write does not throw', () => {
56 assert.doesNotThrow(() => {
57 write()
58 })
59 })
60
61 test('streamify was not called', () => {
62 assert.strictEqual(log.counts.streamify, 0)
63 })
64
65 test('fs.createWriteStream was not called', () => {
66 assert.strictEqual(log.counts.createWriteStream, 0)
67 })
68
69 test('stream.pipe was not called', () => {
70 assert.strictEqual(log.counts.pipe, 0)
71 })
72
73 test('stream.on was not called', () => {
74 assert.strictEqual(log.counts.on, 0)
75 })
76
77 suite('write:', () => {
78 let path, data, options, result
79
80 setup(() => {
81 path = {}
82 data = {}
83 options = {}
84 result = write(path, data, options)
85 })
86
87 test('streamify was called once', () => {
88 assert.strictEqual(log.counts.streamify, 1)
89 assert.isUndefined(log.these.streamify[0])
90 })
91
92 test('streamify was called correctly', () => {
93 assert.lengthOf(log.args.streamify[0], 2)
94 assert.strictEqual(log.args.streamify[0][0], data)
95 assert.lengthOf(Object.keys(log.args.streamify[0][0]), 0)
96 assert.strictEqual(log.args.streamify[0][1], options)
97 assert.lengthOf(Object.keys(log.args.streamify[0][1]), 0)
98 })
99
100 test('fs.createWriteStream was called once', () => {
101 assert.strictEqual(log.counts.createWriteStream, 1)
102 })
103
104 test('fs.createWriteStream was called correctly', () => {
105 assert.lengthOf(log.args.createWriteStream[0], 2)
106 assert.strictEqual(log.args.createWriteStream[0][0], path)
107 assert.lengthOf(Object.keys(log.args.createWriteStream[0][0]), 0)
108 assert.strictEqual(log.args.createWriteStream[0][1], options)
109 assert.lengthOf(Object.keys(log.args.createWriteStream[0][1]), 0)
110 })
111
112 test('stream.pipe was called once', () => {
113 assert.strictEqual(log.counts.pipe, 1)
114 })
115
116 test('stream.pipe was called correctly', () => {
117 assert.lengthOf(log.args.pipe[0], 1)
118 assert.strictEqual(log.args.pipe[0][0], results.createWriteStream[0])
119 assert.lengthOf(Object.keys(log.args.pipe[0][0]), 0)
120 })
121
122 test('stream.on was called three times', () => {
123 assert.strictEqual(log.counts.on, 3)
124 })
125
126 test('stream.on was called correctly first time', () => {
127 assert.lengthOf(log.args.on[0], 2)
128 assert.strictEqual(log.args.on[0][0], 'finish')
129 assert.isFunction(log.args.on[0][1])
130 })
131
132 test('stream.on was called correctly second time', () => {
133 assert.lengthOf(log.args.on[1], 2)
134 assert.strictEqual(log.args.on[1][0], 'error')
135 assert.isFunction(log.args.on[1][1])
136 assert.notStrictEqual(log.args.on[1][1], log.args.on[0][1])
137 })
138
139 test('stream.on was called correctly third time', () => {
140 assert.lengthOf(log.args.on[2], 2)
141 assert.strictEqual(log.args.on[2][0], 'dataError')
142 assert.isFunction(log.args.on[2][1])
143 assert.notStrictEqual(log.args.on[2][1], log.args.on[0][1])
144 assert.strictEqual(log.args.on[2][1], log.args.on[1][1])
145 })
146
147 test('promise was returned', () => {
148 assert.instanceOf(result, Promise)
149 })
150
151 suite('dispatch finish event:', () => {
152 let resolved, error, passed, failed
153
154 setup(done => {
155 passed = failed = false
156
157 result.then(res => {
158 resolved = res
159 passed = true
160 done()
161 }).catch(err => {
162 error = err
163 failed = true
164 done()
165 })
166 log.args.on[0][1]('foo')
167 })
168
169 test('promise was resolved', () => {
170 assert.isTrue(passed)
171 assert.isFalse(failed)
172 assert.isUndefined(resolved)
173 })
174 })
175
176 suite('dispatch error event:', () => {
177 let resolved, error, passed, failed
178
179 setup(done => {
180 passed = failed = false
181
182 result.then(r => {
183 resolved = r
184 passed = true
185 done()
186 }).catch(e => {
187 error = e
188 failed = true
189 done()
190 })
191 log.args.on[1][1]('foo')
192 })
193
194 test('promise was rejected', () => {
195 assert.isTrue(failed)
196 assert.isFalse(passed)
197 assert.strictEqual(error, 'foo')
198 })
199 })
200
201 suite('dispatch dataError event:', () => {
202 let resolved, error, passed, failed
203
204 setup(done => {
205 passed = failed = false
206
207 result.then(r => {
208 resolved = r
209 passed = true
210 done()
211 }).catch(e => {
212 error = e
213 failed = true
214 done()
215 })
216 log.args.on[2][1]('wibble')
217 })
218
219 test('promise was rejected', () => {
220 assert.isTrue(failed)
221 assert.isFalse(passed)
222 assert.strictEqual(error, 'wibble')
223 })
224 })
225 })
226 })
227})
228
229suite('write with error thrown by fs.createWriteStream:', () => {
230 let write
231
232 setup(() => {
233 write = proxyquire(modulePath, {
234 fs: {
235 createWriteStream () {
236 throw new Error('foo')
237 }
238 },
239 './streamify': () => ({
240 pipe: spooks.fn({ name: 'pipe', log: {}, chain: true }),
241 on: spooks.fn({ name: 'on', log: {}, chain: true })
242 })
243 })
244 })
245
246 test('write does not throw', () => {
247 assert.doesNotThrow(() => {
248 write().catch(() => {})
249 })
250 })
251
252 test('write rejects', () => {
253 write()
254 .then(() => assert.fail('write should reject'))
255 .catch(error => {
256 assert.instanceOf(error, Error)
257 assert.equal(error.message, 'foo')
258 })
259 })
260})
Note: See TracBrowser for help on using the repository browser.