liusuyi
2023-04-24 4737f1e038743ced243c9e52423404d9034d6107
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
'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')
      })
    })
  })
})