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.
125 lines
3.0 KiB
125 lines
3.0 KiB
'use strict' |
|
|
|
const assert = require('chai').assert |
|
const proxyquire = require('proxyquire') |
|
const spooks = require('spooks') |
|
const Promise = require('bluebird') |
|
|
|
const modulePath = '../../src/unpipe' |
|
|
|
suite('unpipe:', () => { |
|
test('require does not throw', () => { |
|
assert.doesNotThrow(() => { |
|
require(modulePath) |
|
}) |
|
}) |
|
|
|
test('require returns function', () => { |
|
assert.isFunction(require(modulePath)) |
|
}) |
|
|
|
suite('require:', () => { |
|
let log, results, unpipe |
|
|
|
setup(() => { |
|
log = {} |
|
results = { |
|
parse: [ Promise.resolve() ] |
|
} |
|
unpipe = proxyquire(modulePath, { |
|
'./parse': spooks.fn({ |
|
name: 'parse', |
|
log: log, |
|
results: results.parse |
|
}) |
|
}) |
|
}) |
|
|
|
test('unpipe expects two arguments', () => { |
|
assert.lengthOf(unpipe, 2) |
|
}) |
|
|
|
test('unpipe does not throw', () => { |
|
assert.doesNotThrow(() => { |
|
unpipe(() => {}) |
|
}) |
|
}) |
|
|
|
test('unpipe throws if callback is not provided', () => { |
|
assert.throws(() => { |
|
unpipe() |
|
}) |
|
}) |
|
|
|
test('parse was not called', () => { |
|
assert.strictEqual(log.counts.parse, 0) |
|
}) |
|
|
|
suite('unpipe success:', () => { |
|
let result, error, options |
|
|
|
setup(done => { |
|
results.parse[0] = Promise.resolve('foo') |
|
options = { foo: 'bar', ndjson: true } |
|
unpipe((err, res) => { |
|
error = err |
|
result = res |
|
done() |
|
}, options) |
|
}) |
|
|
|
test('parse was called once', () => { |
|
assert.strictEqual(log.counts.parse, 1) |
|
}) |
|
|
|
test('parse was called correctly', () => { |
|
assert.isUndefined(log.these.parse[0]) |
|
assert.lengthOf(log.args.parse[0], 2) |
|
assert.isObject(log.args.parse[0][0]) |
|
assert.isTrue(log.args.parse[0][0].readable) |
|
assert.isTrue(log.args.parse[0][0].writable) |
|
assert.isFunction(log.args.parse[0][0].pipe) |
|
assert.isFunction(log.args.parse[0][0].read) |
|
assert.isFunction(log.args.parse[0][0]._read) |
|
assert.isFunction(log.args.parse[0][0].write) |
|
assert.isFunction(log.args.parse[0][0]._write) |
|
assert.notStrictEqual(log.args.parse[0][1], options) |
|
assert.deepEqual(log.args.parse[0][1], { foo: 'bar', ndjson: false }) |
|
}) |
|
|
|
test('parse result was returned', () => { |
|
assert.strictEqual(result, 'foo') |
|
}) |
|
|
|
test('did not fail', () => { |
|
assert.isNull(error) |
|
}) |
|
}) |
|
|
|
suite('unpipe error:', () => { |
|
let result, error, options |
|
|
|
setup(done => { |
|
results.parse[0] = Promise.reject('bar') |
|
options = {} |
|
unpipe((err, res) => { |
|
error = err |
|
result = res |
|
done() |
|
}, options) |
|
}) |
|
|
|
test('parse was called once', () => { |
|
assert.strictEqual(log.counts.parse, 1) |
|
}) |
|
|
|
test('parse result was not returned', () => { |
|
assert.isUndefined(result) |
|
}) |
|
|
|
test('failed', () => { |
|
assert.strictEqual(error, 'bar') |
|
}) |
|
}) |
|
}) |
|
})
|
|
|