Merge pull request #59 from coralproject/moving-to-queue

Moved the moderation queue to its own folder and change the route to …
This commit is contained in:
David Erwin
2016-11-11 16:50:05 -05:00
committed by GitHub
6 changed files with 142 additions and 56 deletions
@@ -34,7 +34,7 @@ export default store => next => action => {
// Get comments to fill each of the three lists on the mod queue
const fetchModerationQueueComments = store =>
Promise.all([fetch('/api/v1/comments/status/pending'), fetch('/api/v1/comments/status/rejected'), fetch('/api/v1/comments/action/flag')])
Promise.all([fetch('/api/v1/queue/comments/pending'), fetch('/api/v1/comments/status/rejected'), fetch('/api/v1/comments/action/flag')])
.then(res => Promise.all(res.map(r => r.json())))
.then(res => {
res[2] = res[2].map(comment => { comment.flagged = true; return comment; });
+26 -36
View File
@@ -1,8 +1,6 @@
const express = require('express');
const Comment = require('../../../models/comment');
const Setting = require('../../../models/setting');
const router = express.Router();
//==============================================================================
@@ -25,11 +23,7 @@ router.get('/:comment_id', (req, res, next) => {
.catch(next);
});
//==============================================================================
// Moderation Queues Routes
//==============================================================================
// Get all the comments that have that action_type over them.
// Get all the comments that have an action_type over them.
router.get('/action/:action_type', (req, res, next) => {
Comment
.findByActionType(req.params.action_type)
@@ -41,34 +35,30 @@ router.get('/action/:action_type', (req, res, next) => {
// Get all the comments that were rejected.
router.get('/status/rejected', (req, res, next) => {
Comment
.findByStatus('rejected')
.then(comments => {
res.status(200).json(comments);
})
.catch(next);
Comment.findByStatus('rejected').then(comments => {
res.status(200).json(comments);
})
.catch(next);
});
// Returns back all the comments that are in the moderation queue. The moderation queue is pre or post moderated,
// depending on the settings. The :moderation overwrites this settings.
// Pre-moderation: New comments are shown in the moderator queues immediately.
// Post-moderation: New comments do not appear in moderation queues unless they are flagged by other users.
router.get('/status/pending', (req, res, next) => {
Setting
.getModerationSetting()
.then(({moderation}) => {
let moderationValue = req.query.moderation;
if (typeof moderationValue === 'undefined' || moderationValue === undefined) {
moderationValue = moderation;
}
Comment
.moderationQueue(moderationValue)
.then((comments) => {
res.status(200).json(comments);
});
})
.catch(next);
// Get all the comments that were accepted.
router.get('/status/accepted', (req, res, next) => {
Comment.findByStatus('accepted').then((comments) => {
res.status(200).json(comments);
})
.catch(error => {
next(error);
});
});
// Get all the not moderated comments.
router.get('/status/new', (req, res, next) => {
Comment.findByStatus('').then((comments) => {
res.status(200).json(comments);
})
.catch(error => {
next(error);
});
});
//==============================================================================
@@ -76,9 +66,9 @@ router.get('/status/pending', (req, res, next) => {
//==============================================================================
router.post('/', (req, res, next) => {
const {body, author_id, asset_id, parent_id, status, username} = req.body;
Comment
.new(body, author_id, asset_id, parent_id, status, username)
.then((comment) => {
@@ -109,7 +99,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)
.then(comment => res.status(200).send(comment))
+1
View File
@@ -4,6 +4,7 @@ const router = express.Router();
router.use('/asset', require('./asset'));
router.use('/comments', require('./comments'));
router.use('/queue', require('./queue'));
router.use('/settings', require('./settings'));
router.use('/stream', require('./stream'));
router.use('/user', require('./user'));
+27
View File
@@ -0,0 +1,27 @@
const express = require('express');
const Comment = require('../../../models/comment');
const Setting = require('../../../models/setting');
const router = express.Router();
//==============================================================================
// Get Routes
//==============================================================================
// Returns back all the comments that are in the moderation queue. The moderation queue is pre or post moderated,
// depending on the settings. The :moderation overwrites this settings.
// Pre-moderation: New comments are shown in the moderator queues immediately.
// Post-moderation: New comments do not appear in moderation queues unless they are flagged by other users.
router.get('/comments/pending', (req, res, next) => {
Setting.getModerationSetting().then(function({moderation}){
Comment.moderationQueue(moderation).then((comments) => {
res.status(200).json(comments);
});
})
.catch(error => {
next(error);
});
});
module.exports = router;
+6 -19
View File
@@ -75,7 +75,7 @@ describe('Get /comments', () => {
});
});
describe('Get moderation queues rejected, pending, flags', () => {
describe('Get comments by status and action', () => {
const comments = [{
id: 'abc',
body: 'comment 10',
@@ -133,21 +133,20 @@ describe('Get moderation queues rejected, pending, flags', () => {
});
});
it('should return all the pending comments', function(done){
it('should return all the approved comments', function(done){
chai.request(app)
.get('/api/v1/comments/status/pending')
.get('/api/v1/comments/status/accepted')
.end(function(err, res){
expect(err).to.be.null;
expect(res).to.have.status(200);
expect(res.body[0]).to.have.property('id', 'def');
expect(res.body[0]).to.have.property('id', 'hij');
done();
});
});
it('should return all the pending comments as pre moderated', function(done){
it('should return all the new comments', function(done){
chai.request(app)
.get('/api/v1/comments/status/pending')
.query({'moderation': 'pre'})
.get('/api/v1/comments/status/new')
.end(function(err, res){
expect(err).to.be.null;
expect(res).to.have.status(200);
@@ -156,18 +155,6 @@ describe('Get moderation queues rejected, pending, flags', () => {
});
});
it('should return all the pending comments as post moderated', function(done){
chai.request(app)
.get('/api/v1/comments/status/pending')
.query({'moderation': 'post'})
.end(function(err, res){
expect(err).to.be.null;
expect(res).to.have.status(200);
expect(res.body).to.have.lengthOf(0);
done();
});
});
it('should return all the flagged comments', function(done){
chai.request(app)
.get('/api/v1/comments/action/flag')
+81
View File
@@ -0,0 +1,81 @@
process.env.NODE_ENV = 'test';
require('../../../utils/mongoose');
const app = require('../../../../app');
const chai = require('chai');
const expect = chai.expect;
// Setup chai.
chai.should();
chai.use(require('chai-http'));
const Comment = require('../../../../models/comment');
const Action = require('../../../../models/action');
const User = require('../../../../models/user');
const Setting = require('../../../../models/setting');
const settings = {id: '1', moderation: 'pre'};
beforeEach(() => {
return Setting.create(settings);
});
describe('Get moderation queues rejected, pending, flags', () => {
const comments = [{
id: 'abc',
body: 'comment 10',
asset_id: 'asset',
author_id: '123',
status: 'rejected'
}, {
id: 'def',
body: 'comment 20',
asset_id: 'asset',
author_id: '456'
}, {
id: 'hij',
body: 'comment 30',
asset_id: '456',
status: 'accepted'
}];
const users = [{
displayName: 'Ana',
email: 'ana@gmail.com',
password: '123'
}, {
displayName: 'Maria',
email: 'maria@gmail.com',
password: '123'
}];
const actions = [{
action_type: 'flag',
item_id: 'abc',
item_type: 'comment'
}, {
action_type: 'like',
item_id: 'hij',
item_type: 'comment'
}];
beforeEach(() => {
return Promise.all([
Comment.create(comments),
User.createLocalUsers(users),
Action.create(actions)
]);
});
it('should return all the pending comments', function(done){
chai.request(app)
.get('/api/v1/queue/comments/pending')
.end(function(err, res){
expect(err).to.be.null;
expect(res).to.have.status(200);
expect(res.body[0]).to.have.property('id', 'def');
done();
});
});
});