mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 13:47:33 +01:00
* fix(challenges): creator should not join challenge automatically * change behavior on the client side as well * update tests and fix membercount * update tests * fix tests
158 lines
4.7 KiB
JavaScript
158 lines
4.7 KiB
JavaScript
import {
|
|
generateUser,
|
|
generateGroup,
|
|
generateChallenge,
|
|
translate as t,
|
|
} from '../../../../../helpers/api-v3-integration.helper';
|
|
import { v4 as generateUUID } from 'uuid';
|
|
import { find } from 'lodash';
|
|
|
|
describe('POST /tasks/challenge/:challengeId', () => {
|
|
let user;
|
|
let guild;
|
|
let challenge;
|
|
|
|
function findUserChallengeTask (memberTask) {
|
|
return memberTask.challenge.id === challenge._id;
|
|
}
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser({balance: 1});
|
|
guild = await generateGroup(user);
|
|
challenge = await generateChallenge(user, guild);
|
|
await user.post(`/challenges/${challenge._id}/join`);
|
|
});
|
|
|
|
it('returns error when challenge is not found', async () => {
|
|
let fakeChallengeId = generateUUID();
|
|
|
|
await expect(user.post(`/tasks/challenge/${fakeChallengeId}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
up: false,
|
|
down: true,
|
|
notes: 1976,
|
|
})).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
it('allows leader to add tasks to a challenge when not a member', async () => {
|
|
await user.post(`/challenges/${challenge._id}/leave`);
|
|
let task = await user.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
up: false,
|
|
down: true,
|
|
notes: 1976,
|
|
});
|
|
|
|
let {tasksOrder} = await user.get(`/challenges/${challenge._id}`);
|
|
|
|
expect(tasksOrder.habits).to.include(task.id);
|
|
});
|
|
|
|
it('returns error when user tries to create task with a alias', async () => {
|
|
await expect(user.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
alias: 'a-alias',
|
|
})).to.eventually.be.rejected.and.eql({
|
|
code: 400,
|
|
error: 'BadRequest',
|
|
message: 'habit validation failed',
|
|
});
|
|
});
|
|
|
|
it('returns error when non leader tries to edit challenge', async () => {
|
|
let userThatIsNotLeaderOfChallenge = await generateUser({
|
|
challenges: [challenge._id],
|
|
});
|
|
|
|
await expect(userThatIsNotLeaderOfChallenge.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
up: false,
|
|
down: true,
|
|
notes: 1976,
|
|
})).to.eventually.be.rejected.and.eql({
|
|
code: 401,
|
|
error: 'NotAuthorized',
|
|
message: t('onlyChalLeaderEditTasks'),
|
|
});
|
|
});
|
|
|
|
it('creates a habit', async () => {
|
|
let task = await user.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test habit',
|
|
type: 'habit',
|
|
up: false,
|
|
down: true,
|
|
notes: 1976,
|
|
});
|
|
let challengeWithTask = await user.get(`/challenges/${challenge._id}`);
|
|
|
|
let memberTasks = await user.get('/tasks/user');
|
|
let userChallengeTask = find(memberTasks, findUserChallengeTask);
|
|
|
|
expect(challengeWithTask.tasksOrder.habits.indexOf(task._id)).to.be.above(-1);
|
|
expect(task.challenge.id).to.equal(challenge._id);
|
|
expect(task.text).to.eql('test habit');
|
|
expect(task.notes).to.eql('1976');
|
|
expect(task.type).to.eql('habit');
|
|
expect(task.up).to.eql(false);
|
|
expect(task.down).to.eql(true);
|
|
|
|
expect(userChallengeTask.notes).to.eql(task.notes);
|
|
});
|
|
|
|
it('creates a todo', async () => {
|
|
let task = await user.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test todo',
|
|
type: 'todo',
|
|
notes: 1976,
|
|
});
|
|
let challengeWithTask = await user.get(`/challenges/${challenge._id}`);
|
|
|
|
let memberTasks = await user.get('/tasks/user');
|
|
let userChallengeTask = find(memberTasks, findUserChallengeTask);
|
|
|
|
expect(challengeWithTask.tasksOrder.todos.indexOf(task._id)).to.be.above(-1);
|
|
expect(task.challenge.id).to.equal(challenge._id);
|
|
expect(task.text).to.eql('test todo');
|
|
expect(task.notes).to.eql('1976');
|
|
expect(task.type).to.eql('todo');
|
|
|
|
expect(userChallengeTask.notes).to.eql(task.notes);
|
|
});
|
|
|
|
it('creates a daily', async () => {
|
|
let now = new Date();
|
|
let task = await user.post(`/tasks/challenge/${challenge._id}`, {
|
|
text: 'test daily',
|
|
type: 'daily',
|
|
notes: 1976,
|
|
frequency: 'daily',
|
|
everyX: 5,
|
|
startDate: now,
|
|
});
|
|
let challengeWithTask = await user.get(`/challenges/${challenge._id}`);
|
|
|
|
let memberTasks = await user.get('/tasks/user');
|
|
let userChallengeTask = find(memberTasks, findUserChallengeTask);
|
|
|
|
expect(challengeWithTask.tasksOrder.dailys.indexOf(task._id)).to.be.above(-1);
|
|
expect(task.challenge.id).to.equal(challenge._id);
|
|
expect(task.text).to.eql('test daily');
|
|
expect(task.notes).to.eql('1976');
|
|
expect(task.type).to.eql('daily');
|
|
expect(task.frequency).to.eql('daily');
|
|
expect(task.everyX).to.eql(5);
|
|
expect(new Date(task.startDate)).to.eql(now);
|
|
|
|
expect(userChallengeTask.notes).to.eql(task.notes);
|
|
});
|
|
});
|