mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-29 04:04:47 +01:00
173 lines
4.8 KiB
JavaScript
173 lines
4.8 KiB
JavaScript
import { v4 as generateUUID } from 'uuid';
|
|
import {
|
|
generateUser,
|
|
translate as t,
|
|
createAndPopulateGroup,
|
|
generateChallenge,
|
|
} from '../../../../helpers/api-integration/v3';
|
|
|
|
describe('GET /tasks/:id', () => {
|
|
let user;
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser();
|
|
});
|
|
|
|
context('general', () => {
|
|
context('task cannot be accessed', () => {
|
|
it('cannot get a non-existent task', async () => {
|
|
const dummyId = generateUUID();
|
|
|
|
await expect(user.get(`/tasks/${dummyId}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('messageTaskNotFound'),
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
context('user', () => {
|
|
context('task can be accessed', async () => {
|
|
let task;
|
|
|
|
beforeEach(async () => {
|
|
task = await user.post('/tasks/user', {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
alias: 'alias',
|
|
});
|
|
});
|
|
|
|
it('gets specified task', async () => {
|
|
const getTask = await user.get(`/tasks/${task._id}`);
|
|
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
|
|
it('can use alias to retrieve task', async () => {
|
|
const getTask = await user.get(`/tasks/${task.alias}`);
|
|
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
});
|
|
|
|
context('task cannot be accessed', () => {
|
|
it('cannot get a task owned by someone else', async () => {
|
|
const anotherUser = await generateUser();
|
|
const task = await user.post('/tasks/user', {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
});
|
|
|
|
await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('messageTaskNotFound'),
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
context('challenge', () => {
|
|
let challenge; let task; let leader; let member;
|
|
|
|
before(async () => {
|
|
const populatedGroup = await createAndPopulateGroup({
|
|
members: 1,
|
|
});
|
|
|
|
const guild = populatedGroup.group;
|
|
leader = populatedGroup.groupLeader;
|
|
member = populatedGroup.members[0]; // eslint-disable-line prefer-destructuring
|
|
|
|
challenge = await generateChallenge(leader, guild);
|
|
await leader.post(`/challenges/${challenge._id}/join`);
|
|
|
|
task = await leader.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
});
|
|
});
|
|
|
|
context('task can be accessed', async () => {
|
|
it('can get challenge task if member of that challenge', async () => {
|
|
await member.post(`/challenges/${challenge._id}/join`);
|
|
|
|
const getTask = await member.get(`/tasks/${task._id}`);
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
|
|
it('can get challenge task if leader of that challenge', async () => {
|
|
const getTask = await leader.get(`/tasks/${task._id}`);
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
|
|
it('can get challenge task if admin', async () => {
|
|
const admin = await generateUser({
|
|
'permissions.challengeAdmin': true,
|
|
});
|
|
|
|
const getTask = await admin.get(`/tasks/${task._id}`);
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
});
|
|
|
|
context('task cannot be accessed', () => {
|
|
it('cannot get a task in a challenge i am not part of', async () => {
|
|
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('messageTaskNotFound'),
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
context('group', () => {
|
|
let group; let task; let members; let leader;
|
|
|
|
before(async () => {
|
|
const groupData = await createAndPopulateGroup({
|
|
groupDetails: {
|
|
name: 'Test Guild',
|
|
type: 'guild',
|
|
},
|
|
members: 1,
|
|
upgradeToGroupPlan: true,
|
|
});
|
|
|
|
group = groupData.group;
|
|
members = groupData.members;
|
|
leader = groupData.groupLeader;
|
|
|
|
task = await leader.post(`/tasks/group/${group._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
});
|
|
});
|
|
|
|
context('task can be accessed', async () => {
|
|
it('can get group task if leader of that group', async () => {
|
|
const getTask = await leader.get(`/tasks/${task._id}`);
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
|
|
it('can get group task if member of that group', async () => {
|
|
const getTask = await members[0].get(`/tasks/${task._id}`);
|
|
expect(getTask).to.eql(task);
|
|
});
|
|
});
|
|
|
|
context('task cannot be accessed', () => {
|
|
it('cannot get a task in a group i am not part of', async () => {
|
|
await expect(user.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('messageTaskNotFound'),
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|