learning_ai_notes/backend/node_modules/avvio/test/lib/thenify.test.js

141 lines
3.5 KiB
JavaScript

'use strict'
const { test } = require('node:test')
const { kThenifyDoNotWrap } = require('../../lib/symbols')
const libDebug = require('../../lib/debug')
test('thenify', async (t) => {
t.plan(7)
const mockDebug = (t, debugImpl) => {
const originalDebug = libDebug.debug.bind(libDebug)
t.before((ctx) => {
libDebug.debug = debugImpl
delete require.cache[require.resolve('../../lib/thenify')]
})
t.after((ctx) => {
libDebug.debug = originalDebug
})
}
await t.test('return undefined if booted', (t) => {
t.plan(2)
mockDebug(t, (message) => {
t.assert.strictEqual(message, 'thenify returning undefined because we are already booted')
})
const { thenify } = require('../../lib/thenify')
const result = thenify.call({
booted: true
})
t.assert.strictEqual(result, undefined)
})
await t.test('return undefined if kThenifyDoNotWrap is true', (t) => {
t.plan(1)
const { thenify } = require('../../lib/thenify')
const result = thenify.call({
[kThenifyDoNotWrap]: true
})
t.assert.strictEqual(result, undefined)
})
await t.test('return PromiseConstructorLike if kThenifyDoNotWrap is false', (t) => {
t.plan(3)
mockDebug(t, (message) => {
t.assert.strictEqual(message, 'thenify')
})
const { thenify } = require('../../lib/thenify')
const promiseContructorLike = thenify.call({
[kThenifyDoNotWrap]: false
})
t.assert.strictEqual(typeof promiseContructorLike, 'function')
t.assert.strictEqual(promiseContructorLike.length, 2)
})
await t.test('return PromiseConstructorLike', (t) => {
t.plan(3)
mockDebug(t, (message) => {
t.assert.strictEqual(message, 'thenify')
})
const { thenify } = require('../../lib/thenify')
const promiseContructorLike = thenify.call({})
t.assert.strictEqual(typeof promiseContructorLike, 'function')
t.assert.strictEqual(promiseContructorLike.length, 2)
})
await t.test('resolve should return _server', async (t) => {
t.plan(1)
const { thenify } = require('../../lib/thenify')
const server = {
_loadRegistered: () => {
return Promise.resolve()
},
_server: 'server'
}
const promiseContructorLike = thenify.call(server)
promiseContructorLike(function (value) {
t.assert.strictEqual(value, 'server')
}, function (reason) {
t.assert.ifError(reason)
})
})
await t.test('resolving should set kThenifyDoNotWrap to true', async (t) => {
t.plan(1)
const { thenify } = require('../../lib/thenify')
const server = {
_loadRegistered: () => {
return Promise.resolve()
},
[kThenifyDoNotWrap]: false,
_server: 'server'
}
const promiseContructorLike = thenify.call(server)
promiseContructorLike(function (value) {
t.assert.strictEqual(server[kThenifyDoNotWrap], true)
}, function (reason) {
t.assert.ifError(reason)
})
})
await t.test('rejection should pass through to reject', async (t) => {
t.plan(1)
const { thenify } = require('../../lib/thenify')
const server = {
_loadRegistered: () => {
return Promise.reject(new Error('Arbitrary rejection'))
},
_server: 'server'
}
const promiseContructorLike = thenify.call(server)
promiseContructorLike(function (value) {
t.assert.ifError(value)
}, function (reason) {
t.assert.strictEqual(reason.message, 'Arbitrary rejection')
})
})
})