diff --git a/bin/docker/run-tests.sh b/bin/docker/run-tests.sh index aab038d..4b2039b 100755 --- a/bin/docker/run-tests.sh +++ b/bin/docker/run-tests.sh @@ -11,4 +11,4 @@ npm run -s test:integration # Create coverage report and store in artifacts echo "Running coverage. Report stored in coverage.lcov" -exec npm run -s coverage -- --reporter=text-lcov > artifacts/coverage.lcov +npm run -s coverage -- --reporter=text-lcov > artifacts/coverage.lcov diff --git a/mini.vim b/mini.vim new file mode 100644 index 0000000..c87421e --- /dev/null +++ b/mini.vim @@ -0,0 +1,9 @@ + set nocompatible + set runtimepath^=~/.config/nvim/plugged/coc.nvim + filetype plugin indent on + syntax on + set hidden + + " Highlight symbol under cursor on CursorHold + autocmd CursorHold * silent :call CocActionAsync('doHover') + set updatetime=300 diff --git a/package-lock.json b/package-lock.json index 223c43f..dff03e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "NodeJS-Examole-RESTAPI", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1827,10 +1827,21 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + } + } }, "eslint-visitor-keys": { "version": "1.0.0", @@ -3021,9 +3032,9 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.5.tgz", + "integrity": "sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -3141,13 +3152,24 @@ "integrity": "sha512-vR1YTaDyi2BukI0UiH01xy92oiZi4in7r0dmSPnrZg72Vu1SzyOLalwWP5NUk1rNiB2L+XVK2lcSVOqaertX8A==" }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.3.tgz", + "integrity": "sha512-Ytgnz23gm2DVftnzqRRz2dOXZbGd2uiajSw/95bPp6v53zPRspQjLm/AfBgqbJ2qfeRXWIOMVLpp86+/5yX39Q==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } } }, "iconv-lite": { @@ -4801,9 +4823,9 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.5.tgz", + "integrity": "sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -6459,25 +6481,25 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.10.1.tgz", - "integrity": "sha512-wE7jOUABVD9Kr8pAchRqk5quHoqE3tUHfKJ/WdLyZjHx4oMK5YWv1MEiny9DmiOlXOf1JNXwbPL9imSvzFq7aw==", + "version": "5.21.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.1.tgz", + "integrity": "sha512-JI+53MwcClfCFUPJT/l2dDzSpEzWAueyCZus33L/yhJxKTisfdd9OHrUPQ6/dI5nR5eIYT/EafrjkqTAlEQS2w==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", "debug": "^4.1.1", "dottie": "^2.0.0", "inflection": "1.12.0", - "lodash": "^4.17.11", + "lodash": "^4.17.15", "moment": "^2.24.0", "moment-timezone": "^0.5.21", - "retry-as-promised": "^3.1.0", - "semver": "^6.1.1", + "retry-as-promised": "^3.2.0", + "semver": "^6.3.0", "sequelize-pool": "^2.3.0", "toposort-class": "^1.0.1", - "uuid": "^3.2.1", + "uuid": "^3.3.3", "validator": "^10.11.0", - "wkx": "^0.4.6" + "wkx": "^0.4.8" }, "dependencies": { "debug": { @@ -6488,10 +6510,20 @@ "ms": "^2.1.1" } }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" } } }, @@ -7383,7 +7415,8 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true }, "v8-compile-cache": { "version": "2.0.2", @@ -7488,9 +7521,9 @@ } }, "wkx": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.7.tgz", - "integrity": "sha512-pHf546L96TK8RradLt1cWaIffstgv/zXZ14CGz5KnBs1AxBX0wm+IDphjJw0qrEqRv8P9W9CdTt8Z1unMRZ19A==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", "requires": { "@types/node": "*" } diff --git a/package.json b/package.json index 14c4940..5c98f80 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "koa-static": "^5.0.0", "koa2-swagger-ui": "^2.13.2", "mysql2": "^1.6.5", - "sequelize": "^5.10.1", + "sequelize": "^5.21.1", "sequelize-cli": "^5.5.0", "winston": "^3.2.1" }, diff --git a/src/dao-factory.js b/src/dao-factory.js index 490632e..6e290a8 100644 --- a/src/dao-factory.js +++ b/src/dao-factory.js @@ -1,5 +1,4 @@ 'use strict'; -const Promise = require('bluebird'); const Message = require('./dao/message'); /** @@ -9,6 +8,9 @@ const Message = require('./dao/message'); * Stores and the Buiness Objects ensuring that the * Business layer is separated completely from the * Persistence layer + * + * @class DaoFac + * @property {Store} store - Data Store object */ module.exports = class DaoFac { @@ -21,19 +23,15 @@ module.exports = class DaoFac { * * Provides an easy lookup for DAO's in Business Objects * - * @args {string} daoNam - Name of dao - * @returns {Promise} - Promise that resolves to the DAO instance (or errors) + * @param {string} daoName - Name of dao + * @returns {DAO} - The DAO instance (or errors) */ daoFor(daoName) { - return new Promise((resolve, reject) => { - switch (daoName) { - case 'message': - return resolve(new Message(this.store)); - break; - default: - return reject(new Error(`No DAO for ${daoName}`)); - break; - } - }); + switch (daoName) { + case 'message': + return new Message(this.store); + default: + throw new Error(`No DAO for ${daoName}`); + } } }; diff --git a/src/dao/message.js b/src/dao/message.js index 77e40ae..942bfaa 100644 --- a/src/dao/message.js +++ b/src/dao/message.js @@ -1,11 +1,10 @@ 'use strict'; -const Promise = require('bluebird'); /** * Data Access layer object for the Message data * - * @constructor - * @args {Object} store - Instance of the store object + * @class + * @param {Store} store - Instance of the store object */ module.exports = class MessageDao { constructor(store) { @@ -19,13 +18,13 @@ module.exports = class MessageDao { /** * Returns a single message from storage as identified by its primary key * - * @args {Object} deps.timings - Instance of a Koa Server Timings object (option) - * @args {integer} id - Id of the message to retrieve + * @param {Object} deps + * @param {KoaServerTimings} deps.timings - Instance of a Koa Server Timings object (option) + * @param {number} id - Id of the message to retrieve * * @returns Promise message */ - find(deps, id) { - deps = deps || {}; + find(deps = {}, id) { if (deps.timings) { deps.timings.startSpan('messageDao:find'); } @@ -55,13 +54,13 @@ module.exports = class MessageDao { /** * Deletes a single message from storage as identified by its primary key * - * @args {Object} deps.timings - Instance of a Koa Server Timings object (option) - * @args {integer} id - Id of the message to retrieve + * @param {Object} deps + * @param {Object} deps.timings - Instance of a Koa Server Timings object (option) + * @param {number} id - Id of the message to retrieve * * @returns Promise message */ - delete(deps, id) { - deps = deps || {}; + delete(deps = {}, id) { if (deps.timings) { deps.timings.startSpan('messageDao:delete'); } @@ -91,15 +90,15 @@ module.exports = class MessageDao { /** * Update a message in storage * - * @args {Object} deps.timings - Instance of a Koa Server Timings object (option) - * @args {integer} id - id of the message to update - * @args (string) args.text - Text data of the message - * @args (string) args.owner - onder identifier in remote system - * @args (string) args.updatedBy - Remote System identifier (required) + * @param {Object} deps + * @param {Object} deps.timings - Instance of a Koa Server Timings object (option) + * @param {number} id - id of the message to update + * @param {Object} args + * @param {string} args.text - Text data of the message + * @param {string} args.owner - onder identifier in remote system + * @param {string} args.updatedBy - Remote System identifier (required) */ - update(deps, id, args) { - deps = deps || {}; - + update(deps = {}, id, args) { if (deps.timings) { deps.timings.startSpan('messageDao:update'); } @@ -143,14 +142,14 @@ module.exports = class MessageDao { /** * Create a new message in storage * - * @args {Object} deps.timings - Instance of a Koa Server Timings object (option) - * @args (string) args.text - Text data of the message (required) - * @args (string) args.owner - onder identifier in remote system - * @args (string) args.createdBy - Remote System identifier + * @param {Object} deps - Dependency injection + * @param {Object} deps.timings - Instance of a Koa Server Timings object (option) + * @param {Object} args - Function arguments + * @param {string} args.text - Text data of the message (required) + * @param {string} args.owner - onder identifier in remote system + * @param {string} args.createdBy - Remote System identifier */ - create(deps, args) { - deps = deps || {}; - args = args || {}; + create(deps = {}, args = {}) { if (deps.timings) { deps.timings.startSpan('messageDao:create'); } @@ -189,11 +188,11 @@ module.exports = class MessageDao { /** * Return the total number of messages in storage * - * @args {Object} deps.timings - Instance of a Koa Server Timings object (optional) + * @param {Object} deps + * @param {Object} deps.timings - Instance of a Koa Server Timings object (optional) */ - totalMessages(deps) { - deps = deps || {}; + totalMessages(deps = {}) { if (deps.timings) { deps.timings.startSpan('messageDao:totalMessages'); } @@ -219,13 +218,16 @@ module.exports = class MessageDao { /** * Return all message in storage * - * @args {Object} deps.timings - Instance of a Koa Server timings - * @args {integer} args.limit - Max number of messages to return - * @args {integer} args.offset - Offset before retrieving messages + * @param {Object} deps + * @param {Object} deps.timings - Instance of a Koa Server timings + * @param {Object} args + * @param {number} args.limit - Max number of messages to return + * @param {number} args.offset - Offset before retrieving messages + * + * @returns {Promise>} messages - All stored messages */ - getAll(deps, args) { - deps = deps || {}; + getAll(deps = {}, args) { if (deps.timings) { deps.timings.startSpan('messageDao:getAll'); } diff --git a/src/model/message.js b/src/model/message.js index 596772d..2addffd 100644 --- a/src/model/message.js +++ b/src/model/message.js @@ -1,5 +1,5 @@ 'use strict'; -/**i +/** * @class * @property {integer} id - Identifier of the message * @property {string} text - The text of the messsage @@ -25,10 +25,13 @@ module.exports = class Message { /** * Update a single message * - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} deps.timings - Instance of a Koa Server Timings object (optional) - * @args {string} args.text - Updated message text - * @args {string} args.owner - Updated owner id + * @param {Object} deps - Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} deps.timings - Instance of a Koa Server Timings object (optional) + * @param {Object} args - function arguments + * @param {string} args.text - Updated message text + * @param {string} args.owner - Updated owner id + * * @returns {Promise} - Resolves a Message object */ update(deps, args) { @@ -73,9 +76,7 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => { - return dao.update(deps, this.id, updateData); - }) + .update(deps, this.id, updateData) .then(message => { if (deps.timings) { deps.timings.stopSpan('message:update'); @@ -99,9 +100,9 @@ module.exports = class Message { /** * Create a single message * - * @args {Object} deps - Injected Dependencies - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} [deps.timings] - Instance of a Koa Server Timings object (optional) + * @param {Object} deps - Injected Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} [deps.timings] - Instance of a Koa Server Timings object (optional) * * @returns {Promise} Message - Resolves the created Message object * @throws {Error} '`deps.daoFac` is a required argument to message.create()' @@ -127,12 +128,10 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => { - return dao.create(deps, { - createdBy: this.createdBy, - text: this.text, - owner: this.owner - }); + .create(deps, { + createdBy: this.createdBy, + text: this.text, + owner: this.owner }) .then(message => { if (deps.timings) { @@ -157,9 +156,9 @@ module.exports = class Message { /** * Delete a single message * - * @args {Object} deps - Injected Dependencies - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} [deps.timings] - Instance of a Koa Server Timings object (optional) + * @param {Object} deps - Injected Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} [deps.timings] - Instance of a Koa Server Timings object (optional) * * @returns {Promise} - Resolves the deleted Message object * @throws {Error} '`deps.daoFac` is a required argument to message.delete()' @@ -183,7 +182,7 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => dao.delete(deps, this.id)) + .delete(deps, this.id) .then(message => { if (deps.timings) { deps.timings.stopSpan('message:delete'); @@ -205,14 +204,13 @@ module.exports = class Message { } /* Static methods */ - /** * Find a single message * - * @args {Object} deps - Injected Dependencies - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} [deps.timings] - Instance of a Koa Server Timings object (optional) - * @args {integer} id - Id of the message to find + * @param {Object} deps - Injected Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} [deps.timings] - Instance of a Koa Server Timings object (optional) + * @param {integer} id - Id of the message to find * * @returns {Promise} - Resolves to the found Message object * @throws {Error} '`deps.daoFac` is a required argument to Message.find()' @@ -234,9 +232,7 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => { - return dao.find(deps, id); - }) + .find(deps, id) .then(message => { if (deps.timings) { deps.timings.stopSpan('message:find'); @@ -260,14 +256,14 @@ module.exports = class Message { /** * Retrieve the total number of messages in storage * - * @args {Object} deps - Injected Dependencies - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} [deps.timings] - Instance of a Koa Server Timings object (optional) + * @param {Object} deps - Injected Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} [deps.timings] - Instance of a Koa Server Timings object (optional) * * @returns {Promise} count - Resolves to the total number of messages * @throws {Error} '`deps.daoFac` is a required argument to Message.getTotal()' */ - static getTotal(deps, args) { + static getTotal(deps) { deps = deps || {}; if (!deps.daoFac) { throw new Error( @@ -281,9 +277,7 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => { - return dao.totalMessages(deps); - }) + .totalMessages(deps) .then(totalCount => { if (deps.timings) { deps.timings.stopSpan('message:totalMessage'); @@ -303,12 +297,12 @@ module.exports = class Message { /** * Fetch all messages * - * @args {Object} deps - Injected Dependencies - * @args {Object} deps.daoFac - Dao Factory - * @args {Object} [deps.timings] - Instance of a Koa Server Timings object (optional) - * @args {Object} [args] - function arguments - * @args {integer} [args.limit] - maximum number of messages to return - * @args {integer} [args.offset=0] - number of messages to ignore before returning + * @param {Object} deps - Injected Dependencies + * @param {DaoFac} deps.daoFac - Dao Factory + * @param {KoaServerTimings} [deps.timings] - Instance of a Koa Server Timings object (optional) + * @param {Object} [args] - function arguments + * @param {integer} [args.limit] - maximum number of messages to return + * @param {integer} [args.offset=0] - number of messages to ignore before returning * * @returns {Promise} - Resolves to all retrieved Message object * @throws {Error} '`deps.daoFac` is a required argument to Message.getAll()' @@ -333,7 +327,7 @@ module.exports = class Message { return deps.daoFac .daoFor('message') - .then(dao => dao.getAll(deps, query)) + .getAll(deps, query) .filter(message => message) .map(message => new Message(message)) .then(messages => { diff --git a/src/router/message.js b/src/router/message.js index 107313e..1fb4df5 100644 --- a/src/router/message.js +++ b/src/router/message.js @@ -6,7 +6,6 @@ const paginator = require('koa-ctx-paginate'); const Promise = require('bluebird'); const router = require('koa-router')(); const status = require('http-status'); -const logger = require('../logger'); // Business Models const Message = require('../model/message'); diff --git a/src/server.js b/src/server.js index 502ad59..fe3327f 100644 --- a/src/server.js +++ b/src/server.js @@ -6,7 +6,6 @@ const etags = require('koa-etag'); const Koa = require('koa'); const serve = require('koa-static'); const serverTiming = require('koa-server-timing'); -const status = require('http-status'); const swaggerUI = require('koa2-swagger-ui'); const morgan = require('koa-morgan'); const mount = require('koa-mount'); @@ -54,7 +53,7 @@ module.exports = class Server { /** * Initialise application middleware/routes etc */ - async init() { + init() { // Add Server timings header this.app.use(serverTiming()); diff --git a/test/unit/dao-factory/daoFor.test.js b/test/unit/dao-factory/daoFor.test.js index 5bbcac6..2677aa1 100644 --- a/test/unit/dao-factory/daoFor.test.js +++ b/test/unit/dao-factory/daoFor.test.js @@ -7,20 +7,12 @@ suite('daoFor', function() { test('No Dao', function() { const daoFac = new DaoFac({}); - return daoFac - .daoFor('test') - .then(() => { - assert.isNotOk(true); - }) - .catch(error => { - assert.equal(error, 'Error: No DAO for test'); - }); + assert.throws(() => daoFac.daoFor('test'), 'No DAO for test'); }); - test('DAO', async function() { + test('DAO', function() { const daoFac = new DaoFac({}); - const dao = await daoFac.daoFor('message'); - assert.deepEqual(dao, { store: {} }); + assert.deepEqual(daoFac.daoFor('message'), { store: {} }); }); }); diff --git a/test/unit/model/message/create.test.js b/test/unit/model/message/create.test.js index a8519bb..961368d 100644 --- a/test/unit/model/message/create.test.js +++ b/test/unit/model/message/create.test.js @@ -19,13 +19,11 @@ suite('Model: Message.create()', function() { const messages = await this.message.create({ timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - create: stub() - .usingPromise(Promise) - .resolves(messageData()) - }) + daoFor: stub().returns({ + create: stub() + .usingPromise(Promise) + .resolves(messageData()) + }) } }); @@ -44,13 +42,11 @@ suite('Model: Message.create()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - create: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + create: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, {} @@ -76,13 +72,11 @@ suite('Model: Message.create()', function() { assert.throws(() => { this.message.create({ daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - create: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + create: stub() + .usingPromise(Promise) + .resolves(null) + }) } }); }, 'Cannot call message.create() on message already in storage'); @@ -93,11 +87,9 @@ suite('Model: Message.create()', function() { .usingPromise(Promise) .resolves(); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - create: createStub - }); + const daoStub = stub().returns({ + create: createStub + }); await this.message .create({ @@ -119,11 +111,9 @@ suite('Model: Message.create()', function() { .usingPromise(Promise) .resolves(messageData()); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - create: createStub - }); + const daoStub = stub().returns({ + create: createStub + }); const messages = await this.message.create({ daoFac: { diff --git a/test/unit/model/message/delete.test.js b/test/unit/model/message/delete.test.js index a5005ee..dcd6125 100644 --- a/test/unit/model/message/delete.test.js +++ b/test/unit/model/message/delete.test.js @@ -19,13 +19,11 @@ suite('Model: Message.delete()', function() { const messages = await this.message.delete({ timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - delete: stub() - .usingPromise(Promise) - .resolves(messageData()) - }) + daoFor: stub().returns({ + delete: stub() + .usingPromise(Promise) + .resolves(messageData()) + }) } }); @@ -44,13 +42,11 @@ suite('Model: Message.delete()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - delete: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + delete: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, {} @@ -75,13 +71,11 @@ suite('Model: Message.delete()', function() { this.message.id = undefined; this.message.delete({ daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - delete: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + delete: stub() + .usingPromise(Promise) + .resolves(null) + }) } }); }, '`this.id` is a required argument to message.delete()'); @@ -91,11 +85,9 @@ suite('Model: Message.delete()', function() { const deleteStub = stub() .usingPromise(Promise) .resolves(); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - delete: deleteStub - }); + const daoStub = stub().returns({ + delete: deleteStub + }); const messages = await this.message.delete({ daoFac: { @@ -111,11 +103,9 @@ suite('Model: Message.delete()', function() { const deleteStub = stub() .usingPromise(Promise) .resolves(messageData()); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - delete: deleteStub - }); + const daoStub = stub().returns({ + delete: deleteStub + }); const messages = await this.message.delete({ daoFac: { diff --git a/test/unit/model/message/find.test.js b/test/unit/model/message/find.test.js index d8d2bef..c414b88 100644 --- a/test/unit/model/message/find.test.js +++ b/test/unit/model/message/find.test.js @@ -17,13 +17,11 @@ suite('Model: Message.find()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - find: stub() - .usingPromise(Promise) - .resolves(messageData()) - }) + daoFor: stub().returns({ + find: stub() + .usingPromise(Promise) + .resolves(messageData()) + }) } }, {} @@ -43,13 +41,11 @@ suite('Model: Message.find()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - find: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + find: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, {} @@ -72,13 +68,11 @@ suite('Model: Message.find()', function() { assert.throws(() => { Message.find({ daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - find: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + find: stub() + .usingPromise(Promise) + .resolves(null) + }) } }); }, '`id` is a required argument to Message.find()'); @@ -88,13 +82,11 @@ suite('Model: Message.find()', function() { const messages = await Message.find( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - find: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + find: stub() + .usingPromise(Promise) + .resolves(null) + }) } }, 3 @@ -107,13 +99,11 @@ suite('Model: Message.find()', function() { const messages = await Message.find( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - find: stub() - .usingPromise(Promise) - .resolves(messageData()) - }) + daoFor: stub().returns({ + find: stub() + .usingPromise(Promise) + .resolves(messageData()) + }) } }, 1 diff --git a/test/unit/model/message/get-all.test.js b/test/unit/model/message/get-all.test.js index 177ddfd..2054929 100644 --- a/test/unit/model/message/get-all.test.js +++ b/test/unit/model/message/get-all.test.js @@ -17,13 +17,11 @@ suite('Model: Message.getAll()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - getAll: stub() - .usingPromise(Promise) - .resolves(messageData()) - }) + daoFor: stub().returns({ + getAll: stub() + .usingPromise(Promise) + .resolves(messageData()) + }) } }, {} @@ -43,13 +41,11 @@ suite('Model: Message.getAll()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - getAll: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + getAll: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, {} @@ -72,13 +68,11 @@ suite('Model: Message.getAll()', function() { const messages = await Message.getAll( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - getAll: stub() - .usingPromise(Promise) - .resolves([]) - }) + daoFor: stub().returns({ + getAll: stub() + .usingPromise(Promise) + .resolves([]) + }) } }, {} @@ -96,11 +90,9 @@ suite('Model: Message.getAll()', function() { const messages = await Message.getAll( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - getAll: daoStub - }) + daoFor: stub().returns({ + getAll: daoStub + }) } }, {} diff --git a/test/unit/model/message/get-total.test.js b/test/unit/model/message/get-total.test.js index 3f292f0..4995b99 100644 --- a/test/unit/model/message/get-total.test.js +++ b/test/unit/model/message/get-total.test.js @@ -17,13 +17,11 @@ suite('Model: Message.getTotal()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - totalMessages: stub() - .usingPromise(Promise) - .resolves(5) - }) + daoFor: stub().returns({ + totalMessages: stub() + .usingPromise(Promise) + .resolves(5) + }) } }, {} @@ -43,13 +41,11 @@ suite('Model: Message.getTotal()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - totalMessages: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + totalMessages: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, {} @@ -72,13 +68,11 @@ suite('Model: Message.getTotal()', function() { const count = await Message.getTotal( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - totalMessages: stub() - .usingPromise(Promise) - .resolves(5) - }) + daoFor: stub().returns({ + totalMessages: stub() + .usingPromise(Promise) + .resolves(5) + }) } }, {} diff --git a/test/unit/model/message/update.test.js b/test/unit/model/message/update.test.js index b242af7..bbd95df 100644 --- a/test/unit/model/message/update.test.js +++ b/test/unit/model/message/update.test.js @@ -20,13 +20,11 @@ suite('Model: Message.update()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - update: stub() - .usingPromise(Promise) - .resolves(Object.assign(messageData(), updateData)) - }) + daoFor: stub().returns({ + update: stub() + .usingPromise(Promise) + .resolves(Object.assign(messageData(), updateData)) + }) } }, updateData() @@ -47,13 +45,11 @@ suite('Model: Message.update()', function() { { timings: timingsStub, daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - update: stub() - .usingPromise(Promise) - .rejects('error') - }) + daoFor: stub().returns({ + update: stub() + .usingPromise(Promise) + .rejects('error') + }) } }, updateData() @@ -79,13 +75,11 @@ suite('Model: Message.update()', function() { this.message.update( { daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - update: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + update: stub() + .usingPromise(Promise) + .resolves(null) + }) } }, updateData() @@ -97,13 +91,11 @@ suite('Model: Message.update()', function() { assert.throws(() => { this.message.update({ daoFac: { - daoFor: stub() - .usingPromise(Promise) - .resolves({ - update: stub() - .usingPromise(Promise) - .resolves(null) - }) + daoFor: stub().returns({ + update: stub() + .usingPromise(Promise) + .resolves(null) + }) } }); }, 'message.update() expects at least `text` or `owner`'); @@ -114,11 +106,9 @@ suite('Model: Message.update()', function() { .usingPromise(Promise) .resolves(); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - update: updateStub - }); + const daoStub = stub().returns({ + update: updateStub + }); await this.message .update( @@ -147,11 +137,9 @@ suite('Model: Message.update()', function() { .usingPromise(Promise) .resolves(Object.assign(messageData(), updateData)); - const daoStub = stub() - .usingPromise(Promise) - .resolves({ - update: updateStub - }); + const daoStub = stub().returns({ + update: updateStub + }); const messages = await this.message.update( {