| 1 | 'use strict'
|
|---|
| 2 |
|
|---|
| 3 | const assert = require('chai').assert
|
|---|
| 4 | const proxyquire = require('proxyquire')
|
|---|
| 5 | const spooks = require('spooks')
|
|---|
| 6 | const Promise = require('bluebird')
|
|---|
| 7 |
|
|---|
| 8 | const modulePath = '../../src/write'
|
|---|
| 9 |
|
|---|
| 10 | suite('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 |
|
|---|
| 229 | suite('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 | })
|
|---|