'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') }) }) }) })