mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-27 11:12:28 +01:00
108 lines
4.0 KiB
JavaScript
108 lines
4.0 KiB
JavaScript
import { v4 as generateUUID } from 'uuid';
|
|
import {
|
|
generateUser,
|
|
generateChallenge,
|
|
generateGroup,
|
|
translate as t,
|
|
} from '../../../../helpers/api-integration/v3';
|
|
|
|
describe('GET /challenges/:challengeId/members/:memberId', () => {
|
|
let user;
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser();
|
|
});
|
|
|
|
it('validates req.params.memberId to be an UUID', async () => {
|
|
await expect(user.get(`/challenges/invalidUUID/members/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
|
|
code: 400,
|
|
error: 'BadRequest',
|
|
message: t('invalidReqParams'),
|
|
});
|
|
});
|
|
|
|
it('validates req.params.memberId to be an UUID', async () => {
|
|
await expect(user.get(`/challenges/${generateUUID()}/members/invalidUUID`)).to.eventually.be.rejected.and.eql({
|
|
code: 400,
|
|
error: 'BadRequest',
|
|
message: t('invalidReqParams'),
|
|
});
|
|
});
|
|
|
|
it('fails if member doesn\'t exists', async () => {
|
|
const userId = generateUUID();
|
|
await expect(user.get(`/challenges/${generateUUID()}/members/${userId}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('userWithIDNotFound', { userId }),
|
|
});
|
|
});
|
|
|
|
it('fails if challenge doesn\'t exists', async () => {
|
|
const member = await generateUser();
|
|
await expect(user.get(`/challenges/${generateUUID()}/members/${member._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
it('fails if user doesn\'t have access to the challenge', async () => {
|
|
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
|
|
const challenge = await generateChallenge(user, group);
|
|
await user.post(`/challenges/${challenge._id}/join`);
|
|
const anotherUser = await generateUser();
|
|
const member = await generateUser();
|
|
await expect(anotherUser.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
it('fails if member is not part of the challenge', async () => {
|
|
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
|
|
const challenge = await generateChallenge(user, group);
|
|
await user.post(`/challenges/${challenge._id}/join`);
|
|
const member = await generateUser();
|
|
await expect(user.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeMemberNotFound'),
|
|
});
|
|
});
|
|
|
|
it('returns the member tasks for the challenges', async () => {
|
|
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
|
|
const challenge = await generateChallenge(user, group);
|
|
await user.post(`/challenges/${challenge._id}/join`);
|
|
await user.post(`/tasks/challenge/${challenge._id}`, [{ type: 'habit', text: 'Test Text' }]);
|
|
|
|
const memberProgress = await user.get(`/challenges/${challenge._id}/members/${user._id}`);
|
|
const chalTasks = await user.get(`/tasks/challenge/${challenge._id}`);
|
|
expect(memberProgress.tasks.length).to.equal(chalTasks.length);
|
|
expect(memberProgress.tasks[0].challenge.id).to.equal(challenge._id);
|
|
expect(memberProgress.tasks[0].challenge.taskId).to.equal(chalTasks[0]._id);
|
|
});
|
|
|
|
it('returns the tasks without the tags and checklist', async () => {
|
|
const group = await generateGroup(user, { type: 'party', name: generateUUID() });
|
|
const challenge = await generateChallenge(user, group);
|
|
await user.post(`/challenges/${challenge._id}/join`);
|
|
const taskText = 'Test Text';
|
|
await user.post(`/tasks/challenge/${challenge._id}`, [{
|
|
type: 'todo',
|
|
text: taskText,
|
|
checklist: [
|
|
{
|
|
_id: 123,
|
|
text: 'test',
|
|
},
|
|
],
|
|
}]);
|
|
|
|
const memberProgress = await user.get(`/challenges/${challenge._id}/members/${user._id}`);
|
|
expect(memberProgress.tasks[0]).to.not.have.any.keys(['tags', 'checklist']);
|
|
});
|
|
});
|