| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- const { expect } = require('chai')
- const {
- promisifyAll,
- callbackifyMultiResult
- } = require('../../../../app/src/util/promises')
- describe('promisifyAll', function() {
- describe('basic functionality', function() {
- before(function() {
- this.module = {
- SOME_CONSTANT: 1,
- asyncAdd(a, b, callback) {
- callback(null, a + b)
- },
- asyncDouble(x, callback) {
- this.asyncAdd(x, x, callback)
- }
- }
- this.promisified = promisifyAll(this.module)
- })
- it('promisifies functions in the module', async function() {
- const sum = await this.promisified.asyncAdd(29, 33)
- expect(sum).to.equal(62)
- })
- it('binds this to the original module', async function() {
- const sum = await this.promisified.asyncDouble(38)
- expect(sum).to.equal(76)
- })
- it('does not copy over non-functions', async function() {
- expect(this.promisified).not.to.have.property('SOME_CONSTANT')
- })
- it('does not modify the prototype of the module', async function() {
- expect(this.promisified.toString()).to.equal('[object Object]')
- })
- })
- describe('without option', function() {
- before(function() {
- this.module = {
- asyncAdd(a, b, callback) {
- callback(null, a + b)
- },
- syncAdd(a, b) {
- return a + b
- }
- }
- this.promisified = promisifyAll(this.module, { without: 'syncAdd' })
- })
- it('does not promisify excluded functions', function() {
- expect(this.promisified.syncAdd).not.to.exist
- })
- it('promisifies other functions', async function() {
- const sum = await this.promisified.asyncAdd(12, 89)
- expect(sum).to.equal(101)
- })
- })
- describe('multiResult option', function() {
- before(function() {
- this.module = {
- asyncAdd(a, b, callback) {
- callback(null, a + b)
- },
- asyncArithmetic(a, b, callback) {
- callback(null, a + b, a * b)
- }
- }
- this.promisified = promisifyAll(this.module, {
- multiResult: { asyncArithmetic: ['sum', 'product'] }
- })
- })
- it('promisifies multi-result functions', async function() {
- const result = await this.promisified.asyncArithmetic(3, 6)
- expect(result).to.deep.equal({ sum: 9, product: 18 })
- })
- it('promisifies other functions normally', async function() {
- const sum = await this.promisified.asyncAdd(6, 1)
- expect(sum).to.equal(7)
- })
- })
- })
- describe('callbackifyMultiResult', function() {
- it('callbackifies a multi-result function', function(done) {
- async function asyncArithmetic(a, b) {
- return { sum: a + b, product: a * b }
- }
- const callbackified = callbackifyMultiResult(asyncArithmetic, [
- 'sum',
- 'product'
- ])
- callbackified(3, 11, (err, sum, product) => {
- if (err != null) {
- return done(err)
- }
- expect(sum).to.equal(14)
- expect(product).to.equal(33)
- done()
- })
- })
- it('propagates errors', function(done) {
- async function asyncBomb() {
- throw new Error('BOOM!')
- }
- const callbackified = callbackifyMultiResult(asyncBomb, [
- 'explosives',
- 'dynamite'
- ])
- callbackified(err => {
- expect(err).to.exist
- done()
- })
- })
- })
|