v3 adapt v2: port chat routes and group.update

This commit is contained in:
Matteo Pagliazzi
2016-04-05 12:02:00 +02:00
parent 0a40c56973
commit 374d11b0e4
9 changed files with 47 additions and 18 deletions

View File

@@ -1,10 +1,11 @@
import {
generateGroup,
createAndPopulateGroup,
generateUser,
translate as t,
} from '../../../helpers/api-integration/v2';
xdescribe('POST /groups/:id', () => {
describe('POST /groups/:id', () => {
context('user is not the leader of the group', () => {
let user, otherUser, groupUserDoesNotOwn;

View File

@@ -3,7 +3,7 @@ import {
translate as t,
} from '../../../../helpers/api-integration/v2';
xdescribe('DELETE /groups/:id/chat', () => {
describe('DELETE /groups/:id/chat', () => {
let group, message, user;
beforeEach(async () => {

View File

@@ -2,7 +2,7 @@ import {
createAndPopulateGroup,
} from '../../../../helpers/api-integration/v2';
xdescribe('GET /groups/:id/chat', () => {
describe('GET /groups/:id/chat', () => {
context('group with multiple messages', () => {
let group, member, user;

View File

@@ -3,7 +3,7 @@ import {
translate as t,
} from '../../../../helpers/api-integration/v2';
xdescribe('POST /groups/:id/chat', () => {
describe('POST /groups/:id/chat', () => {
let group, user;
beforeEach(async () => {

View File

@@ -4,7 +4,7 @@ import {
translate as t,
} from '../../../../helpers/api-integration/v2';
xdescribe('POST /groups/:id/chat/:id/clearflags', () => {
describe('POST /groups/:id/chat/:id/clearflags', () => {
let guild;
beforeEach(async () => {

View File

@@ -4,7 +4,7 @@ import {
translate as t,
} from '../../../../helpers/api-integration/v2';
xdescribe('POST /groups/:id/chat/:id/flag', () => {
describe('POST /groups/:id/chat/:id/flag', () => {
context('another member\'s message', () => {
let group, member, message, user;

View File

@@ -4,7 +4,7 @@ import {
translate as t,
} from '../../../../helpers/api-integration/v2';
xdescribe('POST /groups/:id/chat/:id/like', () => {
describe('POST /groups/:id/chat/:id/like', () => {
context('another member\'s message', () => {
let group, member, message, user;

View File

@@ -1,5 +1,6 @@
import {
times,
map,
} from 'lodash';
import Q from 'q';
import { v4 as generateUUID } from 'uuid';
@@ -41,11 +42,29 @@ export async function generateGroup (leader, details = {}, update = {}) {
details.privacy = details.privacy || 'private';
details.name = details.name || 'test group';
let members;
if (details.members) {
members = details.members;
delete details.members;
}
let group = await leader.post('/groups', details);
let apiGroup = new ApiGroup(group);
await apiGroup.update(update);
const groupMembershipTypes = {
party: { 'party._id': group._id},
guild: { guilds: [group._id] },
};
await Q.all(
map(members, (member) => {
return member.update(groupMembershipTypes[group.type]);
})
);
await apiGroup.update(update);
await apiGroup.sync();
return apiGroup;
}

View File

@@ -265,7 +265,7 @@ api.update = function(req, res, next) {
return res.status(401).json({err: shared.i18n.t('messageGroupOnlyLeaderCanUpdate')});
'name description logo logo leaderMessage leader leaderOnly'.split(' ').forEach(function(attr){
group[attr] = req.body[attr];
if (req.body[attr]) group[attr] = req.body[attr];
});
group.save(function(err, saved){
@@ -279,8 +279,10 @@ api.update = function(req, res, next) {
// TODO remove from api object?
api.attachGroup = function(req, res, next) {
var user = res.locals.user;
var gid = req.params.gid;
var q = (gid == 'party') ? Group.findOne({type: 'party', members: {'$in': [res.locals.user._id]}}) : Group.findById(gid);
var gid = req.params.gid === 'party' ? user.party._id : req.params.gid;
let q = Group.findOne({_id: gid})
q.exec(function(err, group){
if(err) return next(err);
if(!group) return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')});
@@ -298,13 +300,20 @@ api.getChat = function(req, res, next) {
// TODO: This code is duplicated from api.get - pull it out into a function to remove duplication.
var user = res.locals.user;
var gid = req.params.gid;
var q = (gid == 'party')
? Group.findOne({type: 'party', members: {$in:[user._id]}})
: Group.findOne({$or:[
{_id:gid, privacy:'public'},
{_id:gid, privacy:'private', members: {$in:[user._id]}}
]});
populateQuery(gid, q);
var q;
let isUserGuild = user.guilds.indexOf(gid) !== -1;
if (gid === 'party' || gid === user.party._id) {
q = Group.findOne({_id: user.party._id, type: 'party'})
} else {
if (isUserGuild) {
q = Group.findOne({type: 'guild', _id: gid});
} else {
q = Group.findOne({type: 'guild', privacy: 'public', _id: gid});
}
}
q.exec(function(err, group){
if (err) return next(err);
if (!group && gid!=='party') return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')});