From 286dadf93a22eeab68b567463714e90f8a80b309 Mon Sep 17 00:00:00 2001 From: v123582 Date: Fri, 7 Aug 2020 12:50:14 +0800 Subject: [PATCH 1/4] A17-test --- tests/A17.test.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 tests/A17.test.js diff --git a/tests/A17.test.js b/tests/A17.test.js new file mode 100644 index 0000000..94c3238 --- /dev/null +++ b/tests/A17.test.js @@ -0,0 +1,82 @@ +const assert = require('assert') +const moment = require('moment') +const chai = require('chai') +const request = require('supertest') +const sinon = require('sinon') +const should = chai.should() +const { expect } = require('chai') + +const app = require('../app') +const routes = require('../routes/index') +const db = require('../models') +const helpers = require('../_helpers'); + +describe('# A17: 使用者權限管理', function() { + + context('# [顯示使用者清單]', () => { + before(async() => { + this.ensureAuthenticated = sinon.stub( + helpers, 'ensureAuthenticated' + ).returns(true); + this.getUser = sinon.stub( + helpers, 'getUser' + ).returns({id: 1, isAdmin: true}); + + await db.User.destroy({where: {},truncate: true}) + await db.User.create({name: 'User1'}) + }) + + it(" GET /admin/users ", (done) => { + request(app) + .get('/admin/users') + .end(function(err, res) { + res.text.should.include('User1') + done() + }); + }); + + after(async () => { + this.ensureAuthenticated.restore(); + this.getUser.restore(); + await db.User.destroy({where: {},truncate: true}) + }) + + }) + + context('# [修改使用者權限]', () => { + before(async() => { + this.ensureAuthenticated = sinon.stub( + helpers, 'ensureAuthenticated' + ).returns(true); + this.getUser = sinon.stub( + helpers, 'getUser' + ).returns({id: 1, isAdmin: true}); + + await db.User.destroy({where: {},truncate: true}) + await db.User.create({name: 'User1', isAdmin: false}) + }) + + it(" PUT /admin/users/:id ", (done) => { + db.User.findByPk(1).then(user => { + user.isAdmin.should.equal(false); + request(app) + .put('/admin/users/1') + .send({isAdmin: 'true'}) + .end(function(err, res) { + db.User.findByPk(1).then(user => { + user.name.should.equal('User1'); + user.isAdmin.should.equal(true); + return done(); + }) + }); + }) + }); + + after(async () => { + this.ensureAuthenticated.restore(); + this.getUser.restore(); + await db.User.destroy({where: {},truncate: true}) + }) + + }) +}) \ No newline at end of file From d3b765f6a039d0c76177b3db7862fa8a6f58a186 Mon Sep 17 00:00:00 2001 From: v123582 Date: Fri, 7 Aug 2020 12:50:29 +0800 Subject: [PATCH 2/4] A19-test --- tests/A19.test.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tests/A19.test.js diff --git a/tests/A19.test.js b/tests/A19.test.js new file mode 100644 index 0000000..23e9747 --- /dev/null +++ b/tests/A19.test.js @@ -0,0 +1,114 @@ +const assert = require('assert') +const moment = require('moment') +const chai = require('chai') +const request = require('supertest') +const sinon = require('sinon') +const should = chai.should() +const { expect } = require('chai') + +const app = require('../app') +const routes = require('../routes/index') +const db = require('../models') +const helpers = require('../_helpers'); + +describe('# A19: 建立 User Profile', function() { + + context('# [瀏覽 Profile]', () => { + before(async() => { + this.ensureAuthenticated = sinon.stub( + helpers, 'ensureAuthenticated' + ).returns(true); + this.getUser = sinon.stub( + helpers, 'getUser' + ).returns({id: 1, Followings: []}); + + await db.User.destroy({where: {},truncate: true}) + await db.User.create({name: 'User1'}) + }) + + it(" GET /users/:id ", (done) => { + request(app) + .get('/users/1') + .end(function(err, res) { + res.text.should.include('User1') + done() + }); + }); + + after(async () => { + this.ensureAuthenticated.restore(); + this.getUser.restore(); + await db.User.destroy({where: {},truncate: true}) + }) + + }) + + context('# [瀏覽編輯 Profile 頁面]', () => { + before(async() => { + this.ensureAuthenticated = sinon.stub( + helpers, 'ensureAuthenticated' + ).returns(true); + this.getUser = sinon.stub( + helpers, 'getUser' + ).returns({id: 1}); + + await db.User.destroy({where: {},truncate: true}) + await db.User.create({name: 'User1'}) + }) + + it(" GET /users/:id/edit ", (done) => { + db.User.findByPk(1).then(user => { + user.isAdmin.should.equal(false); + request(app) + .get('/users/1/edit') + .end(function(err, res) { + db.User.findByPk(1).then(user => { + user.name.should.equal('User1'); + return done(); + }) + }); + }) + }); + + after(async () => { + this.ensureAuthenticated.restore(); + this.getUser.restore(); + await db.User.destroy({where: {},truncate: true}) + }) + + }) + + context('# [編輯 Profile]', () => { + before(async() => { + this.ensureAuthenticated = sinon.stub( + helpers, 'ensureAuthenticated' + ).returns(true); + this.getUser = sinon.stub( + helpers, 'getUser' + ).returns({id: 1}); + + await db.User.destroy({where: {},truncate: true}) + await db.User.create({name: 'User1'}) + }) + + it(" PUT /users/:id ", (done) => { + request(app) + .put('/users/1') + .send({name: 'User1User1'}) + .end(function(err, res) { + db.User.findByPk(1).then(user => { + user.name.should.equal('User1User1'); + return done(); + }) + }); + }); + + after(async () => { + this.ensureAuthenticated.restore(); + this.getUser.restore(); + await db.User.destroy({where: {},truncate: true}) + }) + + }) + +}) \ No newline at end of file From 53aa1df339a2528c9172c4753c9b83e7600fbc1b Mon Sep 17 00:00:00 2001 From: v123582 Date: Tue, 11 Aug 2020 16:44:57 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=20A17=20=E7=9A=84?= =?UTF-8?q?=E5=85=A7=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/routes.js b/routes/routes.js index 2bc5e7c..859faa5 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -61,7 +61,7 @@ router.put('/admin/restaurants/:id', authenticatedAdmin, upload.single('image'), router.delete('/admin/restaurants/:id', authenticatedAdmin, adminController.deleteRestaurant) router.get('/admin/users', authenticatedAdmin, adminController.getUsers) -// router.put('/admin/users/:id', authenticatedAdmin, adminController.putUsers) +router.put('/admin/users/:id', authenticatedAdmin, adminController.putUsers) router.get('/admin/categories', authenticatedAdmin, categoryController.getCategories) router.post('/admin/categories', authenticatedAdmin, categoryController.postCategory) From acede5777ac50488fde98d10ffe2d11890c8624b Mon Sep 17 00:00:00 2001 From: v123582 Date: Tue, 11 Aug 2020 16:51:14 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=20A19=20=E7=9A=84?= =?UTF-8?q?=E5=85=A7=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/routes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/routes.js b/routes/routes.js index 859faa5..ae124d2 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -41,8 +41,8 @@ router.delete('/comments/:id', authenticatedAdmin, commentController.deleteComme router.get('/users/top', authenticated, userController.getTopUser) router.get('/users/:id', authenticated, userController.getUser) -// router.get('/users/:id/edit', authenticated, userController.editUser) -// router.put('/users/:id', authenticated, upload.single('image'), userController.putUser) +router.get('/users/:id/edit', authenticated, userController.editUser) +router.put('/users/:id', authenticated, upload.single('image'), userController.putUser) router.post('/favorite/:restaurantId', authenticated, userController.addFavorite) router.delete('/favorite/:restaurantId', authenticated, userController.removeFavorite) router.post('/like/:restaurantId', authenticated, userController.addLike)