mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
v3 adapt v2: port chat routes and group.update
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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')});
|
||||
|
||||
Reference in New Issue
Block a user