diff --git a/controllers/apis/user-controller.js b/controllers/apis/user-controller.js index 90d70ae2f0..5bc073629d 100644 --- a/controllers/apis/user-controller.js +++ b/controllers/apis/user-controller.js @@ -6,18 +6,18 @@ const { Op } = require("sequelize"); const userController = { signUp: (req, res, next) => { if (req.body.password !== req.body.checkPassword) throw new Error('Passwords do not match!') - User.findOne( { where: { [Op.or]: [{email: req.body.email} , {account: req.body.account}] } } ) - .then(user => { - if(user===null) user=[] - - if (user.account===req.body.account) throw new Error('account 已重複註冊!') - else if (user.email===req.body.email) throw new Error('email 已重複註冊!') - + User.findOne({ where: { [Op.or]: [{ email: req.body.email }, { account: req.body.account }] } }) + .then(user => { + if (user === null) user = [] + + if (user.account === req.body.account) throw new Error('account 已重複註冊!') + else if (user.email === req.body.email) throw new Error('email 已重複註冊!') + return bcrypt.hash(req.body.password, 10) }) .then(hash => User.create({ - account:req.body.account, + account: req.body.account, name: req.body.name, email: req.body.email, role: 'user', @@ -53,10 +53,6 @@ const userController = { }, getUser: (req, res, next) => { const userId = req.params.id - // let tweetsCount=0 - // let likesCount=0 - // let followerCount=0 - // let followingCount=0 User.findByPk(req.params.id, {}) .then(user => { @@ -64,51 +60,34 @@ const userController = { return user }) .then(user => { - Promise.all([ - Tweet.findAll({where: {userId } }), - Like.findAll({ where: { userId } }), - Followship.findAll({ where: { followerId:userId } }), - Followship.findAll({ where: { followingId:userId } }) - ]) - .then(([tweetAll, likeAll,followerAll,followingAll]) => { - const tweetsCount=Object.keys(tweetAll).length - const likesCount=Object.keys(likeAll).length - const followerCount=Object.keys(followerAll).length - const followingCount=Object.keys(followingAll).length - console.log("===///////==",user,tweetsCount) - // - user=user.toJSON() - delete user.password - console.log("///////",tweetsCount) - user["followersCount"] = followerCount - user["followingCount"] = followingCount - user["likesCount"] = likesCount - user["tweetsCount"] = tweetsCount - return res.json({ - status: 'success', - message: '查詢成功!', - ...user - }) - //console.log("0000",likesCount,"0000") - //console.log("00000" ,typeof(tweetAll) ,tweetAll,"00000" ) - //console.log("11111" ,typeof(likeAll) ,likeAll,"11111" ) - //return tweetsCount,likesCount,followerCount,followingCount + Promise.all([ + Tweet.findAll({ where: { userId } }), + Like.findAll({ where: { userId } }), + Followship.findAll({ where: { followerId: userId } }), + Followship.findAll({ where: { followingId: userId } }) + ]) + .then(([tweetAll, likeAll, followerAll, followingAll]) => { + const tweetsCount = Object.keys(tweetAll).length + const likesCount = Object.keys(likeAll).length + const followerCount = Object.keys(followerAll).length + const followingCount = Object.keys(followingAll).length + //console.log("===///////==",user,tweetsCount) + + user = user.toJSON() + delete user.password + //console.log("///////",tweetsCount) + user["followersCount"] = followerCount + user["followingCount"] = followingCount + user["likesCount"] = likesCount + user["tweetsCount"] = tweetsCount + return res.json({ + status: 'success', + message: '查詢成功!', + ...user + }) }) - return user + return user }) - // .then(user => { - // user=user.toJSON() - // console.log("///////",tweetsCount) - // user["followersCount"] = followerCount - // user["followingCount"] = followingCount - // user["likesCount"] = likesCount - // user["tweetsCount"] = tweetsCount - // return res.json({ - // status: 'success', - // message: '查詢成功!', - // ...user - // }) - // }) .catch(err => next(err)) }, diff --git a/middleware/api-auth.js b/middleware/api-auth.js index 4cde563967..f3c6f9d082 100644 --- a/middleware/api-auth.js +++ b/middleware/api-auth.js @@ -1,12 +1,17 @@ const passport = require('../config/passport') // 引入 passport const helpers = require('../_helpers') -const authenticated = passport.authenticate('jwt', { session: false }) +//const authenticated = passport.authenticate('jwt', { session: false }) +const authenticated = (req, res, next) => { + passport.authenticate('jwt', { session: false }, (err, user) => { + if (err || !user) return res.status(401).json({ status: 'error', message: 'unauthorized' }) + next() + })(req, res, next) +} const authenticatedAdmin = (req, res, next) => { - //console.log("999999",helpers.getUser(req),"999999") - if (helpers.getUser(req).role==='admin' ) return next() - //if (helpers.getUser(req) ) return next() + if (helpers.getUser(req).role === 'admin') return next() return res.status(403).json({ status: 'error', message: 'permission denied' }) } + module.exports = { authenticated, authenticatedAdmin diff --git a/routes/apis/index.js b/routes/apis/index.js index a9915775b6..1a6113b568 100644 --- a/routes/apis/index.js +++ b/routes/apis/index.js @@ -5,7 +5,7 @@ const admin = require('./modules/admin') const userController = require('../../controllers/apis/user-controller') const { authenticated, authenticatedAdmin } = require('../../middleware/api-auth') const { apiErrorHandler } = require('../../middleware/error-handler') -router.use('/admin', authenticated, authenticatedAdmin, admin) +router.use('/admin', authenticatedAdmin, admin) router.post('/signin', passport.authenticate('local', { session: false }), userController.signIn) router.get('/users/:id', authenticated, userController.getUser) diff --git a/test/requests/user.spec.js b/test/requests/user.spec.js index e19d5e4229..78eb15e599 100644 --- a/test/requests/user.spec.js +++ b/test/requests/user.spec.js @@ -13,10 +13,10 @@ describe('# user requests', () => { context('# POST ', () => { describe('POST /api/users', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) @@ -27,7 +27,7 @@ describe('# user requests', () => { .send('account=User1&name=User1&email=User1@example.com&password=User1&checkPassword=User1') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); // 檢查是否有成功新增資料到資料庫裡 db.User.findByPk(1).then(user => { @@ -41,7 +41,7 @@ describe('# user requests', () => { after(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) @@ -53,22 +53,22 @@ describe('# user requests', () => { context('# GET ', () => { describe('GET /users/:id', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.User.create({account: 'User2', name: 'User2', email: 'User2', password: 'User2'}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.User.create({ account: 'User2', name: 'User2', email: 'User2', password: 'User2' }) }) @@ -78,7 +78,7 @@ describe('# user requests', () => { .get('/api/users/1') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); // 檢查是否回傳資料裡有 root 的資料 res.body.name.should.equal('root'); @@ -92,7 +92,7 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) @@ -100,23 +100,23 @@ describe('# user requests', () => { describe('GET /users/:id/tweets', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.Tweet.create({UserId: 1, description: 'User1 的 Tweet1'}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.Tweet.create({ UserId: 1, description: 'User1 的 Tweet1' }) }) // GET /users/:id/tweets - 看見某使用者發過的推文 @@ -125,7 +125,7 @@ describe('# user requests', () => { .get('/api/users/1/tweets') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); expect(res.body).to.be.an('array'); @@ -141,33 +141,33 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) }); describe('GET /users/:id/replied_tweets', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Reply.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Reply.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.Tweet.create({UserId: 1, description: 'User1 的 Tweet1'}) - await db.Reply.create({UserId: 1, TweetId: 1, comment: 'Tweet1 的 comment'}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.Tweet.create({ UserId: 1, description: 'User1 的 Tweet1' }) + await db.Reply.create({ UserId: 1, TweetId: 1, comment: 'Tweet1 的 comment' }) }) // GET /users/:id/replied_tweets - 看見某使用者發過回覆的推文 @@ -176,7 +176,7 @@ describe('# user requests', () => { .get('/api/users/1/replied_tweets') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); expect(res.body).to.be.an('array'); @@ -192,35 +192,35 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Reply.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Reply.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) }); describe('GET /users/:id/likes', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Like.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Like.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.User.create({account: 'User2', name: 'User2', email: 'User2', password: 'User2'}) - await db.Tweet.create({UserId: 2, description: 'User2 的 Tweet1'}) - await db.Like.create({UserId: 1, TweetId: 1}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.User.create({ account: 'User2', name: 'User2', email: 'User2', password: 'User2' }) + await db.Tweet.create({ UserId: 2, description: 'User2 的 Tweet1' }) + await db.Like.create({ UserId: 1, TweetId: 1 }) }) // GET /users/:id/likes - 看見某使用者點過的 Like @@ -229,7 +229,7 @@ describe('# user requests', () => { .get('/api/users/1/likes') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); expect(res.body).to.be.an('array'); // 檢查回傳資料是否有 TweetId = 1 @@ -244,9 +244,9 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Like.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Like.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) @@ -254,24 +254,24 @@ describe('# user requests', () => { describe('GET /users/:id/followings', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Followship.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Followship.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.User.create({account: 'User2', name: 'User2', email: 'User2', password: 'User2'}) - await db.Followship.create({followerId: 1, followingId: 2}) + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.User.create({ account: 'User2', name: 'User2', email: 'User2', password: 'User2' }) + await db.Followship.create({ followerId: 1, followingId: 2 }) }) // GET /users/:id/followings - 看見某使用者跟隨中的人 @@ -280,7 +280,7 @@ describe('# user requests', () => { .get('/api/users/1/followings') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); expect(res.body).to.be.an('array'); @@ -296,34 +296,34 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Followship.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Followship.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) }); describe('GET /users/:id/followers', () => { - before(async() => { + before(async () => { // 清除測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Followship.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Followship.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1'}) - await db.User.create({account: 'User2', name: 'User2', email: 'User2', password: 'User2'}) - await db.Followship.create({followerId: 1, followingId: 2}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1' }) + await db.User.create({ account: 'User2', name: 'User2', email: 'User2', password: 'User2' }) + await db.Followship.create({ followerId: 1, followingId: 2 }) }) // GET /users/:id/followers - 看見某使用者的跟隨者 @@ -332,7 +332,7 @@ describe('# user requests', () => { .get('/api/users/2/followers') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); expect(res.body).to.be.an('array'); @@ -348,9 +348,9 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) - await db.Tweet.destroy({where: {},truncate: true, force: true}) - await db.Followship.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) + await db.Tweet.destroy({ where: {}, truncate: true, force: true }) + await db.Followship.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); }) @@ -363,21 +363,21 @@ describe('# user requests', () => { context('# PUT ', () => { describe('PUT /api/users/:id', () => { - before(async() => { + before(async () => { // 清除 User, Tweet table 的測試資料庫資料 await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); // 模擬登入資料 - const rootUser = await db.User.create({name: 'root'});this.authenticate = sinon.stub(passport,"authenticate").callsFake((strategy, options, callback) => { - callback(null, {...rootUser}, null); - return (req,res,next)=>{}; + const rootUser = await db.User.create({ name: 'root' }); this.authenticate = sinon.stub(passport, "authenticate").callsFake((strategy, options, callback) => { + callback(null, { ...rootUser }, null); + return (req, res, next) => { }; }); this.getUser = sinon.stub( - helpers, 'getUser' - ).returns({id: 1, Followings: [], role: 'user'}); + helpers, 'getUser' + ).returns({ id: 1, Followings: [], role: 'user' }); // 在測試資料庫中,新增 mock 資料 - await db.User.create({account: 'User1', name: 'User1', email: 'User1', password: 'User1', introduction: 'User1'}) + await db.User.create({ account: 'User1', name: 'User1', email: 'User1', password: 'User1', introduction: 'User1' }) }) // 編輯自己所有的資料 PUT /users/:id @@ -387,7 +387,7 @@ describe('# user requests', () => { .send('name=User11&introduction=User11') .set('Accept', 'application/json') .expect(200) - .end(function(err, res) { + .end(function (err, res) { if (err) return done(err); db.User.findByPk(1).then(user => { // 檢查資料是否有變更 @@ -403,7 +403,7 @@ describe('# user requests', () => { this.authenticate.restore(); this.getUser.restore(); await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null, { raw: true }); - await db.User.destroy({where: {},truncate: true, force: true}) + await db.User.destroy({ where: {}, truncate: true, force: true }) await db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, { raw: true }); })