Move the change status of the user to a ban the user func.

This commit is contained in:
gaba
2016-11-21 12:18:19 -08:00
parent 2b3da02cb7
commit 3337e95a6c
5 changed files with 72 additions and 9 deletions
+1 -2
View File
@@ -2,7 +2,6 @@
* Action disptacher related to users
*/
export const updateUserStatus = (status, id) => (dispatch, getState) => {
console.log('DEBUG ', getState);
export const updateUserStatus = (status, id) => (dispatch) => {
dispatch({type: 'USER_STATUS_UPDATE', id, status});
};
+2 -2
View File
@@ -151,11 +151,11 @@ CommentSchema.statics.moderationQueue = function(moderation) {
//==============================================================================
/**
* Change the status of a comment.
* Set the status of a comment.
* @param {String} id identifier of the comment (uuid)
* @param {String} status the new status of the comment
*/
CommentSchema.statics.changeStatus = function(id, status) {
CommentSchema.statics.setStatus = function(id, status) {
return Comment.findOneAndUpdate({'id': id}, {$set: {'status': status}}, {upsert: false, new: true});
};
+20 -3
View File
@@ -3,6 +3,8 @@ const uuid = require('uuid');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const Comment = require('./comment');
// SALT_ROUNDS is the number of rounds that the bcrypt algorithm will run
// through during the salting process.
const SALT_ROUNDS = 10;
@@ -418,9 +420,6 @@ UserService.setStatus = (id, status) => {
return Promise.reject(new Error(`status ${status} is not supported`));
}
// If we are banning the user
// disable their account
return UserModel.update({
id: id
}, {
@@ -430,6 +429,24 @@ UserService.setStatus = (id, status) => {
});
};
/**
* Ban a user.
* @param {String} id id of a user
* @param {String} comment_id id of the comment that the user was ban for.
* @param {Function} done callback after the operation is complete
*/
UserService.ban = (id, comment_id) => {
// Disable their account
return UserService.disableUser(id)
.then(() => {
// Set status of the user to banned
return UserService.setStatus(id, 'banned').then(() => {
// Reject the comment that the user was ban for.
return Comment.setStatus(comment_id, 'rejected');
});
});
};
/**
* Finds a user with the id.
* @param {String} id user id (uuid)
+1 -1
View File
@@ -101,7 +101,7 @@ router.post('/:comment_id', (req, res, next) => {
router.post('/:comment_id/status', (req, res, next) => {
Comment
.changeStatus(req.params.comment_id, req.body.status)
.setStatus(req.params.comment_id, req.body.status)
.then(comment => res.status(200).send(comment))
.catch(error => next(error));
+48 -1
View File
@@ -1,6 +1,7 @@
require('../utils/mongoose');
const User = require('../../models/user');
const Comment = require('../../models/comment');
const expect = require('chai').expect;
describe('User: models', () => {
@@ -65,9 +66,43 @@ describe('User: models', () => {
});
describe('#setStatus', () => {
it('should set the status to active', () => {
return User
.setStatus(mockUsers[0].id, 'active')
.then(() => {
User.findById(mockUsers[0].id)
.then((user) => {
expect(user).to.have.property('status')
.and.to.equal('active');
});
});
});
});
describe('#ban', () => {
let mockComment;
beforeEach(() => {
return Comment.new('testing the comment for that user if it is rejected.', mockUsers[0].id)
.then((comment) => {
mockComment = comment;
});
});
it('should disable the user', () => {
return User
.ban(mockUsers[0].id, mockComment.id)
.then(() => {
User.findById(mockUsers[0].id)
.then((user) => {
expect(user).to.have.property('disabled')
.and.to.equal(true);
});
});
});
it('should set the status to banned', () => {
return User
.setStatus(mockUsers[0].id, 'banned')
.ban(mockUsers[0].id, mockComment.id)
.then(() => {
User.findById(mockUsers[0].id)
.then((user) => {
@@ -76,5 +111,17 @@ describe('User: models', () => {
});
});
});
it('should set the comment to rejected', () => {
return User
.ban(mockUsers[0].id, mockComment.id)
.then(() => {
Comment.findById(mockComment.id)
.then((comment) => {
expect(comment).to.have.property('status')
.and.to.equal('rejected');
});
});
});
});
});