mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
finish tests for members controller
This commit is contained in:
@@ -0,0 +1,95 @@
|
|||||||
|
import {
|
||||||
|
generateUser,
|
||||||
|
generateGroup,
|
||||||
|
translate as t,
|
||||||
|
} from '../../../../helpers/api-v3-integration.helper';
|
||||||
|
import { v4 as generateUUID } from 'uuid';
|
||||||
|
|
||||||
|
describe('GET /groups/:groupId/members', () => {
|
||||||
|
let user;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
user = await generateUser();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('validates optional req.query.lastId to be an UUID', async () => {
|
||||||
|
await expect(user.get(`/groups/groupId/members?lastId=invalidUUID`)).to.eventually.be.rejected.and.eql({
|
||||||
|
code: 400,
|
||||||
|
error: 'BadRequest',
|
||||||
|
message: t('invalidReqParams'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails if group doesn\'t exists', async () => {
|
||||||
|
await expect(user.get(`/groups/${generateUUID()}/members`)).to.eventually.be.rejected.and.eql({
|
||||||
|
code: 404,
|
||||||
|
error: 'NotFound',
|
||||||
|
message: t('groupNotFound'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails if user doesn\'t have access to the group', async () => {
|
||||||
|
let group = await generateGroup(user, {type: 'party', name: generateUUID()});
|
||||||
|
let anotherUser = await generateUser();
|
||||||
|
await expect(anotherUser.get(`/groups/${group._id}/members`)).to.eventually.be.rejected.and.eql({
|
||||||
|
code: 404,
|
||||||
|
error: 'NotFound',
|
||||||
|
message: t('groupNotFound'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('works when passing party as req.params.groupId', async () => {
|
||||||
|
await generateGroup(user, {type: 'party', name: generateUUID()});
|
||||||
|
let res = await user.get(`/groups/party/members`);
|
||||||
|
expect(res).to.be.an('array');
|
||||||
|
expect(res.length).to.equal(1);
|
||||||
|
expect(res[0]).to.eql({
|
||||||
|
_id: user._id,
|
||||||
|
profile: {name: user.profile.name},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('populates only some fields', async () => {
|
||||||
|
await generateGroup(user, {type: 'party', name: generateUUID()});
|
||||||
|
let res = await user.get(`/groups/party/members`);
|
||||||
|
expect(res[0]).to.have.all.keys(['_id', 'profile']);
|
||||||
|
expect(res[0].profile).to.have.all.keys(['name']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns only first 30 members', async () => {
|
||||||
|
let group = await generateGroup(user, {type: 'party', name: generateUUID()});
|
||||||
|
|
||||||
|
let usersToGenerate = [];
|
||||||
|
for (let i = 0; i < 31; i++) {
|
||||||
|
usersToGenerate.push(generateUser({party: {_id: group._id}}));
|
||||||
|
}
|
||||||
|
await Promise.all(usersToGenerate);
|
||||||
|
|
||||||
|
let res = await user.get(`/groups/party/members`);
|
||||||
|
expect(res.length).to.equal(30);
|
||||||
|
res.forEach(member => {
|
||||||
|
expect(member).to.have.all.keys(['_id', 'profile']);
|
||||||
|
expect(member.profile).to.have.all.keys(['name']);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('supports using req.query.lastId to get more members', async () => {
|
||||||
|
let leader = await generateUser({balance: 4});
|
||||||
|
let group = await generateGroup(leader, {type: 'guild', privacy: 'public', name: generateUUID()});
|
||||||
|
|
||||||
|
let usersToGenerate = [];
|
||||||
|
for (let i = 0; i < 57; i++) {
|
||||||
|
usersToGenerate.push(generateUser({guilds: [group._id]}));
|
||||||
|
}
|
||||||
|
let generatedUsers = await Promise.all(usersToGenerate); // Group has 59 members (1 is the leader)
|
||||||
|
let expectedIds = [leader._id].concat(generatedUsers.map(generatedUser => generatedUser._id));
|
||||||
|
|
||||||
|
let res = await user.get(`/groups/${group._id}/members`);
|
||||||
|
expect(res.length).to.equal(30);
|
||||||
|
let res2 = await user.get(`/groups/${group._id}/members?lastId=${res[res.length - 1]._id}`);
|
||||||
|
expect(res2.length).to.equal(28);
|
||||||
|
|
||||||
|
let resIds = res.concat(res2).map(member => member._id);
|
||||||
|
expect(resIds).to.eql(expectedIds.sort())
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -11,6 +11,14 @@ describe('GET /members/:memberId', () => {
|
|||||||
user = await generateUser();
|
user = await generateUser();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('validates req.params.memberId', async () => {
|
||||||
|
await expect(user.get(`/members/invalidUUID`)).to.eventually.be.rejected.and.eql({
|
||||||
|
code: 400,
|
||||||
|
error: 'BadRequest',
|
||||||
|
message: t('invalidReqParams'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('returns a member public data only', async () => {
|
it('returns a member public data only', async () => {
|
||||||
let member = await generateUser({ // make sure user has all the fields that can be returned by the getMember call
|
let member = await generateUser({ // make sure user has all the fields that can be returned by the getMember call
|
||||||
contributor: {level: 1},
|
contributor: {level: 1},
|
||||||
|
|||||||
@@ -105,14 +105,15 @@ function _getMembersForItem (type) {
|
|||||||
|
|
||||||
if (lastId) query._id = {$gt: lastId};
|
if (lastId) query._id = {$gt: lastId};
|
||||||
|
|
||||||
let users = await User
|
let members = await User
|
||||||
.find(query)
|
.find(query)
|
||||||
.sortBy({_id: 1})
|
.sort({_id: 1})
|
||||||
.limit(30)
|
.limit(30)
|
||||||
.select(fields)
|
.select(fields)
|
||||||
.exec();
|
.exec();
|
||||||
|
|
||||||
res.respond(200, users);
|
// manually call toJSON with minimize: true so empty paths aren't returned
|
||||||
|
res.respond(200, members.map(member => member.toJSON({minimize: true})));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user