From 294be49e8814a25c8e5e63d16f4f8e7831faf053 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Tue, 29 Oct 2019 23:45:24 +0100 Subject: [PATCH 01/10] WIP: test of some test frameworks --- package.json | 3 +++ test/testAds.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 test/testAds.js diff --git a/package.json b/package.json index 53106bd..b1cb2a9 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,12 @@ "passport-local": "^1.0.0" }, "devDependencies": { + "chai": "^4.2.0", + "chai-http": "^4.3.0", "eslint": "^6.6.0", "eslint-config-google": "^0.14.0", "http-errors": "^1.6.3", + "mocha": "^6.2.2", "prettier": "^1.18.2" } } diff --git a/test/testAds.js b/test/testAds.js new file mode 100644 index 0000000..de2e0bb --- /dev/null +++ b/test/testAds.js @@ -0,0 +1,45 @@ +process.env.NODE_ENV = 'test'; + +const mongoose = require('mongoose'); +const adModel = require('../models/ad'); + +const chai = require('chai'); +const chaiHttp = require('chai-http'); +const server = require('../app'); + +const should = chai.should(); + +require('dotenv').config(); + +mongoose.connect(process.env.DB_TEST_CONNECTION_STRING, { + useNewUrlParser: true, + useUnifiedTopology: true, +}); + +chai.use(chaiHttp); + +describe('Books', () => { + beforeEach((done) => { + adModel.remove({}, (err) => { + if (err) { + console.error(err); + } + + done(); + }); + }); + + // Requête de consultation des annonces + describe('/GET ads', () => { + it('Supposément obtient les annonces décrites ci-dessous', (done) => { + chai.request(server) + .get('/ads/') + .end((err, res) => { + res.should.have.status(200); + res.body.should.be.a('array'); + res.body.length.should.be.eql(0); + done(); + }); + }); + }); +}); -- GitLab From e298b34c448b7e622932db36d96ec72c0bcd824c Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Wed, 30 Oct 2019 21:31:05 +0100 Subject: [PATCH 02/10] tests done without authentification --- app.js | 4 +- package.json | 3 +- routes/ads.js | 23 ++++-- src/dbConnection.js | 0 test/testAds.js | 187 ++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 193 insertions(+), 24 deletions(-) create mode 100644 src/dbConnection.js diff --git a/app.js b/app.js index b6ecdad..0d5ce46 100644 --- a/app.js +++ b/app.js @@ -19,7 +19,9 @@ const mongoose = require('mongoose'); require('./src/helpers').addHelpers(); require('dotenv').config(); -mongoose.connect(process.env.DB_CONNECTION_STRING, { +const connectionString = + JSON.parse(process.env.DB_CONTEXT)[process.env.NODE_ENV || 'prod']; +mongoose.connect(connectionString, { useNewUrlParser: true, useUnifiedTopology: true, }); diff --git a/package.json b/package.json index b1cb2a9..b5516a2 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "node ./bin/www" + "start": "node ./bin/www", + "test": "mocha --exit" }, "dependencies": { "connect-flash": "^0.1.1", diff --git a/routes/ads.js b/routes/ads.js index bfba03e..a8df065 100644 --- a/routes/ads.js +++ b/routes/ads.js @@ -17,20 +17,22 @@ router.get('/create', function(req, res, next) { title: body.title, type: body.type, transactionStatus: body.transactionStatus, - price: body.price.replace(',', '.'), - published: body.published && true, + price: body.price && body.price.replace(',', '.'), + published: body.published === 'on', description: body.description, availabilityDate: body.availabilityDate === '' ? null : body.availabilityDate, }; + errCallback = (reason) => res.status(406).render('ad_create', reason); + if (id) { // Peut-être charger l'objet en amont et le retourner si erreur ? adModel.Ad.updateOne({_id: id}, {$set: formData}).exec() .then((value) => res.redirect('/ads/')) .catch((reason) => { - res.render('ad_create', reason); + errCallback(reason); }); } else { const newAd = new adModel.Ad(formData); @@ -38,8 +40,7 @@ router.get('/create', function(req, res, next) { newAd.save() .then((value) => res.redirect('/ads/')) .catch((reason) => { - console.log(reason); - res.render('ad_create', reason); + errCallback(reason); }); } }) @@ -63,6 +64,7 @@ router.get('/create', function(req, res, next) { }) .get('/update/:id', function(req, res, next) { const id = req.params.id; + let status; adModel.Ad.findOne({_id: id}, function(err, ad) { const errors = []; @@ -70,23 +72,30 @@ router.get('/create', function(req, res, next) { errors.push(err.message); } if (!ad) { + status = 404; errors.push('L\'annonce cherchée n\'a pas été trouvée'); + } else { + status = 200; } - res.render('ad_create', {ad: ad, errors_update: errors}); + res.status(status).render('ad_create', {ad: ad, errors_update: errors}); }); }) .delete('/delete/:id', function(req, res, next) { const id = req.params.id; + let status; adModel.Ad.deleteOne({_id: id}).exec() .then((value) => { + status = value.n === 0 ? 404 : 303; req.flash('success', 'L\'annonce a bien été supprimée'); }) .catch((reason) => { + // console.log(reason); + status = 500; req.flash('error', 'L\'annonce n\'a pas pu être supprimée'); }) - .finally(() => res.redirect(303, '/ads/')); + .finally(() => res.redirect(status, '/ads/')); }); module.exports = router; diff --git a/src/dbConnection.js b/src/dbConnection.js new file mode 100644 index 0000000..e69de29 diff --git a/test/testAds.js b/test/testAds.js index de2e0bb..bd3b138 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -1,26 +1,20 @@ -process.env.NODE_ENV = 'test'; - -const mongoose = require('mongoose'); const adModel = require('../models/ad'); const chai = require('chai'); const chaiHttp = require('chai-http'); -const server = require('../app'); +// mocha needs it const should = chai.should(); +process.env.NODE_ENV = 'test'; require('dotenv').config(); - -mongoose.connect(process.env.DB_TEST_CONNECTION_STRING, { - useNewUrlParser: true, - useUnifiedTopology: true, -}); +const server = require('../app'); chai.use(chaiHttp); -describe('Books', () => { - beforeEach((done) => { - adModel.remove({}, (err) => { +describe('Les annonces', () => { + before((done) => { + adModel.Ad.deleteMany({}, (err) => { if (err) { console.error(err); } @@ -30,14 +24,177 @@ describe('Books', () => { }); // Requête de consultation des annonces - describe('/GET ads', () => { + describe('Action de listing des annonces', () => { it('Supposément obtient les annonces décrites ci-dessous', (done) => { chai.request(server) .get('/ads/') + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + done(); + }); + }); + }); + + // Requêtes de création d'annonce + describe('Actions de création des annonces', () => { + it('Supposément obtient la page de création d\'annonce', (done) => { + chai.request(server) + .get('/ads/create') + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + done(); + }); + }); + + it('Supposément crée une annonce correcte', (done) => { + const formData = { + '_method': 'put', + 'title': 'Test', + 'type': adModel.AD_TYPE.VALUE.RENTAL, + 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, + 'price': '420,69', + 'published': undefined, + }; + + chai.request(server) + .post('/ads/create') + .type('form') + .send(formData) .end((err, res) => { res.should.have.status(200); - res.body.should.be.a('array'); - res.body.length.should.be.eql(0); + done(); + }); + }); + + it('Supposément rejette l\'annonce ' + + 'car il lui manque des champs requis', (done) => { + const formData = { + '_method': 'put', + 'title': 'Manque des champs obligatoires', + }; + + chai.request(server) + .post('/ads/create') + .type('form') + .send(formData) + .end((err, res) => { + res.should.be.html; + res.should.have.status(406); + done(); + }); + }); + + it('Supposément rejette l\'annonce ' + + 'car le champ price pas conforme', (done) => { + const formData = { + '_method': 'put', + 'title': 'Champ price pas conforme', + 'type': adModel.AD_TYPE.VALUE.RENTAL, + 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, + 'price': '99999,969', + 'published': 'on', + }; + + chai.request(server) + .post('/ads/create') + .type('form') + .send(formData) + .end((err, res) => { + res.should.be.html; + res.should.have.status(406); + done(); + }); + }); + + it('Supposément rejette l\'annonce ' + + 'car le champ price pas conforme', (done) => { + const formData = { + '_method': 'put', + 'title': 'Champ price pas conforme', + 'type': adModel.AD_TYPE.VALUE.RENTAL, + 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, + 'price': '99999,969', + 'published': 'on', + }; + + chai.request(server) + .post('/ads/create') + .type('form') + .send(formData) + .end((err, res) => { + res.should.be.html; + res.should.have.status(406); + done(); + }); + }); + }); + + // Requêtes de mise à jour d'annonce + describe('Action de mise à jour d\'annonce', (done) => { + it('Supposément me donne la page vu que l\'id existe', (done) => { + adModel.Ad.findOne({}).exec() + .then((value) => { + chai.request(server) + .get(`/ads/update/${value.id}`) + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + }); + }) + .catch((reason) => { + console.log(reason); + chai.assert(true); + }) + .finally(() => done()); + }); + + it('Supposément plante vu que l\'id existe pas en fait', (done) => { + chai.request(server) + .get(`/ads/update/5`) + .end((err, res) => { + res.should.be.html; + res.should.have.status(404); + done(); + }); + }); + }); + + // Requêtes de suppression d'annonce + describe('Action de suppression d\'annonce', (done) => { + it('Supposément plante vu que l\'id existe pas en fait', (done) => { + chai.request(server) + .delete(`/ads/delete/aaaaaaaaaaaaaaaaaaaaaaaa`) + .end((err, res) => { + res.should.have.status(404); + done(); + }); + }); + + it('Supposément supprime bien vu que l\'id existe', (done) => { + adModel.Ad.findOne({}).exec() + .then((value) => { + chai.request(server) + .delete(`/ads/delete/${value.id}`) + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + }); + }) + .catch((reason) => { + console.log(reason); + chai.assert(true); + }) + .finally(() => done()); + }); + + it('Supposément part en couille ' + + 'vu que l\'id est pas sous le bon format', (done) => { + chai.request(server) + .delete(`/ads/delete/5`) + .end((err, res) => { + res.should.have.status(500); done(); }); }); -- GitLab From 9600605295c499c04f462cae71fdca81946e830a Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Wed, 30 Oct 2019 23:54:27 +0100 Subject: [PATCH 03/10] WIP: testing, tentatives d'auth --- routes/auth.js | 6 +- src/dbConnection.js | 0 src/permissions.js | 4 +- test/testAds.js | 49 ++++++++++++---- test/testUsers.js | 138 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 181 insertions(+), 16 deletions(-) delete mode 100644 src/dbConnection.js create mode 100644 test/testUsers.js diff --git a/routes/auth.js b/routes/auth.js index 3f9267c..b3ce280 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -18,7 +18,7 @@ router .then((u) => { if (u) { req.flash('info', 'Cette adresse email est déjà prise'); - res.redirect('/register'); + res.redirect(409, '/register'); } else { const newUser = new users.User({ name: req.body.name, @@ -31,13 +31,13 @@ router }) .then( (u) => { - if (u) res.redirect('/login'); + if (u) res.redirect(200, '/login'); }, (err) => { Object.values(err.errors).forEach((err) => { return req.flash('info', err.message); }); - res.redirect('/register'); + res.redirect(400, '/register'); }, ) .catch(next); diff --git a/src/dbConnection.js b/src/dbConnection.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/permissions.js b/src/permissions.js index 266724e..c2a0fbb 100644 --- a/src/permissions.js +++ b/src/permissions.js @@ -20,7 +20,7 @@ function checkPermissions(level) { if (!requiredPermissionLevel) { console.error(`checkPermissions: Le rôle ${level} n'existe pas !`); req.flash('info', 'Erreur dev : Rôle non défini (' + level + ')'); - res.redirect('/'); + res.redirect(409, '/'); return; } @@ -34,7 +34,7 @@ function checkPermissions(level) { 'Vous n\'avez pas les autorisations requises' + ' pour accéder à cette ressource', ); - res.redirect('/'); + res.redirect(401, '/'); } else { next(); } diff --git a/test/testAds.js b/test/testAds.js index bd3b138..25a1e90 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -13,12 +13,39 @@ const server = require('../app'); chai.use(chaiHttp); describe('Les annonces', () => { + const agent = chai.request.agent(server); + const agentData = { + name: 'agent', + role: 'agent', + email: 'test@agent.test.fr', + password: 'Test123!', + }; + before((done) => { adModel.Ad.deleteMany({}, (err) => { if (err) { console.error(err); } + agent + .post('/register') + .send(agentData) + .end((err, res) => { + if (err) { + console.log(err); + } + }); + + agent + .post('/login') + .send({ + email: agentData.email, + password: agentData.password, + }) + .end((err, res) => { + res.should.have.cookie('sessionid'); + }); + done(); }); }); @@ -26,7 +53,7 @@ describe('Les annonces', () => { // Requête de consultation des annonces describe('Action de listing des annonces', () => { it('Supposément obtient les annonces décrites ci-dessous', (done) => { - chai.request(server) + agent .get('/ads/') .end((err, res) => { res.should.be.html; @@ -39,7 +66,7 @@ describe('Les annonces', () => { // Requêtes de création d'annonce describe('Actions de création des annonces', () => { it('Supposément obtient la page de création d\'annonce', (done) => { - chai.request(server) + agent .get('/ads/create') .end((err, res) => { res.should.be.html; @@ -58,7 +85,7 @@ describe('Les annonces', () => { 'published': undefined, }; - chai.request(server) + agent .post('/ads/create') .type('form') .send(formData) @@ -75,7 +102,7 @@ describe('Les annonces', () => { 'title': 'Manque des champs obligatoires', }; - chai.request(server) + agent .post('/ads/create') .type('form') .send(formData) @@ -97,7 +124,7 @@ describe('Les annonces', () => { 'published': 'on', }; - chai.request(server) + agent .post('/ads/create') .type('form') .send(formData) @@ -119,7 +146,7 @@ describe('Les annonces', () => { 'published': 'on', }; - chai.request(server) + agent .post('/ads/create') .type('form') .send(formData) @@ -136,7 +163,7 @@ describe('Les annonces', () => { it('Supposément me donne la page vu que l\'id existe', (done) => { adModel.Ad.findOne({}).exec() .then((value) => { - chai.request(server) + agent .get(`/ads/update/${value.id}`) .end((err, res) => { res.should.be.html; @@ -151,7 +178,7 @@ describe('Les annonces', () => { }); it('Supposément plante vu que l\'id existe pas en fait', (done) => { - chai.request(server) + agent .get(`/ads/update/5`) .end((err, res) => { res.should.be.html; @@ -164,7 +191,7 @@ describe('Les annonces', () => { // Requêtes de suppression d'annonce describe('Action de suppression d\'annonce', (done) => { it('Supposément plante vu que l\'id existe pas en fait', (done) => { - chai.request(server) + agent .delete(`/ads/delete/aaaaaaaaaaaaaaaaaaaaaaaa`) .end((err, res) => { res.should.have.status(404); @@ -175,7 +202,7 @@ describe('Les annonces', () => { it('Supposément supprime bien vu que l\'id existe', (done) => { adModel.Ad.findOne({}).exec() .then((value) => { - chai.request(server) + agent .delete(`/ads/delete/${value.id}`) .end((err, res) => { res.should.be.html; @@ -191,7 +218,7 @@ describe('Les annonces', () => { it('Supposément part en couille ' + 'vu que l\'id est pas sous le bon format', (done) => { - chai.request(server) + agent .delete(`/ads/delete/5`) .end((err, res) => { res.should.have.status(500); diff --git a/test/testUsers.js b/test/testUsers.js new file mode 100644 index 0000000..bc16b5b --- /dev/null +++ b/test/testUsers.js @@ -0,0 +1,138 @@ +const userModel = require('../models/user'); + +const chai = require('chai'); +const chaiHttp = require('chai-http'); + +// mocha needs it +const should = chai.should(); + +process.env.NODE_ENV = 'test'; +require('dotenv').config(); +const server = require('../app'); + +chai.use(chaiHttp); + +describe('Les utilisateurs', () => { + before((done) => { + userModel.User.deleteMany({}, (err) => { + if (err) { + console.error(err); + } + + done(); + }); + }); + + const clientData = { + name: 'Client', + role: 'client', + email: 'client.test@test.test', + password: '123mdr', + }; + + const agentData = { + name: 'Agent', + role: 'agent', + email: 'agent.test@test.test', + password: '123mdr', + }; + + // Requête de consultation des annonces + describe('Action de création d\'utilisateur', () => { + it('Supposément récupère la page de register', (done) => { + chai.request(server) + .get('/register') + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + done(); + }); + }); + + it('Supposément crée un user client', (done) => { + chai.request(server) + .post('/register') + .type('form') + .send(clientData) + .end((err, res) => { + res.should.have.status(200); + done(); + }); + }); + + it('Supposément crée un user agent', (done) => { + chai.request(server) + .post('/register') + .type('form') + .send(agentData) + .end((err, res) => { + res.should.have.status(200); + done(); + }); + }); + + it('Supposément refuse de créer car email existe déjà', (done) => { + chai.request(server) + .post('/register') + .type('form') + .send(agentData) + .end((err, res) => { + res.should.have.status(409); + done(); + }); + }); + + it('Supposément refuse de créer car email incorrect', (done) => { + agentData.email = 'null'; + + chai.request(server) + .post('/register') + .type('form') + .send(agentData) + .end((err, res) => { + res.should.have.status(400); + done(); + }); + }); + }); + + describe('Actions d\'authentification', () => { + it('Supposément récupère la page de register', (done) => { + chai.request(server) + .get('/login') + .end((err, res) => { + res.should.be.html; + res.should.have.status(200); + done(); + }); + }); + + it('Supposément se connecte avec un user client', (done) => { + chai.request(server) + .post('/login') + .type('form') + .send({ + email: clientData.email, + password: clientData.password, + }) + .end((err, res) => { + res.should.have.status(200); + done(); + }); + }); + + it('Supposément se connecte avec un user agent', (done) => { + chai.request(server) + .post('/login') + .type('form') + .send({ + email: agentData.email, + password: agentData.password, + }) + .end((err, res) => { + res.should.have.status(200); + done(); + }); + }); + }); +}); -- GitLab From a15411f04c1dbda20d3459beeb3b888a33958e42 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Wed, 30 Oct 2019 23:57:36 +0100 Subject: [PATCH 04/10] tg eslint --- test/testAds.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/testAds.js b/test/testAds.js index 25a1e90..78ea243 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -4,6 +4,7 @@ const chai = require('chai'); const chaiHttp = require('chai-http'); // mocha needs it +// eslint-disable-next-line no-unused-vars const should = chai.should(); process.env.NODE_ENV = 'test'; -- GitLab From 71600d1efd14202e77f93d567b1f991429355d2e Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Fri, 1 Nov 2019 16:42:35 +0100 Subject: [PATCH 05/10] WIP: testing encore --- test/{testUsers.js => .testUsers.js} | 39 +++++++++++++++++++++++- test/testAds.js | 45 +++++++++++++++------------- 2 files changed, 62 insertions(+), 22 deletions(-) rename test/{testUsers.js => .testUsers.js} (79%) diff --git a/test/testUsers.js b/test/.testUsers.js similarity index 79% rename from test/testUsers.js rename to test/.testUsers.js index bc16b5b..687e3cd 100644 --- a/test/testUsers.js +++ b/test/.testUsers.js @@ -12,6 +12,43 @@ const server = require('../app'); chai.use(chaiHttp); +describe('Role managment', () => { + const userData = { + name: 'test', + email: 'test.test@test.com', + role: userModel.USER_ROLE.AGENT, + password: 'testtest', + }; + + /** + * Registering an user before each test on this section + * The registered user will be used because this section + * works with authentication. + */ + + beforeEach(async () => { + await userModel.User.deleteMany({}).exec(); + + await chai.request(server) + .get('/logout'); + + await chai.request(server) + .post('/register') + .send(userData); + }); + + describe('Role managment page', () => { + it('should return 200 if the user is a superadmin', async () => { + const res = await chai.request(server) + .post('/login') + .send({username: userData.email, password: userData.password}).; + + console.log(res.); + }); + }); +}); + +/* describe('Les utilisateurs', () => { before((done) => { userModel.User.deleteMany({}, (err) => { @@ -135,4 +172,4 @@ describe('Les utilisateurs', () => { }); }); }); -}); +});*/ diff --git a/test/testAds.js b/test/testAds.js index 78ea243..4dd4949 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -1,4 +1,5 @@ const adModel = require('../models/ad'); +const userModel = require('../models/user'); const chai = require('chai'); const chaiHttp = require('chai-http'); @@ -13,6 +14,8 @@ const server = require('../app'); chai.use(chaiHttp); +let cookie; + describe('Les annonces', () => { const agent = chai.request.agent(server); const agentData = { @@ -22,33 +25,31 @@ describe('Les annonces', () => { password: 'Test123!', }; - before((done) => { - adModel.Ad.deleteMany({}, (err) => { + before(async () => { + await adModel.Ad.deleteMany({}, (err) => { if (err) { console.error(err); } + }).exec(); - agent - .post('/register') - .send(agentData) - .end((err, res) => { - if (err) { - console.log(err); - } - }); + await userModel.User.deleteMany({}, (err) => { + if (err) { + console.error(err); + } + }).exec(); - agent - .post('/login') - .send({ - email: agentData.email, - password: agentData.password, - }) - .end((err, res) => { - res.should.have.cookie('sessionid'); - }); + await agent + .post('/register') + .send(agentData); - done(); - }); + const cookies = await agent + .post('/login') + .send({ + username: agentData.email, + password: agentData.password, + }).cookies; + + cookie = cookies.split('=')[1]; }); // Requête de consultation des annonces @@ -56,6 +57,7 @@ describe('Les annonces', () => { it('Supposément obtient les annonces décrites ci-dessous', (done) => { agent .get('/ads/') + .set('Cookie', cookie) .end((err, res) => { res.should.be.html; res.should.have.status(200); @@ -69,6 +71,7 @@ describe('Les annonces', () => { it('Supposément obtient la page de création d\'annonce', (done) => { agent .get('/ads/create') + .set('Cookie', cookie) .end((err, res) => { res.should.be.html; res.should.have.status(200); -- GitLab From 89e90866f96ed3542e7bf5661c3f6fd9fa5fd0ef Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Fri, 1 Nov 2019 20:41:53 +0100 Subject: [PATCH 06/10] WIP: tests users ok, ads question/reponse a venir --- routes/auth.js | 26 +++++-- test/testAds.js | 64 ++++++++++++---- test/{.testUsers.js => testUsers.js} | 110 +++++++++++++++------------ 3 files changed, 130 insertions(+), 70 deletions(-) rename test/{.testUsers.js => testUsers.js} (64%) diff --git a/routes/auth.js b/routes/auth.js index b3ce280..f000b4e 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -45,13 +45,25 @@ router .get('/login', function(req, res, next) { res.render('login'); }) - .post( - '/login', - passport.authenticate('local', { - failureRedirect: '/login', - successRedirect: '/', - }), - ) + .post('/login', function(req, res, next) { + passport.authenticate('local', function(err, user, info) { + if (err) { + return next(err); + } + + if (!user) { + return res.redirect(406, '/login'); + } + + req.logIn(user, function(err) { + if (err) { + return next(err); + } + + return res.redirect(200, '/ads/'); + }); + })(req, res, next); + }) .get('/logout', function(req, res) { req.logout(); res.redirect('/'); diff --git a/test/testAds.js b/test/testAds.js index 4dd4949..f259dd9 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -14,8 +14,6 @@ const server = require('../app'); chai.use(chaiHttp); -let cookie; - describe('Les annonces', () => { const agent = chai.request.agent(server); const agentData = { @@ -42,14 +40,12 @@ describe('Les annonces', () => { .post('/register') .send(agentData); - const cookies = await agent + await agent .post('/login') .send({ username: agentData.email, password: agentData.password, - }).cookies; - - cookie = cookies.split('=')[1]; + }); }); // Requête de consultation des annonces @@ -57,8 +53,11 @@ describe('Les annonces', () => { it('Supposément obtient les annonces décrites ci-dessous', (done) => { agent .get('/ads/') - .set('Cookie', cookie) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(200); done(); @@ -71,8 +70,11 @@ describe('Les annonces', () => { it('Supposément obtient la page de création d\'annonce', (done) => { agent .get('/ads/create') - .set('Cookie', cookie) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(200); done(); @@ -94,6 +96,10 @@ describe('Les annonces', () => { .type('form') .send(formData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(200); done(); }); @@ -111,6 +117,10 @@ describe('Les annonces', () => { .type('form') .send(formData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(406); done(); @@ -133,6 +143,10 @@ describe('Les annonces', () => { .type('form') .send(formData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(406); done(); @@ -155,6 +169,10 @@ describe('Les annonces', () => { .type('form') .send(formData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(406); done(); @@ -167,17 +185,20 @@ describe('Les annonces', () => { it('Supposément me donne la page vu que l\'id existe', (done) => { adModel.Ad.findOne({}).exec() .then((value) => { + chai.assert.isTrue(value !== null); + agent .get(`/ads/update/${value.id}`) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(200); }); }) - .catch((reason) => { - console.log(reason); - chai.assert(true); - }) + .catch((reason) => chai.assert.fail(reason)) .finally(() => done()); }); @@ -185,6 +206,10 @@ describe('Les annonces', () => { agent .get(`/ads/update/5`) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(404); done(); @@ -198,6 +223,11 @@ describe('Les annonces', () => { agent .delete(`/ads/delete/aaaaaaaaaaaaaaaaaaaaaaaa`) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + res.should.be.text; res.should.have.status(404); done(); }); @@ -213,10 +243,7 @@ describe('Les annonces', () => { res.should.have.status(200); }); }) - .catch((reason) => { - console.log(reason); - chai.assert(true); - }) + .catch((reason) => chai.assert.fail(reason)) .finally(() => done()); }); @@ -225,6 +252,11 @@ describe('Les annonces', () => { agent .delete(`/ads/delete/5`) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + res.should.be.text; res.should.have.status(500); done(); }); diff --git a/test/.testUsers.js b/test/testUsers.js similarity index 64% rename from test/.testUsers.js rename to test/testUsers.js index 687e3cd..559dc0b 100644 --- a/test/.testUsers.js +++ b/test/testUsers.js @@ -4,6 +4,7 @@ const chai = require('chai'); const chaiHttp = require('chai-http'); // mocha needs it +// eslint-disable-next-line no-unused-vars const should = chai.should(); process.env.NODE_ENV = 'test'; @@ -12,43 +13,6 @@ const server = require('../app'); chai.use(chaiHttp); -describe('Role managment', () => { - const userData = { - name: 'test', - email: 'test.test@test.com', - role: userModel.USER_ROLE.AGENT, - password: 'testtest', - }; - - /** - * Registering an user before each test on this section - * The registered user will be used because this section - * works with authentication. - */ - - beforeEach(async () => { - await userModel.User.deleteMany({}).exec(); - - await chai.request(server) - .get('/logout'); - - await chai.request(server) - .post('/register') - .send(userData); - }); - - describe('Role managment page', () => { - it('should return 200 if the user is a superadmin', async () => { - const res = await chai.request(server) - .post('/login') - .send({username: userData.email, password: userData.password}).; - - console.log(res.); - }); - }); -}); - -/* describe('Les utilisateurs', () => { before((done) => { userModel.User.deleteMany({}, (err) => { @@ -80,6 +44,10 @@ describe('Les utilisateurs', () => { chai.request(server) .get('/register') .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(200); done(); @@ -92,8 +60,16 @@ describe('Les utilisateurs', () => { .type('form') .send(clientData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(200); - done(); + + userModel.User.findOne({email: clientData.email}).exec() + .then((value) => chai.assert.isTrue(value !== null)) + .catch((err) => chai.assert.fail(err)) + .finally(() => done()); }); }); @@ -103,8 +79,16 @@ describe('Les utilisateurs', () => { .type('form') .send(agentData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(200); - done(); + + userModel.User.findOne({email: agentData.email}).exec() + .then((value) => chai.assert.isTrue(value !== null)) + .catch((err) => chai.assert.fail(err)) + .finally(() => done()); }); }); @@ -114,12 +98,17 @@ describe('Les utilisateurs', () => { .type('form') .send(agentData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(409); done(); }); }); it('Supposément refuse de créer car email incorrect', (done) => { + const vraiEmail = agentData.email; agentData.email = 'null'; chai.request(server) @@ -127,17 +116,26 @@ describe('Les utilisateurs', () => { .type('form') .send(agentData) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(400); + agentData.email = vraiEmail; done(); }); }); }); describe('Actions d\'authentification', () => { - it('Supposément récupère la page de register', (done) => { + it('Supposément récupère la page de login', (done) => { chai.request(server) .get('/login') .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.be.html; res.should.have.status(200); done(); @@ -147,29 +145,47 @@ describe('Les utilisateurs', () => { it('Supposément se connecte avec un user client', (done) => { chai.request(server) .post('/login') - .type('form') .send({ - email: clientData.email, + username: clientData.email, password: clientData.password, }) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(200); done(); }); }); it('Supposément se connecte avec un user agent', (done) => { - chai.request(server) + const agent = chai.request.agent(server); + + agent .post('/login') - .type('form') .send({ - email: agentData.email, + username: agentData.email, password: agentData.password, }) .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + res.should.have.status(200); - done(); + res.should.be.text; + + agent.get('/ads/create').end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + res.should.be.html; + res.should.have.status(200); + done(); + }); }); }); }); -});*/ +}); -- GitLab From 18bd7d24588025e6657ef89ab2b0b953081b0a5d Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Fri, 1 Nov 2019 22:01:44 +0100 Subject: [PATCH 07/10] merge stp --- test/testAds.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/testAds.js b/test/testAds.js index 4b2a653..09bce8d 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -211,7 +211,7 @@ describe('Les annonces', () => { chai.assert.fail(err); } - res.should.be.html; + // res.should.be.html; res.should.have.status(404); done(); }); @@ -228,7 +228,6 @@ describe('Les annonces', () => { agent .get(`/ads/${value.id}`) .end((err, res) => { - console.log(err); if (err) { chai.assert.fail(err); } @@ -241,7 +240,7 @@ describe('Les annonces', () => { .finally(() => done()); }); - it('Supposément plante vu que l\'id existe pas en fait', (done) => { + it('Supposément plante vu que l\'id existe pas nique ta mère', (done) => { agent .get(`/ads/aaaaaaaaaaaaaaaaaaaaaaaa`) .end((err, res) => { @@ -249,8 +248,7 @@ describe('Les annonces', () => { chai.assert.fail(err); } - console.log(res.text); - // res.should.be.html; + res.should.be.text; res.should.have.status(404); done(); }); -- GitLab From 080d23975811bb0d2d1db1bd45536f4a46effc37 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Fri, 1 Nov 2019 22:47:05 +0100 Subject: [PATCH 08/10] =?UTF-8?q?mocha=20est=20un=20tr=C3=A8s=20mauvais=20?= =?UTF-8?q?module=20de=20test=20ajout=20d'un=20module=20de=20calcul=20de?= =?UTF-8?q?=20coverage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- package.json | 1 + test/testAds.js | 58 +++---------------------------------------------- 3 files changed, 6 insertions(+), 56 deletions(-) diff --git a/.gitignore b/.gitignore index 6efc65d..c1ac027 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ package-lock.json .env -.vscode/ \ No newline at end of file +.vscode/ +.nyc_output \ No newline at end of file diff --git a/package.json b/package.json index c7a6efb..2a1c8ad 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "eslint-config-google": "^0.14.0", "http-errors": "^1.6.3", "mocha": "^6.2.2", + "nyc": "^14.1.1", "prettier": "^1.18.2" } } diff --git a/test/testAds.js b/test/testAds.js index 09bce8d..8c6a559 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -182,7 +182,7 @@ describe('Les annonces', () => { }); // Requêtes de mise à jour d'annonce - describe('Action de mise à jour d\'annonce', (done) => { + describe('Action de mise à jour d\'annonce', () => { it('Supposément me donne la page vu que l\'id existe', (done) => { adModel.Ad.findOne({}).exec() .then((value) => { @@ -211,67 +211,15 @@ describe('Les annonces', () => { chai.assert.fail(err); } - // res.should.be.html; - res.should.have.status(404); - done(); - }); - }); - }); - - // Requête de lecture d'annonce - describe('Action de lecture d\'annonce', (done) => { - it('Supposément me donne l\'annonce vu qu\'elle existe', (done) => { - adModel.Ad.findOne({}).exec() - .then((value) => { - chai.assert.isTrue(value !== null); - - agent - .get(`/ads/${value.id}`) - .end((err, res) => { - if (err) { - chai.assert.fail(err); - } - - res.should.be.html; - res.should.have.status(200); - }); - }) - .catch((reason) => chai.assert.fail(reason)) - .finally(() => done()); - }); - - it('Supposément plante vu que l\'id existe pas nique ta mère', (done) => { - agent - .get(`/ads/aaaaaaaaaaaaaaaaaaaaaaaa`) - .end((err, res) => { - if (err) { - chai.assert.fail(err); - } - - res.should.be.text; + res.should.be.html; res.should.have.status(404); done(); }); }); - - it('Supposément part en couilles '+ - 'vu que l\'id est pas sous le bon format', (done) => { - agent - .get(`/ads/5`) - .end((err, res) => { - if (err) { - chai.assert.fail(err); - } - - res.should.be.text; - res.should.have.status(500); - done(); - }); - }); }); // Requêtes de suppression d'annonce - describe('Action de suppression d\'annonce', (done) => { + describe('Action de suppression d\'annonce', () => { it('Supposément plante vu que l\'id existe pas en fait', (done) => { agent .delete(`/ads/delete/aaaaaaaaaaaaaaaaaaaaaaaa`) -- GitLab From 472e9cdf6166d6f3c799fbcfc477d8a4cd187cf8 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Sun, 3 Nov 2019 17:57:58 +0100 Subject: [PATCH 09/10] =?UTF-8?q?ajout=C3=A9=20un=20html=20parser=20pour?= =?UTF-8?q?=20mieux=20tester=20refactor=20des=20tests=20pour=20ne=20plus?= =?UTF-8?q?=20utiliser=20la=20status=20plus=20de=20status=20personnalis?= =?UTF-8?q?=C3=A9=20sur=20redirections?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- routes/ads.js | 33 ++++++------ routes/auth.js | 11 ++-- src/permissions.js | 2 +- test/testAds.js | 131 ++++++++++++++++++++++++++++++++------------- test/testUsers.js | 13 +++-- 6 files changed, 129 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 2a1c8ad..9f405ba 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "start": "node ./bin/www", - "test": "mocha --exit" + "test": "mocha --exit --timeout 5000" }, "dependencies": { "connect-flash": "^0.1.1", @@ -17,6 +17,7 @@ "mongoose": "^5.7.6", "morgan": "~1.9.1", "multer": "^1.4.2", + "node-html-parser": "^1.1.16", "passport": "^0.4.0", "passport-local": "^1.0.0" }, diff --git a/routes/ads.js b/routes/ads.js index 6da0c60..7f8b76d 100644 --- a/routes/ads.js +++ b/routes/ads.js @@ -52,7 +52,9 @@ router.get('/create', authorize('agent'), function(req, res, next) { const newAd = new adModel.Ad(formData); newAd.save() - .then((value) => res.redirect('/ads/')) + .then((value) => { + res.redirect('/ads/'); + }) .catch((reason) => { errCallback(reason); }); @@ -76,7 +78,8 @@ router.get('/create', authorize('agent'), function(req, res, next) { req.flash('success', 'Mise à jour réussie !'); } - res.status(status).render('ads/create', {ad: ad, errors_update: errors}); + res.status(status) + .render('ads/create', {ad: ad, errors_update: errors}); }); }) .get('/delete/:id', authorize('agent'), deleteAdAction) @@ -97,17 +100,15 @@ router.get('/create', authorize('agent'), function(req, res, next) { }, ) .then((ad) => { - res.status(201); req.flash('success', 'Question publiée.'); res.redirect('/ads/' + ad.id); }) .catch((err) => { - console.error(err); req.flash( 'error', 'Une erreur est survenue lors du chargement des données.', ); - res.redirect('/ads/' + ad.id); + res.redirect(`/ads/${ad.id}`); }); }) .post( @@ -132,9 +133,8 @@ router.get('/create', authorize('agent'), function(req, res, next) { }, ) .then((ad) => { - res.status(201); req.flash('success', 'Réponse publiée.'); - res.redirect('/ads/' + ad.id); + res.redirect(201, `/ads/${ad.id}`); }) .catch((err) => { console.error(err); @@ -142,7 +142,7 @@ router.get('/create', authorize('agent'), function(req, res, next) { 'error', 'Une erreur est survenue lors du chargement des données.', ); - res.redirect('/ads/' + ad.id); + res.redirect(406, `/ads/${ad.id}`); }); }, ) @@ -202,15 +202,15 @@ function renderAdAction(published) { res.render('ads/show', {ad}); } else { req.flash('error', 'L\'annonce demandé n\'a pas été trouvé'); - res.redirect(404, '/'); + res.redirect('/'); } }) .catch((err) => { req.flash( - 'error', + 'log', 'Un problème est survenu lors du chargement des données', ); - res.redirect(500, '/'); + res.redirect('/'); }); }; } @@ -223,18 +223,19 @@ function renderAdAction(published) { */ function deleteAdAction(req, res, next) { const id = req.params.id; - let status; adModel.Ad.deleteOne({_id: id}) .then((value) => { - status = value.n === 0 ? 404 : 303; - req.flash('success', 'L\'annonce a bien été supprimée'); + if (value.n !== 0) { + req.flash('success', 'L\'annonce a bien été supprimée'); + } else { + req.flash('info', 'L\'annonce n\'a pas été trouvée'); + } }) .catch((reason) => { - status = 500; req.flash('error', 'L\'annonce n\'a pas pu être supprimée'); }) - .finally(() => res.redirect(status, '/ads/')); + .finally(() => res.redirect('/ads/')); } module.exports = router; diff --git a/routes/auth.js b/routes/auth.js index 41318d3..eff9aab 100644 --- a/routes/auth.js +++ b/routes/auth.js @@ -17,7 +17,7 @@ router .then((u) => { if (u) { req.flash('info', 'Cette adresse email est déjà prise'); - res.redirect(409, '/register'); + res.redirect('/register'); } else { const newUser = new users.User({ name: req.body.name, @@ -30,13 +30,13 @@ router }) .then( (u) => { - if (u) res.redirect(200, '/login'); + if (u) res.redirect('/login'); }, (err) => { Object.values(err.errors).forEach((err) => { return req.flash('info', err.message); }); - res.redirect(400, '/register'); + res.redirect('/register'); }, ) .catch(next); @@ -51,7 +51,8 @@ router } if (!user) { - return res.redirect(406, '/login'); + req.flash('error', 'Ce compte n\'est pas enregistré'); + return res.redirect('/login'); } req.logIn(user, function(err) { @@ -59,7 +60,7 @@ router return next(err); } - return res.redirect(200, '/ads/'); + return res.redirect('/ads/'); }); })(req, res, next); }) diff --git a/src/permissions.js b/src/permissions.js index 5377971..30eab4f 100644 --- a/src/permissions.js +++ b/src/permissions.js @@ -34,7 +34,7 @@ function authorize(level) { 'Vous n\'avez pas les autorisations requises' + ' pour accéder à cette ressource', ); - res.redirect(401, '/'); + res.redirect('/'); } else { next(); } diff --git a/test/testAds.js b/test/testAds.js index 8c6a559..4826681 100644 --- a/test/testAds.js +++ b/test/testAds.js @@ -3,6 +3,7 @@ const userModel = require('../models/user'); const chai = require('chai'); const chaiHttp = require('chai-http'); +const htmlParser = require('node-html-parser'); // mocha needs it // eslint-disable-next-line no-unused-vars @@ -48,6 +49,16 @@ describe('Les annonces', () => { }); }); + const formData = { + '_method': 'put', + 'title': 'Test', + 'type': adModel.AD_TYPE.VALUE.RENTAL, + 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, + 'price': '420,69', + 'published': undefined, + 'pictures': [], + }; + // Requête de consultation des annonces describe('Action de listing des annonces', () => { it('Supposément obtient les annonces décrites ci-dessous', (done) => { @@ -82,16 +93,6 @@ describe('Les annonces', () => { }); it('Supposément crée une annonce correcte', (done) => { - const formData = { - '_method': 'put', - 'title': 'Test', - 'type': adModel.AD_TYPE.VALUE.RENTAL, - 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, - 'price': '420,69', - 'published': undefined, - 'pictures': [], - }; - agent .post('/ads/create') .type('form') @@ -108,7 +109,7 @@ describe('Les annonces', () => { it('Supposément rejette l\'annonce ' + 'car il lui manque des champs requis', (done) => { - const formData = { + const formDataVide = { '_method': 'put', 'title': 'Manque des champs obligatoires', }; @@ -116,21 +117,20 @@ describe('Les annonces', () => { agent .post('/ads/create') .type('form') - .send(formData) + .send(formDataVide) .end((err, res) => { if (err) { chai.assert.fail(err); } res.should.be.html; - res.should.have.status(406); done(); }); }); it('Supposément rejette l\'annonce ' + 'car le champ price pas conforme', (done) => { - const formData = { + const formDataFaux = { '_method': 'put', 'title': 'Champ price pas conforme', 'type': adModel.AD_TYPE.VALUE.RENTAL, @@ -142,7 +142,7 @@ describe('Les annonces', () => { agent .post('/ads/create') .type('form') - .send(formData) + .send(formDataFaux) .end((err, res) => { if (err) { chai.assert.fail(err); @@ -153,29 +153,60 @@ describe('Les annonces', () => { done(); }); }); + }); + + // Requêtes liées aux questions/réponses + describe('Actions liées aux questions/réponses', () => { + const question = { + name: 'Yoann Eichelberge', + body: 'Y\'a pas d\'arraignéees, t\'es sûr ?', + }; + + let adId = 0; + agent.post('/ads/create').type('form').send(formData) + .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + adModel.Ad.findOne({}).exec() + .then((value) => { + adId = value && value.id; + }) + .catch((reason) => chai.assert.fail(reason)); + }); - it('Supposément rejette l\'annonce ' + - 'car le champ price pas conforme', (done) => { - const formData = { - '_method': 'put', - 'title': 'Champ price pas conforme', - 'type': adModel.AD_TYPE.VALUE.RENTAL, - 'transactionStatus': adModel.AD_TRANSACTIONSTATUS.VALUE.AVAILABLE, - 'price': '99999,969', - 'published': 'on', - }; + it('Supposément crée une question correcte', (done) => { agent - .post('/ads/create') - .type('form') - .send(formData) + .post(`/ads/${adId}/questions/create`) + .send(question) .end((err, res) => { if (err) { chai.assert.fail(err); } - res.should.be.html; - res.should.have.status(406); + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-success') !== null); + + done(); + }); + }); + + it('Supposément plante car question incorrecte', (done) => { + question.body = null; + + agent + .post(`/ads/${adId}/questions/create`) + .send(question) + .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-error') !== null); + done(); }); }); @@ -183,7 +214,7 @@ describe('Les annonces', () => { // Requêtes de mise à jour d'annonce describe('Action de mise à jour d\'annonce', () => { - it('Supposément me donne la page vu que l\'id existe', (done) => { + it('Supposément fais bien la mise à jour', (done) => { adModel.Ad.findOne({}).exec() .then((value) => { chai.assert.isTrue(value !== null); @@ -197,10 +228,27 @@ describe('Les annonces', () => { res.should.be.html; res.should.have.status(200); + + formData.title = 'Plus le même'; + formData['id'] = value.id; + + agent + .post('/ads/create') + .send(formData) + .end((err, res) => { + if (err) { + chai.assert.fail(err); + } + + const html = htmlParser.parse(res.text); + chai.assert.isTrue( + html.querySelector('div.msg-success') !== null, + ); + done(); + }); }); }) - .catch((reason) => chai.assert.fail(reason)) - .finally(() => done()); + .catch((reason) => chai.assert.fail(reason)); }); it('Supposément plante vu que l\'id existe pas en fait', (done) => { @@ -228,7 +276,9 @@ describe('Les annonces', () => { chai.assert.fail(err); } - res.should.have.status(404); + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-info') !== null); + done(); }); }); @@ -239,7 +289,14 @@ describe('Les annonces', () => { agent .delete(`/ads/delete/${value.id}`) .end((err, res) => { - res.should.have.status(200); + if (err) { + chai.assert.fail(err); + } + + const html = htmlParser.parse(res.text); + chai.assert.isTrue( + html.querySelector('div.msg-success') !== null, + ); }); }) .catch((reason) => chai.assert.fail(reason)) @@ -255,7 +312,9 @@ describe('Les annonces', () => { chai.assert.fail(err); } - res.should.have.status(500); + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-error') !== null); + done(); }); }); diff --git a/test/testUsers.js b/test/testUsers.js index 559dc0b..a3b25ff 100644 --- a/test/testUsers.js +++ b/test/testUsers.js @@ -2,6 +2,7 @@ const userModel = require('../models/user'); const chai = require('chai'); const chaiHttp = require('chai-http'); +const htmlParser = require('node-html-parser'); // mocha needs it // eslint-disable-next-line no-unused-vars @@ -93,7 +94,7 @@ describe('Les utilisateurs', () => { }); it('Supposément refuse de créer car email existe déjà', (done) => { - chai.request(server) + chai.request.agent(server) .post('/register') .type('form') .send(agentData) @@ -102,7 +103,8 @@ describe('Les utilisateurs', () => { chai.assert.fail(err); } - res.should.have.status(409); + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-info') !== null); done(); }); }); @@ -111,7 +113,7 @@ describe('Les utilisateurs', () => { const vraiEmail = agentData.email; agentData.email = 'null'; - chai.request(server) + chai.request.agent(server) .post('/register') .type('form') .send(agentData) @@ -120,7 +122,9 @@ describe('Les utilisateurs', () => { chai.assert.fail(err); } - res.should.have.status(400); + const html = htmlParser.parse(res.text); + chai.assert.isTrue(html.querySelector('div.msg-info') !== null); + agentData.email = vraiEmail; done(); }); @@ -174,7 +178,6 @@ describe('Les utilisateurs', () => { } res.should.have.status(200); - res.should.be.text; agent.get('/ads/create').end((err, res) => { if (err) { -- GitLab From ae83486b9cf6517998f93ac0f2fdfb1a27bef3d0 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Sun, 3 Nov 2019 20:36:01 +0100 Subject: [PATCH 10/10] =?UTF-8?q?en=20fait=20c'est=20une=20d=C3=A9pedance?= =?UTF-8?q?=20de=20dev=20d=C3=A9so?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f405ba..8a9d8a1 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "mongoose": "^5.7.6", "morgan": "~1.9.1", "multer": "^1.4.2", - "node-html-parser": "^1.1.16", "passport": "^0.4.0", "passport-local": "^1.0.0" }, @@ -28,6 +27,7 @@ "eslint-config-google": "^0.14.0", "http-errors": "^1.6.3", "mocha": "^6.2.2", + "node-html-parser": "^1.1.16", "nyc": "^14.1.1", "prettier": "^1.18.2" } -- GitLab