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 {
|
import {
|
||||||
generateGroup,
|
generateGroup,
|
||||||
|
createAndPopulateGroup,
|
||||||
generateUser,
|
generateUser,
|
||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('POST /groups/:id', () => {
|
describe('POST /groups/:id', () => {
|
||||||
context('user is not the leader of the group', () => {
|
context('user is not the leader of the group', () => {
|
||||||
let user, otherUser, groupUserDoesNotOwn;
|
let user, otherUser, groupUserDoesNotOwn;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('DELETE /groups/:id/chat', () => {
|
describe('DELETE /groups/:id/chat', () => {
|
||||||
let group, message, user;
|
let group, message, user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
createAndPopulateGroup,
|
createAndPopulateGroup,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('GET /groups/:id/chat', () => {
|
describe('GET /groups/:id/chat', () => {
|
||||||
context('group with multiple messages', () => {
|
context('group with multiple messages', () => {
|
||||||
let group, member, user;
|
let group, member, user;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('POST /groups/:id/chat', () => {
|
describe('POST /groups/:id/chat', () => {
|
||||||
let group, user;
|
let group, user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('POST /groups/:id/chat/:id/clearflags', () => {
|
describe('POST /groups/:id/chat/:id/clearflags', () => {
|
||||||
let guild;
|
let guild;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('POST /groups/:id/chat/:id/flag', () => {
|
describe('POST /groups/:id/chat/:id/flag', () => {
|
||||||
context('another member\'s message', () => {
|
context('another member\'s message', () => {
|
||||||
let group, member, message, user;
|
let group, member, message, user;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
xdescribe('POST /groups/:id/chat/:id/like', () => {
|
describe('POST /groups/:id/chat/:id/like', () => {
|
||||||
context('another member\'s message', () => {
|
context('another member\'s message', () => {
|
||||||
let group, member, message, user;
|
let group, member, message, user;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
times,
|
times,
|
||||||
|
map,
|
||||||
} from 'lodash';
|
} from 'lodash';
|
||||||
import Q from 'q';
|
import Q from 'q';
|
||||||
import { v4 as generateUUID } from 'uuid';
|
import { v4 as generateUUID } from 'uuid';
|
||||||
@@ -41,11 +42,29 @@ export async function generateGroup (leader, details = {}, update = {}) {
|
|||||||
details.privacy = details.privacy || 'private';
|
details.privacy = details.privacy || 'private';
|
||||||
details.name = details.name || 'test group';
|
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 group = await leader.post('/groups', details);
|
||||||
let apiGroup = new ApiGroup(group);
|
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;
|
return apiGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ api.update = function(req, res, next) {
|
|||||||
return res.status(401).json({err: shared.i18n.t('messageGroupOnlyLeaderCanUpdate')});
|
return res.status(401).json({err: shared.i18n.t('messageGroupOnlyLeaderCanUpdate')});
|
||||||
|
|
||||||
'name description logo logo leaderMessage leader leaderOnly'.split(' ').forEach(function(attr){
|
'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){
|
group.save(function(err, saved){
|
||||||
@@ -279,8 +279,10 @@ api.update = function(req, res, next) {
|
|||||||
// TODO remove from api object?
|
// TODO remove from api object?
|
||||||
api.attachGroup = function(req, res, next) {
|
api.attachGroup = function(req, res, next) {
|
||||||
var user = res.locals.user;
|
var user = res.locals.user;
|
||||||
var gid = req.params.gid;
|
var gid = req.params.gid === 'party' ? user.party._id : req.params.gid;
|
||||||
var q = (gid == 'party') ? Group.findOne({type: 'party', members: {'$in': [res.locals.user._id]}}) : Group.findById(gid);
|
|
||||||
|
let q = Group.findOne({_id: gid})
|
||||||
|
|
||||||
q.exec(function(err, group){
|
q.exec(function(err, group){
|
||||||
if(err) return next(err);
|
if(err) return next(err);
|
||||||
if(!group) return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')});
|
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.
|
// TODO: This code is duplicated from api.get - pull it out into a function to remove duplication.
|
||||||
var user = res.locals.user;
|
var user = res.locals.user;
|
||||||
var gid = req.params.gid;
|
var gid = req.params.gid;
|
||||||
var q = (gid == 'party')
|
|
||||||
? Group.findOne({type: 'party', members: {$in:[user._id]}})
|
var q;
|
||||||
: Group.findOne({$or:[
|
let isUserGuild = user.guilds.indexOf(gid) !== -1;
|
||||||
{_id:gid, privacy:'public'},
|
|
||||||
{_id:gid, privacy:'private', members: {$in:[user._id]}}
|
if (gid === 'party' || gid === user.party._id) {
|
||||||
]});
|
q = Group.findOne({_id: user.party._id, type: 'party'})
|
||||||
populateQuery(gid, q);
|
} 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){
|
q.exec(function(err, group){
|
||||||
if (err) return next(err);
|
if (err) return next(err);
|
||||||
if (!group && gid!=='party') return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')});
|
if (!group && gid!=='party') return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')});
|
||||||
|
|||||||
Reference in New Issue
Block a user