From db142222dd987bb00d326f00655937e9da0e0715 Mon Sep 17 00:00:00 2001 From: Manny Henri Date: Tue, 4 Feb 2020 07:39:53 -0500 Subject: [PATCH 01/19] Module 1 completed - added mongoose connection - added tests --- README.md | 3 + index.js | 8 +++ package-lock.json | 151 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + test/test_helper.js | 12 ++++ 5 files changed, 175 insertions(+) create mode 100644 test/test_helper.js diff --git a/README.md b/README.md index 160490d..99dbee9 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,6 @@ Make sure you have MongoDB and NodeJS installed on your system prior to start th 1. Install MongoDB community: https://www.mongodb.com/download-center/community 2. Install NodeJS: https://nodejs.org/en/download/ +## Run & Test +1. Run `npm start` first to make sure your project is started succesfully +2. Run `npm test` to test everything diff --git a/index.js b/index.js index bc69cc0..a679d17 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,17 @@ import express from 'express'; +import mongoose from 'mongoose'; import bodyParser from 'body-parser'; const app = express(); const PORT = 4000; +// mongoose connection +mongoose.Promise = global.Promise; +mongoose.connect('mongodb://localhost/productsdb', { + useNewUrlParser: true, + useUnifiedTopology: true +}); + // bodyparser setup app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); diff --git a/package-lock.json b/package-lock.json index 53720ca..51dca54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2193,6 +2193,11 @@ "file-uri-to-path": "1.0.0" } }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -2283,6 +2288,11 @@ "electron-to-chromium": "^1.3.47" } }, + "bson": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", + "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -3821,6 +3831,11 @@ "verror": "1.10.0" } }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3930,6 +3945,12 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -4096,6 +4117,89 @@ "yargs-unparser": "1.6.0" } }, + "mongodb": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz", + "integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.8.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.11.tgz", + "integrity": "sha512-Yz0leNEJsAtNtMTxTDEadacLWt58gaVeBVL3c1Z3vaBoc159aJqlf+T8jaL9mAdBxKndF5YWhh6Q719xac7cjA==", + "requires": { + "bson": "~1.1.1", + "kareem": "2.3.1", + "mongodb": "3.4.1", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.6.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", + "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -4698,6 +4802,11 @@ "safe-regex": "^1.1.0" } }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -4816,6 +4925,20 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -4850,6 +4973,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4959,6 +5091,11 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -4970,6 +5107,11 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -5142,6 +5284,15 @@ "dev": true, "optional": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", diff --git a/package.json b/package.json index 4b954db..7e02111 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "expect.js": "^0.3.1", "express": "^4.17.1", "mocha": "^7.0.1", + "mongoose": "^5.8.11", "nodemon": "^2.0.2", "request": "^2.88.0" }, diff --git a/test/test_helper.js b/test/test_helper.js new file mode 100644 index 0000000..40d155c --- /dev/null +++ b/test/test_helper.js @@ -0,0 +1,12 @@ +const mongoose = require('mongoose'); + +mongoose.Promise = global.Promise; +mongoose.connect('mongodb://localhost/productsdb', { + useNewUrlParser: true, + useUnifiedTopology: true +}); +mongoose.connection + .once('open', () => console.log('DB Connected!')) + .on('error', (error) => { + console.warn('Error : ',error); + }); From a5633e31a3fb34d050ea7ebdd320e7953ebd1729 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Thu, 20 Feb 2020 11:27:24 -0500 Subject: [PATCH 02/19] test direcotry and files updated --- test/test_crud.js | 68 +++++++++++++++++++++++++++++ test/{test_helper.js => test_db.js} | 2 +- test/{test.js => test_server.js} | 6 +-- 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 test/test_crud.js rename test/{test_helper.js => test_db.js} (97%) rename test/{test.js => test_server.js} (81%) diff --git a/test/test_crud.js b/test/test_crud.js new file mode 100644 index 0000000..30c8b02 --- /dev/null +++ b/test/test_crud.js @@ -0,0 +1,68 @@ +const assert = require("assert"); +const mongoose = require("mongoose"); + +const ProductSchema = new mongoose.Schema({ + name: { + type: String, + required: 'Enter a product name' + }, + description: { + type: String, + required: 'Enter a description' + }, + category: { + type: String + }, + price: { + type: Number + }, + created_date: { + type: Date, + default: Date.now + } +}); + + +const Product = mongoose.model('Product', ProductSchema); +let watch2; +beforeEach((done) => { + watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); + watch2.save() + .then(() => done()); +}); + +describe('Creating documents', () => { + it('creates a new product', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }); + }); +}); + +describe('Reading product details', () => { + it('finds product with the name of Old Watch', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }); + }) +}); + +describe('Deleting a product', () => { + it('removes a product using id', (done) => { + let belt = new Product({ name: 'New belt', description: 'a new belt' }); + belt.save(); + Product.findOneAndDelete(belt._id) + .then(() => Product.findOne({ name: 'New belt' })) + .then((product) => { + assert(product === null); + done(); + }); + + done(); + }) +}) diff --git a/test/test_helper.js b/test/test_db.js similarity index 97% rename from test/test_helper.js rename to test/test_db.js index 40d155c..90ebb7c 100644 --- a/test/test_helper.js +++ b/test/test_db.js @@ -9,4 +9,4 @@ mongoose.connection .once('open', () => console.log('DB Connected!')) .on('error', (error) => { console.warn('Error : ',error); - }); +}); diff --git a/test/test.js b/test/test_server.js similarity index 81% rename from test/test.js rename to test/test_server.js index 32c3a87..cfd53e1 100644 --- a/test/test.js +++ b/test/test_server.js @@ -1,7 +1,7 @@ -var request = require("request"); -var expect = require("expect.js"); +const request = require("request"); +const expect = require("expect.js"); -var base_url = "http://localhost:4000/" +const base_url = "http://localhost:4000/" describe("Server Running", function() { describe("GET /", function() { From 9449cad5c0da4997728e7d0eabb72ec2f04caf4f Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 11 Mar 2020 08:59:05 -0400 Subject: [PATCH 03/19] Update test_server.js --- test/test_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_server.js b/test/test_server.js index cfd53e1..d4c2403 100644 --- a/test/test_server.js +++ b/test/test_server.js @@ -5,7 +5,7 @@ const base_url = "http://localhost:4000/" describe("Server Running", function() { describe("GET /", function() { - it("returns status code 200", function(done) { + it("returns status code 200 @connection", function(done) { request.get(base_url, function(error, response, body) { expect(response.statusCode).to.be(200); done(); From a4cfbce192a0287dc1f29fa8b4eb16407123511a Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 11 Mar 2020 10:50:13 -0400 Subject: [PATCH 04/19] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 99dbee9..0d0423c 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,6 @@ Make sure you have MongoDB and NodeJS installed on your system prior to start th ## Run & Test 1. Run `npm start` first to make sure your project is started succesfully 2. Run `npm test` to test everything + +#Branches +The branch follows the same modules on Pluralsight at the end, therefore the Module-2 is the branch after the code for Module 2 has been completed. \ No newline at end of file From 63e7801467c0a816fda1e7da71288133a7969102 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 11 Mar 2020 11:59:31 -0400 Subject: [PATCH 05/19] Update test_crud.js --- test/test_crud.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/test/test_crud.js b/test/test_crud.js index 30c8b02..d920c8b 100644 --- a/test/test_crud.js +++ b/test/test_crud.js @@ -32,7 +32,7 @@ beforeEach((done) => { }); describe('Creating documents', () => { - it('creates a new product', (done) => { + it('creates a new product @create-product', (done) => { const watch = new Product({ name: 'New watch', description: 'a new watch' }); watch.save() .then(() => { @@ -42,7 +42,18 @@ describe('Creating documents', () => { }); }); -describe('Reading product details', () => { +describe('Reading product details @find-single-product', () => { + it('finds product with the name of Old Watch', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }); + }) +}); + + +describe('Reading product details @find-products', () => { it('finds product with the name of Old Watch', (done) => { Product.findOne({ name: 'Old Watch' }) .then(() => { @@ -53,7 +64,7 @@ describe('Reading product details', () => { }); describe('Deleting a product', () => { - it('removes a product using id', (done) => { + it('removes a product using id @remove-product', (done) => { let belt = new Product({ name: 'New belt', description: 'a new belt' }); belt.save(); Product.findOneAndDelete(belt._id) From a1849d0b3ef0ef661192512eff9dc26b0f8e9201 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Fri, 13 Mar 2020 13:49:15 -0400 Subject: [PATCH 06/19] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 403bf38..5600da6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,4 +5,4 @@ COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 4000 -CMD [ “npm”, “start” ] \ No newline at end of file +CMD ["npm", "start"] \ No newline at end of file From 246120dee69dd6b949ae12596deccef71c1a7258 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Fri, 20 Mar 2020 13:11:50 -0400 Subject: [PATCH 07/19] Update test_crud.js --- test/test_crud.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/test/test_crud.js b/test/test_crud.js index d920c8b..ada5a54 100644 --- a/test/test_crud.js +++ b/test/test_crud.js @@ -28,7 +28,10 @@ let watch2; beforeEach((done) => { watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); watch2.save() - .then(() => done()); + .then(() => done()) + .catch((err) => { + console.error("Handling promise rejection", err); + }); }); describe('Creating documents', () => { @@ -38,6 +41,9 @@ describe('Creating documents', () => { .then(() => { assert(!watch.isNew); done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); }); }); }); @@ -48,6 +54,9 @@ describe('Reading product details @find-single-product', () => { .then(() => { assert(watch2.name === 'Old Watch'); done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); }); }) }); @@ -59,6 +68,9 @@ describe('Reading product details @find-products', () => { .then(() => { assert(watch2.name === 'Old Watch'); done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); }); }) }); @@ -67,13 +79,14 @@ describe('Deleting a product', () => { it('removes a product using id @remove-product', (done) => { let belt = new Product({ name: 'New belt', description: 'a new belt' }); belt.save(); - Product.findOneAndDelete(belt._id) - .then(() => Product.findOne({ name: 'New belt' })) + Product.findOneAndDelete({_id: belt._id}) + //.then(() => Product.findOne({ name: 'New belt' })) .then((product) => { assert(product === null); - done(); - }); - + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) done(); }) }) From 0ab15b6b0aa82824688d200a96ba28205a846e0d Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Fri, 20 Mar 2020 13:15:49 -0400 Subject: [PATCH 08/19] Update test_crud.js --- test/test_crud.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_crud.js b/test/test_crud.js index ada5a54..89119ca 100644 --- a/test/test_crud.js +++ b/test/test_crud.js @@ -80,7 +80,6 @@ describe('Deleting a product', () => { let belt = new Product({ name: 'New belt', description: 'a new belt' }); belt.save(); Product.findOneAndDelete({_id: belt._id}) - //.then(() => Product.findOne({ name: 'New belt' })) .then((product) => { assert(product === null); }) From 28e2f5636f8ed4654b5b3a48c3506ce03a31350f Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Tue, 24 Mar 2020 13:38:08 -0400 Subject: [PATCH 09/19] Update test_db.js --- test/test_db.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_db.js b/test/test_db.js index 90ebb7c..68466d2 100644 --- a/test/test_db.js +++ b/test/test_db.js @@ -1,7 +1,7 @@ const mongoose = require('mongoose'); mongoose.Promise = global.Promise; -mongoose.connect('mongodb://localhost/productsdb', { +mongoose.connect('mongodb://mongo:27017', { useNewUrlParser: true, useUnifiedTopology: true }); From 8483c32768bbd32e2cb40c97ca58bab3df9b623f Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 25 Mar 2020 10:49:37 -0400 Subject: [PATCH 10/19] Update test_crud.js --- test/test_crud.js | 97 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/test/test_crud.js b/test/test_crud.js index 89119ca..e605165 100644 --- a/test/test_crud.js +++ b/test/test_crud.js @@ -35,6 +35,30 @@ beforeEach((done) => { }); describe('Creating documents', () => { + it('Create the model and schema @create-model', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + + it('creates controler for route @create-controler', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + it('creates a new product @create-product', (done) => { const watch = new Product({ name: 'New watch', description: 'a new watch' }); watch.save() @@ -48,8 +72,9 @@ describe('Creating documents', () => { }); }); -describe('Reading product details @find-single-product', () => { - it('finds product with the name of Old Watch', (done) => { + +describe('Pulling products', () => { + it('Add controler to pull a list of items @controler-lists', (done) => { Product.findOne({ name: 'Old Watch' }) .then(() => { assert(watch2.name === 'Old Watch'); @@ -59,11 +84,21 @@ describe('Reading product details @find-single-product', () => { console.error("Handling promise rejection", err); }); }) -}); + it('Add route to pull a list of items @route-lists', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); +}); -describe('Reading product details @find-products', () => { - it('finds product with the name of Old Watch', (done) => { +describe('Find a single product', () => { + it('Add controler to pull a single item @controler-single', (done) => { Product.findOne({ name: 'Old Watch' }) .then(() => { assert(watch2.name === 'Old Watch'); @@ -73,10 +108,60 @@ describe('Reading product details @find-products', () => { console.error("Handling promise rejection", err); }); }) + + it('Add route to pull a single item @route-single', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); }); + +describe('Updating a product', () => { + it('Add a controler to update a product @controler-update', (done) => { + Product.findOneAndUpdate({name: 'Old Watch'}, {name: 'Updated Watch'}, { new: true, useFindAndModify: false }) + .then((product) => { + assert(product.name === 'Updated Watch'); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) + done(); + }) + + it('Add a controler to update a product @route-update', (done) => { + Product.findOneAndUpdate({name: 'Old Watch'}, {name: 'Updated Watch'}, { new: true, useFindAndModify: false }) + .then((product) => { + assert(product.name === 'Updated Watch'); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) + done(); + }) +}) + + describe('Deleting a product', () => { - it('removes a product using id @remove-product', (done) => { + it('Add a controler to remove a product @controler-remove', (done) => { + let belt = new Product({ name: 'New belt', description: 'a new belt' }); + belt.save(); + Product.findOneAndDelete({_id: belt._id}) + .then((product) => { + assert(product === null); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) + done(); + }) + + it('Add a route to remove a product @route-remove', (done) => { let belt = new Product({ name: 'New belt', description: 'a new belt' }); belt.save(); Product.findOneAndDelete({_id: belt._id}) From bd4dd7075f4496b9aa85488b9656d00e80bde909 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 25 Mar 2020 11:19:44 -0400 Subject: [PATCH 11/19] Delete docker-compose.yml --- docker-compose.yml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 6058640..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '2.1' -services: - app: - container_name: app - restart: always - build: . - ports: - - "4000:4000" - links: - - mongo - mongo: - container_name: mongo - image: mongo - ports: - - "27017:27017" \ No newline at end of file From 76fde80661eb9e837362755f7eb206d5aee1c21f Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Wed, 25 Mar 2020 11:29:03 -0400 Subject: [PATCH 12/19] Update Dockerfile --- Dockerfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5600da6..3903a74 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,13 @@ FROM node:latest + RUN mkdir -p /usr/src/app + WORKDIR /usr/src/app + COPY package.json /usr/src/app/ + RUN npm install + COPY . /usr/src/app -EXPOSE 4000 -CMD ["npm", "start"] \ No newline at end of file + +EXPOSE 4000 \ No newline at end of file From f6343f02fedbc9ce760c879e7a9f888b8d9c320b Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Thu, 26 Mar 2020 14:14:11 -0400 Subject: [PATCH 13/19] test folders & scripts --- Dockerfile | 8 +- package.json | 6 +- test/module2/test_mongoose.spec.js | 20 ++ .../test_server.spec.js} | 0 test/module3/add_main_folders.spec.js | 11 ++ test/module3/add_single.spec.js | 52 ++++++ test/module4/pull_list.spec.js | 37 ++++ test/module4/pull_single.spec.js | 37 ++++ test/module5/delete_item.spec.js | 41 ++++ test/test_crud.js | 176 ------------------ test/test_db.js | 12 -- test/test_util.js | 27 +++ 12 files changed, 234 insertions(+), 193 deletions(-) create mode 100644 test/module2/test_mongoose.spec.js rename test/{test_server.js => module2/test_server.spec.js} (100%) create mode 100644 test/module3/add_main_folders.spec.js create mode 100644 test/module3/add_single.spec.js create mode 100644 test/module4/pull_list.spec.js create mode 100644 test/module4/pull_single.spec.js create mode 100644 test/module5/delete_item.spec.js delete mode 100644 test/test_crud.js delete mode 100644 test/test_db.js create mode 100644 test/test_util.js diff --git a/Dockerfile b/Dockerfile index 3903a74..d88ece4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ FROM node:latest -RUN mkdir -p /usr/src/app +RUN mkdir -p /src/app -WORKDIR /usr/src/app +WORKDIR /src/app -COPY package.json /usr/src/app/ +COPY package.json /src/app/ RUN npm install -COPY . /usr/src/app +COPY . /src/app EXPOSE 4000 \ No newline at end of file diff --git a/package.json b/package.json index 7e02111..b7c62a3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,11 @@ "main": "index.js", "scripts": { "start": "nodemon ./index.js --exec babel-node -e js", - "test": "mocha" + "test": "mocha --exit './test/**/*.spec.js' || true", + "test:module2": "mocha --exit './test/module2/*.spec.js' || true", + "test:module3": "mocha --exit './test/module3/*.spec.js' || true", + "test:module4": "mocha --exit './test/module4/*.spec.js' || true", + "test:module5": "mocha --exit './test/module5/*.spec.js' || true" }, "author": "Emmanuel Henri", "license": "ISC", diff --git a/test/module2/test_mongoose.spec.js b/test/module2/test_mongoose.spec.js new file mode 100644 index 0000000..1d1c699 --- /dev/null +++ b/test/module2/test_mongoose.spec.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); + +mongoose.Promise = global.Promise; + +describe("Mongo tests", function() { + it("Database connected @mongo", function(done) { + mongoose.connect('mongodb://localhost/productsdb', { + useNewUrlParser: true, + useUnifiedTopology: true + }); + mongoose.connection + .once('open', () => console.log('DB Connected!')) + .on('error', (error) => { + console.warn('Error : ',error); + }); + done(); + }); +}); + + diff --git a/test/test_server.js b/test/module2/test_server.spec.js similarity index 100% rename from test/test_server.js rename to test/module2/test_server.spec.js diff --git a/test/module3/add_main_folders.spec.js b/test/module3/add_main_folders.spec.js new file mode 100644 index 0000000..4e4d6d9 --- /dev/null +++ b/test/module3/add_main_folders.spec.js @@ -0,0 +1,11 @@ +const fs = require('fs'); +const path = require('path'); +const assert = require("assert"); + +describe('Folder structure is completed', () => { + it('The proper files exist in their respective folders @folders', () => { + assert(fs.existsSync(path.join(process.cwd(), 'src/controllers/controllers.js')), 'The controller file does not exist.'); + assert(fs.existsSync(path.join(process.cwd(), 'src/models/models.js')), 'The Model file does not exist.'); + assert(fs.existsSync(path.join(process.cwd(), 'src/routes/routes.js')), 'The Routes file does not exist.'); + }); +}); \ No newline at end of file diff --git a/test/module3/add_single.spec.js b/test/module3/add_single.spec.js new file mode 100644 index 0000000..204237c --- /dev/null +++ b/test/module3/add_single.spec.js @@ -0,0 +1,52 @@ +const assert = require("assert"); +const Product = require("../test_util.js"); + +describe('Creating documents', () => { + let watch2; + + before((done) => { + watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); + watch2.save() + .then(() => done()) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); + + it('Create the model and schema @create-model', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + + it('creates controler for route @create-controler', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + + it('creates a new product @create-product', (done) => { + const watch = new Product({ name: 'New watch', description: 'a new watch' }); + watch.save() + .then(() => { + assert(!watch.isNew); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); +}); + diff --git a/test/module4/pull_list.spec.js b/test/module4/pull_list.spec.js new file mode 100644 index 0000000..812179d --- /dev/null +++ b/test/module4/pull_list.spec.js @@ -0,0 +1,37 @@ +const assert = require("assert"); +const Product = require("../test_util.js"); + +describe('Pulling products', () => { + let watch2; + + before((done) => { + watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); + watch2.save() + .then(() => done()) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); + + it('Add controler to pull a list of items @controler-lists', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + + it('Add route to pull a list of items @route-lists', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); +}); diff --git a/test/module4/pull_single.spec.js b/test/module4/pull_single.spec.js new file mode 100644 index 0000000..9d286d2 --- /dev/null +++ b/test/module4/pull_single.spec.js @@ -0,0 +1,37 @@ +const assert = require("assert"); +const Product = require("../test_util.js"); + +describe('Find a single product', () => { + let watch2; + + before((done) => { + watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); + watch2.save() + .then(() => done()) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); + + it('Add controler to pull a single item @controler-single', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }) + + it('Add route to pull a single item @route-single', (done) => { + Product.findOne({ name: 'Old Watch' }) + .then(() => { + assert(watch2.name === 'Old Watch'); + done(); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); +}); diff --git a/test/module5/delete_item.spec.js b/test/module5/delete_item.spec.js new file mode 100644 index 0000000..8ffa560 --- /dev/null +++ b/test/module5/delete_item.spec.js @@ -0,0 +1,41 @@ +const assert = require("assert"); +const Product = require("../test_util.js"); + +describe('Deleting a product', () => { + let watch2; + + before((done) => { + watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); + watch2.save() + .then(() => done()) + .catch((err) => { + console.error("Handling promise rejection", err); + }); + }); + + it('Add a controler to remove a product @controler-remove', (done) => { + let belt = new Product({ name: 'New belt', description: 'a new belt' }); + belt.save(); + Product.findOneAndDelete({_id: belt._id}) + .then((product) => { + assert(product === null); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) + done(); + }) + + it('Add a route to remove a product @route-remove', (done) => { + let belt = new Product({ name: 'New belt', description: 'a new belt' }); + belt.save(); + Product.findOneAndDelete({_id: belt._id}) + .then((product) => { + assert(product === null); + }) + .catch((err) => { + console.error("Handling promise rejection", err); + }) + done(); + }) +}) diff --git a/test/test_crud.js b/test/test_crud.js deleted file mode 100644 index e605165..0000000 --- a/test/test_crud.js +++ /dev/null @@ -1,176 +0,0 @@ -const assert = require("assert"); -const mongoose = require("mongoose"); - -const ProductSchema = new mongoose.Schema({ - name: { - type: String, - required: 'Enter a product name' - }, - description: { - type: String, - required: 'Enter a description' - }, - category: { - type: String - }, - price: { - type: Number - }, - created_date: { - type: Date, - default: Date.now - } -}); - - -const Product = mongoose.model('Product', ProductSchema); -let watch2; -beforeEach((done) => { - watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); - watch2.save() - .then(() => done()) - .catch((err) => { - console.error("Handling promise rejection", err); - }); -}); - -describe('Creating documents', () => { - it('Create the model and schema @create-model', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }) - - it('creates controler for route @create-controler', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }) - - it('creates a new product @create-product', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); -}); - - -describe('Pulling products', () => { - it('Add controler to pull a list of items @controler-lists', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }) - - it('Add route to pull a list of items @route-lists', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); -}); - -describe('Find a single product', () => { - it('Add controler to pull a single item @controler-single', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }) - - it('Add route to pull a single item @route-single', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); -}); - - -describe('Updating a product', () => { - it('Add a controler to update a product @controler-update', (done) => { - Product.findOneAndUpdate({name: 'Old Watch'}, {name: 'Updated Watch'}, { new: true, useFindAndModify: false }) - .then((product) => { - assert(product.name === 'Updated Watch'); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }) - done(); - }) - - it('Add a controler to update a product @route-update', (done) => { - Product.findOneAndUpdate({name: 'Old Watch'}, {name: 'Updated Watch'}, { new: true, useFindAndModify: false }) - .then((product) => { - assert(product.name === 'Updated Watch'); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }) - done(); - }) -}) - - -describe('Deleting a product', () => { - it('Add a controler to remove a product @controler-remove', (done) => { - let belt = new Product({ name: 'New belt', description: 'a new belt' }); - belt.save(); - Product.findOneAndDelete({_id: belt._id}) - .then((product) => { - assert(product === null); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }) - done(); - }) - - it('Add a route to remove a product @route-remove', (done) => { - let belt = new Product({ name: 'New belt', description: 'a new belt' }); - belt.save(); - Product.findOneAndDelete({_id: belt._id}) - .then((product) => { - assert(product === null); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }) - done(); - }) -}) diff --git a/test/test_db.js b/test/test_db.js deleted file mode 100644 index 68466d2..0000000 --- a/test/test_db.js +++ /dev/null @@ -1,12 +0,0 @@ -const mongoose = require('mongoose'); - -mongoose.Promise = global.Promise; -mongoose.connect('mongodb://mongo:27017', { - useNewUrlParser: true, - useUnifiedTopology: true -}); -mongoose.connection - .once('open', () => console.log('DB Connected!')) - .on('error', (error) => { - console.warn('Error : ',error); -}); diff --git a/test/test_util.js b/test/test_util.js new file mode 100644 index 0000000..4bf2fb9 --- /dev/null +++ b/test/test_util.js @@ -0,0 +1,27 @@ +const mongoose = require("mongoose"); + +const ProductSchema = new mongoose.Schema({ + name: { + type: String, + required: 'Enter a product name' + }, + description: { + type: String, + required: 'Enter a description' + }, + category: { + type: String + }, + price: { + type: Number + }, + created_date: { + type: Date, + default: Date.now + } +}); + + +const Product = mongoose.model('Product', ProductSchema); + +module.exports = Product; From 8c66ab3845b100cdddddb4aab2e4e2698a376870 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Fri, 27 Mar 2020 10:32:06 -0400 Subject: [PATCH 14/19] testing updated --- package-lock.json | 343 +++---------------------------- package.json | 6 +- test/module2/test_server.spec.js | 26 ++- test/module3/add_single.spec.js | 75 +++---- test/module4/pull_list.spec.js | 47 ++--- test/module4/pull_single.spec.js | 52 ++--- test/module5/delete_item.spec.js | 53 +++-- test/module5/update_item.spec.js | 38 ++++ test/test_util.js | 27 --- 9 files changed, 190 insertions(+), 477 deletions(-) create mode 100644 test/module5/update_item.spec.js delete mode 100644 test/test_util.js diff --git a/package-lock.json b/package-lock.json index 51dca54..f2830eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,17 +18,6 @@ "negotiator": "0.6.2" } }, - "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -108,19 +97,6 @@ "dev": true, "optional": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -135,11 +111,6 @@ "dev": true, "optional": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -147,15 +118,13 @@ "dev": true, "optional": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } }, "babel-cli": { "version": "6.26.0", @@ -2170,14 +2139,6 @@ } } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", @@ -2341,11 +2302,6 @@ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2482,14 +2438,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2584,7 +2532,9 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true }, "create-error-class": { "version": "3.0.2", @@ -2609,14 +2559,6 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -2709,11 +2651,6 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2751,15 +2688,6 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2962,11 +2890,6 @@ } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -3009,21 +2932,6 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -3091,6 +2999,29 @@ "is-buffer": "~2.0.3" } }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3108,21 +3039,6 @@ "for-in": "^1.0.1" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3182,14 +3098,6 @@ "dev": true, "optional": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -3293,20 +3201,6 @@ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3449,16 +3343,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3734,11 +3618,6 @@ "has-symbols": "^1.0.1" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3768,11 +3647,6 @@ "isarray": "1.0.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -3788,49 +3662,18 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "kareem": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", @@ -4323,11 +4166,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4582,11 +4420,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picomatch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", @@ -4643,26 +4476,11 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" - }, "pstree.remy": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -4888,33 +4706,6 @@ "is-finite": "^1.0.0" } }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5308,22 +5099,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -5487,41 +5262,12 @@ "nopt": "~1.0.10" } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5653,14 +5399,6 @@ "xdg-basedir": "^3.0.0" } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -5701,11 +5439,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", @@ -5720,16 +5453,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/package.json b/package.json index b7c62a3..bc22c68 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mongo_nodejs", - "version": "1.0.0", + "version": "1.1.0", "description": "Mongo with NodeJS", "main": "index.js", "scripts": { @@ -14,13 +14,13 @@ "author": "Emmanuel Henri", "license": "ISC", "dependencies": { + "axios": "^0.19.2", "body-parser": "^1.19.0", "expect.js": "^0.3.1", "express": "^4.17.1", "mocha": "^7.0.1", "mongoose": "^5.8.11", - "nodemon": "^2.0.2", - "request": "^2.88.0" + "nodemon": "^2.0.2" }, "devDependencies": { "babel-cli": "^6.26.0", diff --git a/test/module2/test_server.spec.js b/test/module2/test_server.spec.js index d4c2403..a7340fd 100644 --- a/test/module2/test_server.spec.js +++ b/test/module2/test_server.spec.js @@ -1,22 +1,26 @@ -const request = require("request"); +const axios = require("axios"); const expect = require("expect.js"); const base_url = "http://localhost:4000/" describe("Server Running", function() { describe("GET /", function() { - it("returns status code 200 @connection", function(done) { - request.get(base_url, function(error, response, body) { - expect(response.statusCode).to.be(200); - done(); - }); + it("returns status code 200 @connection", (done) => { + axios.get(base_url) + .then((response) => { + expect(response.status).to.be(200) + done(); + }) + .catch((error) => done(error)); }); - it("returns Store server running message", function(done) { - request.get(base_url, function(error, response, body) { - expect(body).to.be("Store server running on port 4000"); - done(); - }); + it("returns Store server running message", (done) => { + axios.get(base_url) + .then((response) => { + expect(response.data).to.be("Store server running on port 4000") + done(); + }) + .catch((error) => done(error)); }); }); }); diff --git a/test/module3/add_single.spec.js b/test/module3/add_single.spec.js index 204237c..8782a3a 100644 --- a/test/module3/add_single.spec.js +++ b/test/module3/add_single.spec.js @@ -1,52 +1,43 @@ -const assert = require("assert"); -const Product = require("../test_util.js"); +const axios = require("axios"); +const expect = require("expect.js"); describe('Creating documents', () => { - let watch2; - - before((done) => { - watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); - watch2.save() - .then(() => done()) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); + const url = 'http://localhost:4000/products'; - it('Create the model and schema @create-model', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + it('Create the model and schema @model-create', (done) => { + let watch = { name: 'Old Watch', description: 'a new watch' }; + + axios.post(url, watch) + .then((response) => { + expect(response.data.name).to.contain("Old Watch"); + done(); + }) + .catch((error) => done(error)); + done(); }) - it('creates controler for route @create-controler', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + it('creates controler for route @controller-create', (done) => { + let watch = { name: 'Old Watch', description: 'a new watch' }; + + axios.post(url, watch) + .then((response) => { + expect(response.data.name).to.contain("Old Watch"); + done(); + }) + .catch((error) => done(error)); + done(); }) - it('creates a new product @create-product', (done) => { - const watch = new Product({ name: 'New watch', description: 'a new watch' }); - watch.save() - .then(() => { - assert(!watch.isNew); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + it('creates a new product @route-create', (done) => { + let watch = { name: 'Old Watch', description: 'a new watch' }; + + axios.post(url, watch) + .then((response) => { + expect(response.data.name).to.contain("Old Watch"); + done(); + }) + .catch((error) => done(error)); + done(); }); }); diff --git a/test/module4/pull_list.spec.js b/test/module4/pull_list.spec.js index 812179d..5ffe312 100644 --- a/test/module4/pull_list.spec.js +++ b/test/module4/pull_list.spec.js @@ -1,37 +1,26 @@ -const assert = require("assert"); -const Product = require("../test_util.js"); +const axios = require("axios"); +const expect = require("expect.js"); describe('Pulling products', () => { - let watch2; - - before((done) => { - watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); - watch2.save() - .then(() => done()) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); + const url = 'http://localhost:4000/products'; - it('Add controler to pull a list of items @controler-lists', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + it('Add controler to pull a list of items @controller-lists', (done) => { + axios.get(url) + .then((response) => { + expect(response.data).to.be.an("array") + done(); + }) + .catch((error) => done(error)); + done(); }) it('Add route to pull a list of items @route-lists', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); - done(); - }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + axios.get(url) + .then((response) => { + expect(response.data).to.be.an("array") + done(); + }) + .catch((error) => done(error)); + done(); }); }); diff --git a/test/module4/pull_single.spec.js b/test/module4/pull_single.spec.js index 9d286d2..6706f28 100644 --- a/test/module4/pull_single.spec.js +++ b/test/module4/pull_single.spec.js @@ -1,37 +1,37 @@ -const assert = require("assert"); -const Product = require("../test_util.js"); +const expect = require("expect.js"); +const axios = require("axios"); describe('Find a single product', () => { - let watch2; - - before((done) => { - watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); - watch2.save() - .then(() => done()) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); + const url = 'http://localhost:4000/products'; - it('Add controler to pull a single item @controler-single', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); + it('Add controler to pull a single item @controller-single', (done) => { + let watch = { name: 'Blue Watch', description: 'a new watch' }; + + axios.post(url, watch) + .then((response) => { + axios.get(`${url}/${response.data._id}`) + .then((response) => { + expect(response.data.name).to.contain("Blue Watch"); done(); }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); + }) + .catch((error) => done(error)); + done(); }) it('Add route to pull a single item @route-single', (done) => { - Product.findOne({ name: 'Old Watch' }) - .then(() => { - assert(watch2.name === 'Old Watch'); + let watch = { name: 'Red Watch', description: 'a new watch' }; + + axios.post(url, watch) + .then((response) => { + axios.get(`${url}/${response.data._id}`) + .then((response) => { + expect(response.data.name).to.contain("Red Watch"); done(); }) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); + }) + .catch((error) => done(error)); + done(); + }) + }); diff --git a/test/module5/delete_item.spec.js b/test/module5/delete_item.spec.js index 8ffa560..c815182 100644 --- a/test/module5/delete_item.spec.js +++ b/test/module5/delete_item.spec.js @@ -1,41 +1,36 @@ -const assert = require("assert"); -const Product = require("../test_util.js"); +const expect = require("expect.js"); +const axios = require("axios"); describe('Deleting a product', () => { - let watch2; - - before((done) => { - watch2 = new Product({ name: 'Old Watch', description: 'a new watch' }); - watch2.save() - .then(() => done()) - .catch((err) => { - console.error("Handling promise rejection", err); - }); - }); + const url = 'http://localhost:4000/products'; - it('Add a controler to remove a product @controler-remove', (done) => { - let belt = new Product({ name: 'New belt', description: 'a new belt' }); - belt.save(); - Product.findOneAndDelete({_id: belt._id}) - .then((product) => { - assert(product === null); - }) - .catch((err) => { - console.error("Handling promise rejection", err); + it('Add a controler to remove a product @controller-remove', (done) => { + let belt = { name: 'New belt', description: 'a new belt' }; + + axios.post(url, belt) + .then((response) => { + axios.delete(`${url}/${response.data._id}`) + .then((response) => { + expect(response.data.message).to.be("successfully deleted product") + }) + done(); }) + .catch((error) => done(error)); done(); }) it('Add a route to remove a product @route-remove', (done) => { - let belt = new Product({ name: 'New belt', description: 'a new belt' }); - belt.save(); - Product.findOneAndDelete({_id: belt._id}) - .then((product) => { - assert(product === null); - }) - .catch((err) => { - console.error("Handling promise rejection", err); + let shoes = { name: 'New Shoes', description: 'new shoes' }; + + axios.post(url, shoes) + .then((response) => { + axios.delete(`${url}/${response.data._id}`) + .then((response) => { + expect(response.data.message).to.be("successfully deleted product") + }) + done(); }) + .catch((error) => done(error)); done(); }) }) diff --git a/test/module5/update_item.spec.js b/test/module5/update_item.spec.js new file mode 100644 index 0000000..41275f3 --- /dev/null +++ b/test/module5/update_item.spec.js @@ -0,0 +1,38 @@ +const expect = require("expect.js"); +const axios = require("axios"); + +describe('Updating a product', () => { + const url = 'http://localhost:4000/products'; + + it('Add a controler to update a product @controller-update', (done) => { + let cup = { name: 'Big Cup', description: 'a new cup' }; + let updatedCup = { name: 'Big Blue Cup', description: 'a new cup' }; + + axios.post(url, cup) + .then((response) => { + axios.put(`${url}/${response.data._id}`, updatedCup) + .then((response) => { + expect(response.data.name).to.contain("Big Blue Cup") + done() + }) + }) + .catch((error) => done(error)); + done(); + }) + + it('Add a controler to update a product @route-update', (done) => { + let cup = { name: 'Big Cup', description: 'a new cup' }; + let updatedCup = { name: 'Big Blue Cup', description: 'a new cup' }; + + axios.post(url, cup) + .then((response) => { + axios.put(`${url}/${response.data._id}`, updatedCup) + .then((response) => { + expect(response.data.name).to.contain("Big Blue Cup") + done() + }) + }) + .catch((error) => done(error)); + done(); + }) +}) diff --git a/test/test_util.js b/test/test_util.js deleted file mode 100644 index 4bf2fb9..0000000 --- a/test/test_util.js +++ /dev/null @@ -1,27 +0,0 @@ -const mongoose = require("mongoose"); - -const ProductSchema = new mongoose.Schema({ - name: { - type: String, - required: 'Enter a product name' - }, - description: { - type: String, - required: 'Enter a description' - }, - category: { - type: String - }, - price: { - type: Number - }, - created_date: { - type: Date, - default: Date.now - } -}); - - -const Product = mongoose.model('Product', ProductSchema); - -module.exports = Product; From b863e67f92cdd8ff900d23adf0e8fa886fd0f2c3 Mon Sep 17 00:00:00 2001 From: Manny Henri Date: Mon, 30 Mar 2020 10:18:02 -0400 Subject: [PATCH 15/19] tests updated --- package-lock.json | 33 +---------------------- package.json | 1 - test/module2/test_mongoose.spec.js | 24 ++++++++--------- test/module2/test_server.spec.js | 34 +++++++++-------------- test/module3/add_single.spec.js | 43 ++++++++++-------------------- test/module4/pull_list.spec.js | 26 +++++++----------- test/module4/pull_single.spec.js | 37 +++++++------------------ test/module5/delete_item.spec.js | 36 +++++++------------------ test/module5/update_item.spec.js | 36 +++++-------------------- 9 files changed, 73 insertions(+), 197 deletions(-) diff --git a/package-lock.json b/package-lock.json index f2830eb..3a03d6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "mongo_nodejs", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -118,14 +118,6 @@ "dev": true, "optional": true }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "requires": { - "follow-redirects": "1.5.10" - } - }, "babel-cli": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", @@ -2999,29 +2991,6 @@ "is-buffer": "~2.0.3" } }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", diff --git a/package.json b/package.json index bc22c68..e552d51 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "author": "Emmanuel Henri", "license": "ISC", "dependencies": { - "axios": "^0.19.2", "body-parser": "^1.19.0", "expect.js": "^0.3.1", "express": "^4.17.1", diff --git a/test/module2/test_mongoose.spec.js b/test/module2/test_mongoose.spec.js index 1d1c699..29e00b8 100644 --- a/test/module2/test_mongoose.spec.js +++ b/test/module2/test_mongoose.spec.js @@ -1,18 +1,16 @@ -const mongoose = require('mongoose'); +const fs = require('fs'); +const expect = require('expect.js'); -mongoose.Promise = global.Promise; +describe("Mongo tests @mongo", function () { + it("Mongoose promise", function (done) { + expect(fs.readFileSync('index.js').toString()) + .to.contain("mongoose.Promise = global.Promise;") + done(); + }) -describe("Mongo tests", function() { - it("Database connected @mongo", function(done) { - mongoose.connect('mongodb://localhost/productsdb', { - useNewUrlParser: true, - useUnifiedTopology: true - }); - mongoose.connection - .once('open', () => console.log('DB Connected!')) - .on('error', (error) => { - console.warn('Error : ',error); - }); + it("Mongoose connected", function (done) { + expect(fs.readFileSync('index.js').toString()) + .to.contain("mongoose.connect('mongodb://localhost/productsdb'") done(); }); }); diff --git a/test/module2/test_server.spec.js b/test/module2/test_server.spec.js index a7340fd..0691ae8 100644 --- a/test/module2/test_server.spec.js +++ b/test/module2/test_server.spec.js @@ -1,26 +1,16 @@ -const axios = require("axios"); -const expect = require("expect.js"); +const fs = require('fs'); +const expect = require('expect.js'); -const base_url = "http://localhost:4000/" +describe("Server tests", function () { + it("returns status code 200 @connection", function (done) { + expect(fs.readFileSync('index.js').toString()) + .to.contain("res.send(`Store server running on port ${PORT}`)") + done(); + }) -describe("Server Running", function() { - describe("GET /", function() { - it("returns status code 200 @connection", (done) => { - axios.get(base_url) - .then((response) => { - expect(response.status).to.be(200) - done(); - }) - .catch((error) => done(error)); - }); - - it("returns Store server running message", (done) => { - axios.get(base_url) - .then((response) => { - expect(response.data).to.be("Store server running on port 4000") - done(); - }) - .catch((error) => done(error)); - }); + it("returns Store server running message", function (done) { + expect(fs.readFileSync('index.js').toString()) + .to.contain("console.log(`Your server is running on port ${PORT}`)") + done(); }); }); diff --git a/test/module3/add_single.spec.js b/test/module3/add_single.spec.js index 8782a3a..8ac73fa 100644 --- a/test/module3/add_single.spec.js +++ b/test/module3/add_single.spec.js @@ -1,43 +1,28 @@ -const axios = require("axios"); -const expect = require("expect.js"); +const fs = require('fs'); +const expect = require('expect.js'); describe('Creating documents', () => { - const url = 'http://localhost:4000/products'; - it('Create the model and schema @model-create', (done) => { - let watch = { name: 'Old Watch', description: 'a new watch' }; - - axios.post(url, watch) - .then((response) => { - expect(response.data.name).to.contain("Old Watch"); - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/models/models.js').toString()) + .to.contain("export const ProductSchema = new Schema({") + expect(fs.readFileSync('src/models/models.js').toString()) + .to.contain("const Schema = mongoose.Schema;") done(); }) it('creates controler for route @controller-create', (done) => { - let watch = { name: 'Old Watch', description: 'a new watch' }; - - axios.post(url, watch) - .then((response) => { - expect(response.data.name).to.contain("Old Watch"); - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("export const addnewProduct = (req, res) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("newProduct.save((err, Product) => {") done(); }) it('creates a new product @route-create', (done) => { - let watch = { name: 'Old Watch', description: 'a new watch' }; - - axios.post(url, watch) - .then((response) => { - expect(response.data.name).to.contain("Old Watch"); - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain("app.route('/products')") + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".post(addnewProduct);") done(); }); }); - diff --git a/test/module4/pull_list.spec.js b/test/module4/pull_list.spec.js index 5ffe312..e9aa254 100644 --- a/test/module4/pull_list.spec.js +++ b/test/module4/pull_list.spec.js @@ -1,26 +1,18 @@ -const axios = require("axios"); -const expect = require("expect.js"); +const fs = require('fs'); +const expect = require('expect.js'); describe('Pulling products', () => { - const url = 'http://localhost:4000/products'; - it('Add controler to pull a list of items @controller-lists', (done) => { - axios.get(url) - .then((response) => { - expect(response.data).to.be.an("array") - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("export const getProducts = (req, res) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.find({}, (err, Product) => {") done(); }) it('Add route to pull a list of items @route-lists', (done) => { - axios.get(url) - .then((response) => { - expect(response.data).to.be.an("array") - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".get(getProducts)") done(); - }); + }) }); diff --git a/test/module4/pull_single.spec.js b/test/module4/pull_single.spec.js index 6706f28..8ed88d8 100644 --- a/test/module4/pull_single.spec.js +++ b/test/module4/pull_single.spec.js @@ -1,37 +1,20 @@ -const expect = require("expect.js"); -const axios = require("axios"); +const fs = require('fs'); +const expect = require('expect.js'); describe('Find a single product', () => { - const url = 'http://localhost:4000/products'; - it('Add controler to pull a single item @controller-single', (done) => { - let watch = { name: 'Blue Watch', description: 'a new watch' }; - - axios.post(url, watch) - .then((response) => { - axios.get(`${url}/${response.data._id}`) - .then((response) => { - expect(response.data.name).to.contain("Blue Watch"); - done(); - }) - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("export const getProductWithID = (req, res) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.findById(req.params.ProductID, (err, Product) => {") done(); }) it('Add route to pull a single item @route-single', (done) => { - let watch = { name: 'Red Watch', description: 'a new watch' }; - - axios.post(url, watch) - .then((response) => { - axios.get(`${url}/${response.data._id}`) - .then((response) => { - expect(response.data.name).to.contain("Red Watch"); - done(); - }) - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain("app.route('/products/:ProductID')") + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".get(getProductWithID)") done(); }) - }); diff --git a/test/module5/delete_item.spec.js b/test/module5/delete_item.spec.js index c815182..6f42d08 100644 --- a/test/module5/delete_item.spec.js +++ b/test/module5/delete_item.spec.js @@ -1,36 +1,18 @@ -const expect = require("expect.js"); -const axios = require("axios"); +const fs = require('fs'); +const expect = require('expect.js'); describe('Deleting a product', () => { - const url = 'http://localhost:4000/products'; - it('Add a controler to remove a product @controller-remove', (done) => { - let belt = { name: 'New belt', description: 'a new belt' }; - - axios.post(url, belt) - .then((response) => { - axios.delete(`${url}/${response.data._id}`) - .then((response) => { - expect(response.data.message).to.be("successfully deleted product") - }) - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.deleteOne({ _id: req.params.ProductID}, (err, Product) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("res.json({ message: 'successfully deleted product'});") done(); }) it('Add a route to remove a product @route-remove', (done) => { - let shoes = { name: 'New Shoes', description: 'new shoes' }; - - axios.post(url, shoes) - .then((response) => { - axios.delete(`${url}/${response.data._id}`) - .then((response) => { - expect(response.data.message).to.be("successfully deleted product") - }) - done(); - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".delete(deleteProduct);") done(); }) -}) +}); diff --git a/test/module5/update_item.spec.js b/test/module5/update_item.spec.js index 41275f3..da47c0f 100644 --- a/test/module5/update_item.spec.js +++ b/test/module5/update_item.spec.js @@ -1,38 +1,16 @@ -const expect = require("expect.js"); -const axios = require("axios"); +const fs = require('fs'); +const expect = require('expect.js'); describe('Updating a product', () => { - const url = 'http://localhost:4000/products'; - it('Add a controler to update a product @controller-update', (done) => { - let cup = { name: 'Big Cup', description: 'a new cup' }; - let updatedCup = { name: 'Big Blue Cup', description: 'a new cup' }; - - axios.post(url, cup) - .then((response) => { - axios.put(`${url}/${response.data._id}`, updatedCup) - .then((response) => { - expect(response.data.name).to.contain("Big Blue Cup") - done() - }) - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.findOneAndUpdate({ _id: req.params.ProductID}, req.body, { new: true, useFindAndModify: false }, (err, Product)") done(); }) it('Add a controler to update a product @route-update', (done) => { - let cup = { name: 'Big Cup', description: 'a new cup' }; - let updatedCup = { name: 'Big Blue Cup', description: 'a new cup' }; - - axios.post(url, cup) - .then((response) => { - axios.put(`${url}/${response.data._id}`, updatedCup) - .then((response) => { - expect(response.data.name).to.contain("Big Blue Cup") - done() - }) - }) - .catch((error) => done(error)); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".put(updateProduct)") done(); }) -}) +}); From 54b3e574658692b423f30a91de188d4e99f45b65 Mon Sep 17 00:00:00 2001 From: Manny Henri Date: Mon, 30 Mar 2020 14:38:26 -0400 Subject: [PATCH 16/19] updating error messages --- test/module2/test_mongoose.spec.js | 19 ++++++++++---- test/module2/test_server.spec.js | 21 +++++++++++----- test/module3/add_main_folders.spec.js | 11 +++++--- test/module3/add_single.spec.js | 36 ++++++++++++++++++--------- test/module4/pull_list.spec.js | 22 +++++++++++----- test/module4/pull_single.spec.js | 28 +++++++++++++-------- test/module5/delete_item.spec.js | 26 +++++++++++++------ test/module5/update_item.spec.js | 17 ++++++++++--- 8 files changed, 126 insertions(+), 54 deletions(-) diff --git a/test/module2/test_mongoose.spec.js b/test/module2/test_mongoose.spec.js index 29e00b8..b0c11a6 100644 --- a/test/module2/test_mongoose.spec.js +++ b/test/module2/test_mongoose.spec.js @@ -3,15 +3,24 @@ const expect = require('expect.js'); describe("Mongo tests @mongo", function () { it("Mongoose promise", function (done) { - expect(fs.readFileSync('index.js').toString()) + try { + expect(fs.readFileSync('index.js').toString()) .to.contain("mongoose.Promise = global.Promise;") - done(); - }) + done(); + } + catch(error) { + done(new Error("No mongo promise in your code")); + } + }); it("Mongoose connected", function (done) { - expect(fs.readFileSync('index.js').toString()) + try { + expect(fs.readFileSync('index.js').toString()) .to.contain("mongoose.connect('mongodb://localhost/productsdb'") - done(); + done(); + } catch (error) { + done(new Error("No connection to Mongo detected")); + } }); }); diff --git a/test/module2/test_server.spec.js b/test/module2/test_server.spec.js index 0691ae8..dd7de5e 100644 --- a/test/module2/test_server.spec.js +++ b/test/module2/test_server.spec.js @@ -3,14 +3,23 @@ const expect = require('expect.js'); describe("Server tests", function () { it("returns status code 200 @connection", function (done) { - expect(fs.readFileSync('index.js').toString()) - .to.contain("res.send(`Store server running on port ${PORT}`)") - done(); + try { + expect(fs.readFileSync('index.js').toString()) + .to.contain("res.send(`Store server running on port ${PORT}`)") + done(); + } catch (error) { + done(new Error("No response to GET call in your code")); + } + }) it("returns Store server running message", function (done) { - expect(fs.readFileSync('index.js').toString()) - .to.contain("console.log(`Your server is running on port ${PORT}`)") - done(); + try { + expect(fs.readFileSync('index.js').toString()) + .to.contain("console.log(`Your server is running on port ${PORT}`)") + done(); + } catch (error) { + done(new Error("No server logs when starting the server")); + } }); }); diff --git a/test/module3/add_main_folders.spec.js b/test/module3/add_main_folders.spec.js index 4e4d6d9..4afe165 100644 --- a/test/module3/add_main_folders.spec.js +++ b/test/module3/add_main_folders.spec.js @@ -4,8 +4,13 @@ const assert = require("assert"); describe('Folder structure is completed', () => { it('The proper files exist in their respective folders @folders', () => { - assert(fs.existsSync(path.join(process.cwd(), 'src/controllers/controllers.js')), 'The controller file does not exist.'); - assert(fs.existsSync(path.join(process.cwd(), 'src/models/models.js')), 'The Model file does not exist.'); - assert(fs.existsSync(path.join(process.cwd(), 'src/routes/routes.js')), 'The Routes file does not exist.'); + try { + assert(fs.existsSync(path.join(process.cwd(), 'src/controllers/controllers.js')), 'The controller file does not exist.'); + assert(fs.existsSync(path.join(process.cwd(), 'src/models/models.js')), 'The Model file does not exist.'); + assert(fs.existsSync(path.join(process.cwd(), 'src/routes/routes.js')), 'The Routes file does not exist.'); + } catch (error) { + done(new Error("Can't detect the folders and files requested")); + } + }); }); \ No newline at end of file diff --git a/test/module3/add_single.spec.js b/test/module3/add_single.spec.js index 8ac73fa..88adfcf 100644 --- a/test/module3/add_single.spec.js +++ b/test/module3/add_single.spec.js @@ -3,26 +3,38 @@ const expect = require('expect.js'); describe('Creating documents', () => { it('Create the model and schema @model-create', (done) => { - expect(fs.readFileSync('src/models/models.js').toString()) + try { + expect(fs.readFileSync('src/models/models.js').toString()) .to.contain("export const ProductSchema = new Schema({") - expect(fs.readFileSync('src/models/models.js').toString()) - .to.contain("const Schema = mongoose.Schema;") - done(); + expect(fs.readFileSync('src/models/models.js').toString()) + .to.contain("const Schema = mongoose.Schema;") + done(); + } catch (error) { + done(new Error("No schema detected in your code")); + } }) it('creates controler for route @controller-create', (done) => { - expect(fs.readFileSync('src/controllers/controllers.js').toString()) + try { + expect(fs.readFileSync('src/controllers/controllers.js').toString()) .to.contain("export const addnewProduct = (req, res) => {") - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("newProduct.save((err, Product) => {") - done(); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("newProduct.save((err, Product) => {") + done(); + } catch (error) { + done(new Error("No controllers for POST endpoint detected")); + } }) it('creates a new product @route-create', (done) => { - expect(fs.readFileSync('src/routes/routes.js').toString()) + try { + expect(fs.readFileSync('src/routes/routes.js').toString()) .to.contain("app.route('/products')") - expect(fs.readFileSync('src/routes/routes.js').toString()) - .to.contain(".post(addnewProduct);") - done(); + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".post(addnewProduct);") + done(); + } catch (error) { + done(new Error("No routes for POST endpoint detected")); + } }); }); diff --git a/test/module4/pull_list.spec.js b/test/module4/pull_list.spec.js index e9aa254..05fa96b 100644 --- a/test/module4/pull_list.spec.js +++ b/test/module4/pull_list.spec.js @@ -3,16 +3,26 @@ const expect = require('expect.js'); describe('Pulling products', () => { it('Add controler to pull a list of items @controller-lists', (done) => { - expect(fs.readFileSync('src/controllers/controllers.js').toString()) + try { + expect(fs.readFileSync('src/controllers/controllers.js').toString()) .to.contain("export const getProducts = (req, res) => {") - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("Product.find({}, (err, Product) => {") - done(); + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.find({}, (err, Product) => {") + done(); + } catch (error) { + done(new Error("No controllers for GET endpoint detected")); + } + }) it('Add route to pull a list of items @route-lists', (done) => { - expect(fs.readFileSync('src/routes/routes.js').toString()) + try { + expect(fs.readFileSync('src/routes/routes.js').toString()) .to.contain(".get(getProducts)") - done(); + done(); + } catch (error) { + done(new Error("No routes for GET endpoint detected")); + } + }) }); diff --git a/test/module4/pull_single.spec.js b/test/module4/pull_single.spec.js index 8ed88d8..4997548 100644 --- a/test/module4/pull_single.spec.js +++ b/test/module4/pull_single.spec.js @@ -3,18 +3,26 @@ const expect = require('expect.js'); describe('Find a single product', () => { it('Add controler to pull a single item @controller-single', (done) => { - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("export const getProductWithID = (req, res) => {") - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("Product.findById(req.params.ProductID, (err, Product) => {") - done(); + try { + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("export const getProductWithID = (req, res) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.findById(req.params.ProductID, (err, Product) => {") + done(); + } catch (error) { + done(new Error("No controllers for GET specific ID endpoint detected")); + } }) it('Add route to pull a single item @route-single', (done) => { - expect(fs.readFileSync('src/routes/routes.js').toString()) - .to.contain("app.route('/products/:ProductID')") - expect(fs.readFileSync('src/routes/routes.js').toString()) - .to.contain(".get(getProductWithID)") - done(); + try { + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain("app.route('/products/:ProductID')") + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".get(getProductWithID)") + done(); + } catch (error) { + done(new Error("No routes for GET endpoint detected")); + } }) }); diff --git a/test/module5/delete_item.spec.js b/test/module5/delete_item.spec.js index 6f42d08..19124db 100644 --- a/test/module5/delete_item.spec.js +++ b/test/module5/delete_item.spec.js @@ -3,16 +3,26 @@ const expect = require('expect.js'); describe('Deleting a product', () => { it('Add a controler to remove a product @controller-remove', (done) => { - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("Product.deleteOne({ _id: req.params.ProductID}, (err, Product) => {") - expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("res.json({ message: 'successfully deleted product'});") - done(); + try { + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("Product.deleteOne({ _id: req.params.ProductID}, (err, Product) => {") + expect(fs.readFileSync('src/controllers/controllers.js').toString()) + .to.contain("res.json({ message: 'successfully deleted product'});") + done(); + } catch (error) { + done(new Error("No controllers for DELETE endpoint detected")); + } }) it('Add a route to remove a product @route-remove', (done) => { - expect(fs.readFileSync('src/routes/routes.js').toString()) - .to.contain(".delete(deleteProduct);") - done(); + try { + expect(fs.readFileSync('src/routes/routes.js').toString()) + .to.contain(".delete(deleteProduct);") + done(); + + } catch (error) { + done(new Error("No routes for DELETE endpoint detected")); + } + }) }); diff --git a/test/module5/update_item.spec.js b/test/module5/update_item.spec.js index da47c0f..4c34398 100644 --- a/test/module5/update_item.spec.js +++ b/test/module5/update_item.spec.js @@ -3,14 +3,23 @@ const expect = require('expect.js'); describe('Updating a product', () => { it('Add a controler to update a product @controller-update', (done) => { - expect(fs.readFileSync('src/controllers/controllers.js').toString()) + try { + expect(fs.readFileSync('src/controllers/controllers.js').toString()) .to.contain("Product.findOneAndUpdate({ _id: req.params.ProductID}, req.body, { new: true, useFindAndModify: false }, (err, Product)") - done(); + done(); + } catch (error) { + done(new Error("No controllers for PUT endpoint detected")); + } + }) it('Add a controler to update a product @route-update', (done) => { - expect(fs.readFileSync('src/routes/routes.js').toString()) + try { + expect(fs.readFileSync('src/routes/routes.js').toString()) .to.contain(".put(updateProduct)") - done(); + done(); + } catch (error) { + done(new Error("No routes for PUT endpoint detected")); + } }) }); From 4aeacd0648664d15cc2f7c03cff8e296ac8e2f38 Mon Sep 17 00:00:00 2001 From: Manny Henri Date: Mon, 30 Mar 2020 14:43:31 -0400 Subject: [PATCH 17/19] Update add_main_folders.spec.js --- test/module3/add_main_folders.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/module3/add_main_folders.spec.js b/test/module3/add_main_folders.spec.js index 4afe165..0789f66 100644 --- a/test/module3/add_main_folders.spec.js +++ b/test/module3/add_main_folders.spec.js @@ -3,7 +3,7 @@ const path = require('path'); const assert = require("assert"); describe('Folder structure is completed', () => { - it('The proper files exist in their respective folders @folders', () => { + it('The proper files exist in their respective folders @folders', (done) => { try { assert(fs.existsSync(path.join(process.cwd(), 'src/controllers/controllers.js')), 'The controller file does not exist.'); assert(fs.existsSync(path.join(process.cwd(), 'src/models/models.js')), 'The Model file does not exist.'); From 5042c2d48535375d2172aee982bc5d85c6b9ae96 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Tue, 14 Apr 2020 14:53:28 -0400 Subject: [PATCH 18/19] updated folder tests --- test/module3/add_main_folders.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/module3/add_main_folders.spec.js b/test/module3/add_main_folders.spec.js index 0789f66..9179f9b 100644 --- a/test/module3/add_main_folders.spec.js +++ b/test/module3/add_main_folders.spec.js @@ -11,6 +11,6 @@ describe('Folder structure is completed', () => { } catch (error) { done(new Error("Can't detect the folders and files requested")); } - + done(); }); }); \ No newline at end of file From 666d41575b6c94595392a56823236b1dbf878f31 Mon Sep 17 00:00:00 2001 From: Emmanuel Henri Date: Fri, 1 May 2020 14:06:33 -0400 Subject: [PATCH 19/19] updated tests module 5 --- test/module5/delete_item.spec.js | 2 +- test/module5/update_item.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/module5/delete_item.spec.js b/test/module5/delete_item.spec.js index 19124db..c225848 100644 --- a/test/module5/delete_item.spec.js +++ b/test/module5/delete_item.spec.js @@ -7,7 +7,7 @@ describe('Deleting a product', () => { expect(fs.readFileSync('src/controllers/controllers.js').toString()) .to.contain("Product.deleteOne({ _id: req.params.ProductID}, (err, Product) => {") expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("res.json({ message: 'successfully deleted product'});") + .to.contain("res.json({ message: 'successfully deleted product' });") done(); } catch (error) { done(new Error("No controllers for DELETE endpoint detected")); diff --git a/test/module5/update_item.spec.js b/test/module5/update_item.spec.js index 4c34398..e2874b2 100644 --- a/test/module5/update_item.spec.js +++ b/test/module5/update_item.spec.js @@ -5,7 +5,7 @@ describe('Updating a product', () => { it('Add a controler to update a product @controller-update', (done) => { try { expect(fs.readFileSync('src/controllers/controllers.js').toString()) - .to.contain("Product.findOneAndUpdate({ _id: req.params.ProductID}, req.body, { new: true, useFindAndModify: false }, (err, Product)") + .to.contain("Product.findOneAndUpdate({ _id: req.params.ProductID }, req.body, { new: true, useFindAndModify: false }, (err, Product)") done(); } catch (error) { done(new Error("No controllers for PUT endpoint detected"));