From 8d20f5bc1d5a5c2ea1d65dacd1c4cf2937a0d59a Mon Sep 17 00:00:00 2001 From: uzlopak Date: Sat, 24 Jun 2023 14:13:23 +0200 Subject: [PATCH 1/2] extract create-promise --- lib/create-promise.js | 29 +++++++++++++++++ plugin.js | 14 ++------- test/lib/create-promise.test.js | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 lib/create-promise.js create mode 100644 test/lib/create-promise.test.js diff --git a/lib/create-promise.js b/lib/create-promise.js new file mode 100644 index 0000000..a5ab68c --- /dev/null +++ b/lib/create-promise.js @@ -0,0 +1,29 @@ +'use strict' + +/** + * @typedef PromiseObject + * @property {Promise} promise + * @property {PromiseConstructor["resolve"]} resolve + * @property {PromiseConstructor["reject"]} reject + */ + +/** + * @returns {PromiseObject} + */ +function createPromise () { + /** + * @type {PromiseObject} + */ + const obj = {} + + obj.promise = new Promise((resolve, reject) => { + obj.resolve = resolve + obj.reject = reject + }) + + return obj +} + +module.exports = { + createPromise +} diff --git a/plugin.js b/plugin.js index da3380f..e2b4d47 100644 --- a/plugin.js +++ b/plugin.js @@ -4,6 +4,7 @@ const fastq = require('fastq') const EE = require('events').EventEmitter const inherits = require('util').inherits const { debug } = require('./lib/debug') +const { createPromise } = require('./lib/create-promise') const { AVV_ERR_READY_TIMEOUT } = require('./lib/errors') // this symbol is assigned by fastify-plugin @@ -28,17 +29,6 @@ function getName (func, optsOrFunc) { return func.toString().split('\n').slice(0, 2).map(s => s.trim()).join(' -- ') } -function promise () { - const obj = {} - - obj.promise = new Promise((resolve, reject) => { - obj.resolve = resolve - obj.reject = reject - }) - - return obj -} - function Plugin (parent, func, optsOrFunc, isAfter, timeout) { this.started = false this.func = func @@ -165,7 +155,7 @@ Plugin.prototype.loadedSoFar = function () { let res if (!this._promise) { - this._promise = promise() + this._promise = createPromise() res = this._promise.promise if (!this.server) { diff --git a/test/lib/create-promise.test.js b/test/lib/create-promise.test.js new file mode 100644 index 0000000..99ed5c6 --- /dev/null +++ b/test/lib/create-promise.test.js @@ -0,0 +1,55 @@ +'use strict' + +const { test } = require('tap') +const { createPromise } = require('../../lib/create-promise') + +test('createPromise() returns an object', (t) => { + t.plan(3) + t.type(createPromise(), 'object') + t.equal(Array.isArray(createPromise()), false) + t.notOk(Array.isArray(createPromise() !== null)) +}) + +test('createPromise() returns an attribute with attribute resolve', (t) => { + t.plan(1) + t.ok('resolve' in createPromise()) +}) + +test('createPromise() returns an attribute with attribute reject', (t) => { + t.plan(1) + t.ok('reject' in createPromise()) +}) + +test('createPromise() returns an attribute with attribute createPromise', (t) => { + t.plan(1) + t.ok('promise' in createPromise()) +}) + +test('when resolve is called, createPromise attribute is resolved', (t) => { + t.plan(1) + const p = createPromise() + + p.promise + .then(() => { + t.pass() + }) + .catch(() => { + t.fail() + }) + p.resolve() +}) + +test('when reject is called, createPromise attribute is rejected', (t) => { + t.plan(1) + const p = createPromise() + + p.promise + .then(() => { + t.fail() + }) + .catch(() => { + t.pass() + }) + + p.reject() +}) From ba70c3352a45e438a239374f2b45c7ab8a933a10 Mon Sep 17 00:00:00 2001 From: Uzlopak Date: Sun, 25 Jun 2023 11:01:53 +0200 Subject: [PATCH 2/2] Update lib/create-promise.js Co-authored-by: Matteo Collina --- lib/create-promise.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/create-promise.js b/lib/create-promise.js index a5ab68c..c32eb87 100644 --- a/lib/create-promise.js +++ b/lib/create-promise.js @@ -14,7 +14,11 @@ function createPromise () { /** * @type {PromiseObject} */ - const obj = {} + const obj = { + resolve: null, + reject: null, + promise: null + } obj.promise = new Promise((resolve, reject) => { obj.resolve = resolve