fix test lint

This commit is contained in:
Matteo Pagliazzi
2019-10-08 20:45:38 +02:00
parent e37f4467f8
commit 85fb5f33aa
367 changed files with 6635 additions and 6080 deletions

View File

@@ -36,7 +36,7 @@ describe('POST /coupons/enter/:code', () => {
});
it('returns an error if coupon has been used', async () => {
let [coupon] = await sudoUser.post('/coupons/generate/wondercon?count=1');
const [coupon] = await sudoUser.post('/coupons/generate/wondercon?count=1');
await user.post(`/coupons/enter/${coupon._id}`); // use coupon
await expect(user.post(`/coupons/enter/${coupon._id}`)).to.eventually.be.rejected.and.eql({
@@ -47,8 +47,8 @@ describe('POST /coupons/enter/:code', () => {
});
it('should apply the coupon to the user', async () => {
let [coupon] = await sudoUser.post('/coupons/generate/wondercon?count=1');
let userRes = await user.post(`/coupons/enter/${coupon._id}`);
const [coupon] = await sudoUser.post('/coupons/generate/wondercon?count=1');
const userRes = await user.post(`/coupons/enter/${coupon._id}`);
expect(userRes._id).to.equal(user._id);
expect(userRes.items.gear.owned.eyewear_special_wondercon_red).to.be.true;
expect(userRes.items.gear.owned.eyewear_special_wondercon_black).to.be.true;
@@ -57,6 +57,6 @@ describe('POST /coupons/enter/:code', () => {
expect(userRes.items.gear.owned.body_special_wondercon_red).to.be.true;
expect(userRes.items.gear.owned.body_special_wondercon_black).to.be.true;
expect(userRes.items.gear.owned.body_special_wondercon_gold).to.be.true;
expect(userRes.extra).to.eql({signupEvent: 'wondercon'});
expect(userRes.extra).to.eql({ signupEvent: 'wondercon' });
});
});

View File

@@ -27,4 +27,4 @@ describe('DELETE /inbox/clear', () => {
messages = await user.get('/inbox/messages');
expect(messages.length).to.equal(0);
});
});
});

View File

@@ -1,8 +1,8 @@
import { v4 as generateUUID } from 'uuid';
import {
generateUser,
translate as t,
} from '../../../helpers/api-integration/v4';
import { v4 as generateUUID } from 'uuid';
describe('DELETE /inbox/messages/:messageId', () => {
let user;

View File

@@ -8,7 +8,11 @@ describe('GET /inbox/conversations', () => {
let thirdUser;
beforeEach(async () => {
[user, otherUser, thirdUser] = await Promise.all([generateUser(), generateUser(), generateUser()]);
[user, otherUser, thirdUser] = await Promise.all([
generateUser(),
generateUser(),
generateUser(),
]);
await otherUser.post('/members/send-private-message', {
toUserId: user.id,
@@ -62,7 +66,7 @@ describe('GET /inbox/conversations', () => {
it('returns four messages when using page-query ', async () => {
const promises = [];
for (let i = 0; i < 10; i++) {
for (let i = 0; i < 10; i += 1) {
promises.push(user.post('/members/send-private-message', {
toUserId: user.id,
message: 'fourth',

View File

@@ -5,61 +5,64 @@ import {
describe('POST /members/flag-private-message/:messageId', () => {
let userToSendMessage;
let messageToSend = 'Test Private Message';
const messageToSend = 'Test Private Message';
beforeEach(async () => {
userToSendMessage = await generateUser();
});
it('Allows players to flag their own private message', async () => {
let receiver = await generateUser();
const receiver = await generateUser();
await userToSendMessage.post('/members/send-private-message', {
message: messageToSend,
toUserId: receiver._id,
});
let senderMessages = await userToSendMessage.get('/inbox/paged-messages');
const senderMessages = await userToSendMessage.get('/inbox/paged-messages');
let sendersMessageInSendersInbox = _.find(senderMessages, (message) => {
return message.toUUID === receiver._id && message.text === messageToSend;
});
const sendersMessageInSendersInbox = _.find(
senderMessages,
message => message.toUUID === receiver._id && message.text === messageToSend,
);
expect(sendersMessageInSendersInbox).to.exist;
await expect(userToSendMessage.post(`/members/flag-private-message/${sendersMessageInSendersInbox.id}`)).to.eventually.be.ok;
});
it('Flags a private message', async () => {
let receiver = await generateUser();
const receiver = await generateUser();
await userToSendMessage.post('/members/send-private-message', {
message: messageToSend,
toUserId: receiver._id,
});
let receiversMessages = await receiver.get('/inbox/paged-messages');
const receiversMessages = await receiver.get('/inbox/paged-messages');
let sendersMessageInReceiversInbox = _.find(receiversMessages, (message) => {
return message.uuid === userToSendMessage._id && message.text === messageToSend;
});
const sendersMessageInReceiversInbox = _.find(
receiversMessages,
message => message.uuid === userToSendMessage._id && message.text === messageToSend,
);
expect(sendersMessageInReceiversInbox).to.exist;
await expect(receiver.post(`/members/flag-private-message/${sendersMessageInReceiversInbox.id}`)).to.eventually.be.ok;
});
it('Returns an error when user tries to flag a private message that is already flagged', async () => {
let receiver = await generateUser();
const receiver = await generateUser();
await userToSendMessage.post('/members/send-private-message', {
message: messageToSend,
toUserId: receiver._id,
});
let receiversMessages = await receiver.get('/inbox/paged-messages');
const receiversMessages = await receiver.get('/inbox/paged-messages');
let sendersMessageInReceiversInbox = _.find(receiversMessages, (message) => {
return message.uuid === userToSendMessage._id && message.text === messageToSend;
});
const sendersMessageInReceiversInbox = _.find(
receiversMessages,
message => message.uuid === userToSendMessage._id && message.text === messageToSend,
);
expect(sendersMessageInReceiversInbox).to.exist;
await expect(receiver.post(`/members/flag-private-message/${sendersMessageInReceiversInbox.id}`)).to.eventually.be.ok;

View File

@@ -11,7 +11,7 @@ describe('GET /user', () => {
});
it('returns the authenticated user with computed stats', async () => {
let returnedUser = await user.get('/user');
const returnedUser = await user.get('/user');
expect(returnedUser._id).to.equal(user._id);
expect(returnedUser.stats.maxMP).to.exist;
@@ -20,7 +20,7 @@ describe('GET /user', () => {
});
it('does not return private paths (and apiToken)', async () => {
let returnedUser = await user.get('/user');
const returnedUser = await user.get('/user');
expect(returnedUser.auth.local.hashed_password).to.not.exist;
expect(returnedUser.auth.local.passwordHashMethod).to.not.exist;
@@ -29,7 +29,7 @@ describe('GET /user', () => {
});
it('returns only user properties requested', async () => {
let returnedUser = await user.get('/user?userFields=achievements,items.mounts');
const returnedUser = await user.get('/user?userFields=achievements,items.mounts');
expect(returnedUser._id).to.equal(user._id);
expect(returnedUser.achievements).to.exist;
@@ -50,7 +50,7 @@ describe('GET /user', () => {
toUserId: user.id,
message: 'second',
});
let returnedUser = await user.get('/user');
const returnedUser = await user.get('/user');
expect(returnedUser._id).to.equal(user._id);
expect(returnedUser.inbox.messages).to.be.undefined;

View File

@@ -1,3 +1,6 @@
import { v4 as generateUUID } from 'uuid';
import { find } from 'lodash';
import {
generateUser,
translate as t,
@@ -6,9 +9,6 @@ import {
generateChallenge,
sleep,
} from '../../../helpers/api-integration/v4';
import { v4 as generateUUID } from 'uuid';
import { find } from 'lodash';
import apiError from '../../../../website/server/libs/apiError';
describe('POST /user/class/cast/:spellId', () => {
@@ -19,28 +19,28 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if spell does not exist', async () => {
await user.update({'stats.class': 'rogue'});
let spellId = 'invalidSpell';
await user.update({ 'stats.class': 'rogue' });
const spellId = 'invalidSpell';
await expect(user.post(`/user/class/cast/${spellId}`))
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: apiError('spellNotFound', {spellId}),
message: apiError('spellNotFound', { spellId }),
});
});
it('returns an error if spell does not exist in user\'s class', async () => {
let spellId = 'pickPocket';
const spellId = 'pickPocket';
await expect(user.post(`/user/class/cast/${spellId}`))
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: apiError('spellNotFound', {spellId}),
message: apiError('spellNotFound', { spellId }),
});
});
it('returns an error if spell.mana > user.mana', async () => {
await user.update({'stats.class': 'rogue'});
await user.update({ 'stats.class': 'rogue' });
await expect(user.post('/user/class/cast/backStab'))
.to.eventually.be.rejected.and.eql({
code: 401,
@@ -59,12 +59,12 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if spell.lvl > user.level', async () => {
await user.update({'stats.mp': 200, 'stats.class': 'wizard'});
await user.update({ 'stats.mp': 200, 'stats.class': 'wizard' });
await expect(user.post('/user/class/cast/earth'))
.to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('spellLevelTooHigh', {level: 13}),
message: t('spellLevelTooHigh', { level: 13 }),
});
});
@@ -87,7 +87,7 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if targetId is required but missing', async () => {
await user.update({'stats.class': 'rogue', 'stats.lvl': 11});
await user.update({ 'stats.class': 'rogue', 'stats.lvl': 11 });
await expect(user.post('/user/class/cast/pickPocket'))
.to.eventually.be.rejected.and.eql({
code: 400,
@@ -97,7 +97,7 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if targeted task doesn\'t exist', async () => {
await user.update({'stats.class': 'rogue', 'stats.lvl': 11});
await user.update({ 'stats.class': 'rogue', 'stats.lvl': 11 });
await expect(user.post(`/user/class/cast/pickPocket?targetId=${generateUUID()}`))
.to.eventually.be.rejected.and.eql({
code: 404,
@@ -107,13 +107,13 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if a challenge task was targeted', async () => {
let {group, groupLeader} = await createAndPopulateGroup();
let challenge = await generateChallenge(groupLeader, group);
const { group, groupLeader } = await createAndPopulateGroup();
const challenge = await generateChallenge(groupLeader, group);
await groupLeader.post(`/challenges/${challenge._id}/join`);
await groupLeader.post(`/tasks/challenge/${challenge._id}`, [
{type: 'habit', text: 'task text'},
{ type: 'habit', text: 'task text' },
]);
await groupLeader.update({'stats.class': 'rogue', 'stats.lvl': 11});
await groupLeader.update({ 'stats.class': 'rogue', 'stats.lvl': 11 });
await sleep(0.5);
await groupLeader.sync();
await expect(groupLeader.post(`/user/class/cast/pickPocket?targetId=${groupLeader.tasksOrder.habits[0]}`))
@@ -125,19 +125,17 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if a group task was targeted', async () => {
let {group, groupLeader} = await createAndPopulateGroup();
const { group, groupLeader } = await createAndPopulateGroup();
let groupTask = await groupLeader.post(`/tasks/group/${group._id}`, {
const groupTask = await groupLeader.post(`/tasks/group/${group._id}`, {
text: 'todo group',
type: 'todo',
});
await groupLeader.post(`/tasks/${groupTask._id}/assign/${groupLeader._id}`);
let memberTasks = await groupLeader.get('/tasks/user');
let syncedGroupTask = find(memberTasks, function findAssignedTask (memberTask) {
return memberTask.group.id === group._id;
});
const memberTasks = await groupLeader.get('/tasks/user');
const syncedGroupTask = find(memberTasks, memberTask => memberTask.group.id === group._id);
await groupLeader.update({'stats.class': 'rogue', 'stats.lvl': 11});
await groupLeader.update({ 'stats.class': 'rogue', 'stats.lvl': 11 });
await sleep(0.5);
await groupLeader.sync();
@@ -150,23 +148,23 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('returns an error if targeted party member doesn\'t exist', async () => {
let {groupLeader} = await createAndPopulateGroup({
const { groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
members: 1,
});
await groupLeader.update({'items.special.snowball': 3});
await groupLeader.update({ 'items.special.snowball': 3 });
let target = generateUUID();
const target = generateUUID();
await expect(groupLeader.post(`/user/class/cast/snowball?targetId=${target}`))
.to.eventually.be.rejected.and.eql({
code: 404,
error: 'NotFound',
message: t('userWithIDNotFound', {userId: target}),
message: t('userWithIDNotFound', { userId: target }),
});
});
it('returns an error if party does not exists', async () => {
await user.update({'items.special.snowball': 3});
await user.update({ 'items.special.snowball': 3 });
await expect(user.post(`/user/class/cast/snowball?targetId=${generateUUID()}`))
.to.eventually.be.rejected.and.eql({
@@ -177,11 +175,11 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('send message in party chat if party && !spell.silent', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
members: 1,
});
await groupLeader.update({'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 13});
await groupLeader.update({ 'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 13 });
await groupLeader.post('/user/class/cast/earth');
await sleep(1);
@@ -192,17 +190,17 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('Ethereal Surge does not recover mp of other mages', async () => {
let group = await createAndPopulateGroup({
const group = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
members: 4,
});
let promises = [];
promises.push(group.groupLeader.update({'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 20}));
promises.push(group.members[0].update({'stats.mp': 0, 'stats.class': 'warrior', 'stats.lvl': 20}));
promises.push(group.members[1].update({'stats.mp': 0, 'stats.class': 'wizard', 'stats.lvl': 20}));
promises.push(group.members[2].update({'stats.mp': 0, 'stats.class': 'rogue', 'stats.lvl': 20}));
promises.push(group.members[3].update({'stats.mp': 0, 'stats.class': 'healer', 'stats.lvl': 20}));
promises.push(group.groupLeader.update({ 'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 20 }));
promises.push(group.members[0].update({ 'stats.mp': 0, 'stats.class': 'warrior', 'stats.lvl': 20 }));
promises.push(group.members[1].update({ 'stats.mp': 0, 'stats.class': 'wizard', 'stats.lvl': 20 }));
promises.push(group.members[2].update({ 'stats.mp': 0, 'stats.class': 'rogue', 'stats.lvl': 20 }));
promises.push(group.members[3].update({ 'stats.mp': 0, 'stats.class': 'healer', 'stats.lvl': 20 }));
await Promise.all(promises);
await group.groupLeader.post('/user/class/cast/mpheal');
@@ -221,13 +219,13 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('cast bulk', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
let { group, groupLeader } = await createAndPopulateGroup({ // eslint-disable-line prefer-const
groupDetails: { type: 'party', privacy: 'private' },
members: 1,
});
await groupLeader.update({'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 13});
await groupLeader.post('/user/class/cast/earth', {quantity: 2});
await groupLeader.update({ 'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 13 });
await groupLeader.post('/user/class/cast/earth', { quantity: 2 });
await sleep(1);
group = await groupLeader.get(`/groups/${group._id}`);
@@ -237,33 +235,32 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('searing brightness does not affect challenge or group tasks', async () => {
let guild = await generateGroup(user);
let challenge = await generateChallenge(user, guild);
const guild = await generateGroup(user);
const challenge = await generateChallenge(user, guild);
await user.post(`/challenges/${challenge._id}/join`);
await user.post(`/tasks/challenge/${challenge._id}`, {
text: 'test challenge habit',
type: 'habit',
});
let groupTask = await user.post(`/tasks/group/${guild._id}`, {
const groupTask = await user.post(`/tasks/group/${guild._id}`, {
text: 'todo group',
type: 'todo',
});
await user.update({'stats.class': 'healer', 'stats.mp': 200, 'stats.lvl': 15});
await user.update({ 'stats.class': 'healer', 'stats.mp': 200, 'stats.lvl': 15 });
await user.post(`/tasks/${groupTask._id}/assign/${user._id}`);
await user.post('/user/class/cast/brightness');
await user.sync();
let memberTasks = await user.get('/tasks/user');
const memberTasks = await user.get('/tasks/user');
let syncedGroupTask = find(memberTasks, function findAssignedTask (memberTask) {
return memberTask.group.id === guild._id;
});
const syncedGroupTask = find(memberTasks, memberTask => memberTask.group.id === guild._id);
let userChallengeTask = find(memberTasks, function findAssignedTask (memberTask) {
return memberTask.challenge.id === challenge._id;
});
const userChallengeTask = find(
memberTasks,
memberTask => memberTask.challenge.id === challenge._id,
);
expect(userChallengeTask).to.exist;
expect(syncedGroupTask).to.exist;
@@ -272,12 +269,12 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('increases both user\'s achievement values', async () => {
let party = await createAndPopulateGroup({
const party = await createAndPopulateGroup({
members: 1,
});
let leader = party.groupLeader;
let recipient = party.members[0];
await leader.update({'stats.gp': 10});
const leader = party.groupLeader;
const recipient = party.members[0];
await leader.update({ 'stats.gp': 10 });
await leader.post(`/user/class/cast/birthday?targetId=${recipient._id}`);
await leader.sync();
await recipient.sync();
@@ -286,29 +283,29 @@ describe('POST /user/class/cast/:spellId', () => {
});
it('only increases user\'s achievement one if target == caster', async () => {
await user.update({'stats.gp': 10});
await user.update({ 'stats.gp': 10 });
await user.post(`/user/class/cast/birthday?targetId=${user._id}`);
await user.sync();
expect(user.achievements.birthday).to.equal(1);
});
it('passes correct target to spell when targetType === \'task\'', async () => {
await user.update({'stats.class': 'wizard', 'stats.lvl': 11});
await user.update({ 'stats.class': 'wizard', 'stats.lvl': 11 });
let task = await user.post('/tasks/user', {
const task = await user.post('/tasks/user', {
text: 'test habit',
type: 'habit',
});
let result = await user.post(`/user/class/cast/fireball?targetId=${task._id}`);
const result = await user.post(`/user/class/cast/fireball?targetId=${task._id}`);
expect(result.task._id).to.equal(task._id);
});
it('passes correct target to spell when targetType === \'self\'', async () => {
await user.update({'stats.class': 'wizard', 'stats.lvl': 14, 'stats.mp': 50});
await user.update({ 'stats.class': 'wizard', 'stats.lvl': 14, 'stats.mp': 50 });
let result = await user.post('/user/class/cast/frost');
const result = await user.post('/user/class/cast/frost');
expect(result.user.stats.mp).to.equal(10);
});

View File

@@ -28,7 +28,7 @@ describe('POST /user/rebirth', () => {
balance: 1.5,
});
let daily = await generateDaily({
const daily = await generateDaily({
text: 'test habit',
type: 'daily',
value: 1,
@@ -36,21 +36,21 @@ describe('POST /user/rebirth', () => {
userId: user._id,
});
let reward = await generateReward({
const reward = await generateReward({
text: 'test reward',
type: 'reward',
value: 1,
userId: user._id,
});
let response = await user.post('/user/rebirth');
const response = await user.post('/user/rebirth');
await user.sync();
expect(user.notifications.length).to.equal(1);
expect(user.notifications[0].type).to.equal('REBIRTH_ACHIEVEMENT');
let updatedDaily = await user.get(`/tasks/${daily._id}`);
let updatedReward = await user.get(`/tasks/${reward._id}`);
const updatedDaily = await user.get(`/tasks/${daily._id}`);
const updatedReward = await user.get(`/tasks/${reward._id}`);
expect(response.message).to.equal(t('rebirthComplete'));
expect(updatedDaily.streak).to.equal(0);

View File

@@ -28,24 +28,24 @@ describe('POST /user/reroll', () => {
balance: 2,
});
let daily = await generateDaily({
const daily = await generateDaily({
text: 'test habit',
type: 'daily',
userId: user._id,
});
let reward = await generateReward({
const reward = await generateReward({
text: 'test reward',
type: 'reward',
value: 1,
userId: user._id,
});
let response = await user.post('/user/reroll');
const response = await user.post('/user/reroll');
await user.sync();
let updatedDaily = await user.get(`/tasks/${daily._id}`);
let updatedReward = await user.get(`/tasks/${reward._id}`);
const updatedDaily = await user.get(`/tasks/${daily._id}`);
const updatedReward = await user.get(`/tasks/${reward._id}`);
expect(response.message).to.equal(t('fortifyComplete'));
expect(updatedDaily.value).to.equal(0);

View File

@@ -1,10 +1,10 @@
import { find } from 'lodash';
import {
generateUser,
generateGroup,
generateChallenge,
translate as t,
} from '../../../helpers/api-integration/v4';
import { find } from 'lodash';
describe('POST /user/reset', () => {
let user;
@@ -16,7 +16,7 @@ describe('POST /user/reset', () => {
// More tests in common code unit tests
it('resets user\'s habits', async () => {
let task = await user.post('/tasks/user', {
const task = await user.post('/tasks/user', {
text: 'test habit',
type: 'habit',
});
@@ -34,7 +34,7 @@ describe('POST /user/reset', () => {
});
it('resets user\'s dailys', async () => {
let task = await user.post('/tasks/user', {
const task = await user.post('/tasks/user', {
text: 'test daily',
type: 'daily',
});
@@ -52,7 +52,7 @@ describe('POST /user/reset', () => {
});
it('resets user\'s todos', async () => {
let task = await user.post('/tasks/user', {
const task = await user.post('/tasks/user', {
text: 'test todo',
type: 'todo',
});
@@ -70,7 +70,7 @@ describe('POST /user/reset', () => {
});
it('resets user\'s rewards', async () => {
let task = await user.post('/tasks/user', {
const task = await user.post('/tasks/user', {
text: 'test reward',
type: 'reward',
});
@@ -88,15 +88,15 @@ describe('POST /user/reset', () => {
});
it('does not delete challenge or group tasks', async () => {
let guild = await generateGroup(user);
let challenge = await generateChallenge(user, guild);
const guild = await generateGroup(user);
const challenge = await generateChallenge(user, guild);
await user.post(`/challenges/${challenge._id}/join`);
await user.post(`/tasks/challenge/${challenge._id}`, {
text: 'test challenge habit',
type: 'habit',
});
let groupTask = await user.post(`/tasks/group/${guild._id}`, {
const groupTask = await user.post(`/tasks/group/${guild._id}`, {
text: 'todo group',
type: 'todo',
});
@@ -105,15 +105,14 @@ describe('POST /user/reset', () => {
await user.post('/user/reset');
await user.sync();
let memberTasks = await user.get('/tasks/user');
const memberTasks = await user.get('/tasks/user');
let syncedGroupTask = find(memberTasks, function findAssignedTask (memberTask) {
return memberTask.group.id === guild._id;
});
const syncedGroupTask = find(memberTasks, memberTask => memberTask.group.id === guild._id);
let userChallengeTask = find(memberTasks, function findAssignedTask (memberTask) {
return memberTask.challenge.id === challenge._id;
});
const userChallengeTask = find(
memberTasks,
memberTask => memberTask.challenge.id === challenge._id,
);
expect(userChallengeTask).to.exist;
expect(syncedGroupTask).to.exist;

View File

@@ -1,9 +1,9 @@
import { each, get } from 'lodash';
import {
generateUser,
translate as t,
} from '../../../helpers/api-integration/v4';
import { each, get } from 'lodash';
describe('PUT /user', () => {
let user;
@@ -40,7 +40,7 @@ describe('PUT /user', () => {
});
it('update tags', async () => {
let userTags = user.tags;
const userTags = user.tags;
await user.put('/user', {
tags: [...user.tags, {
@@ -82,20 +82,20 @@ describe('PUT /user', () => {
});
context('Top Level Protected Operations', () => {
let protectedOperations = {
'gem balance': {balance: 100},
auth: {'auth.blocked': true, 'auth.timestamps.created': new Date()},
contributor: {'contributor.level': 9, 'contributor.admin': true, 'contributor.text': 'some text'},
backer: {'backer.tier': 10, 'backer.npc': 'Bilbo'},
subscriptions: {'purchased.plan.extraMonths': 500, 'purchased.plan.consecutive.trinkets': 1000},
'customization gem purchases': {'purchased.background.tavern': true, 'purchased.skin.bear': true},
notifications: [{type: 123}],
webhooks: {webhooks: [{url: 'https://foobar.com'}]},
const protectedOperations = {
'gem balance': { balance: 100 },
auth: { 'auth.blocked': true, 'auth.timestamps.created': new Date() },
contributor: { 'contributor.level': 9, 'contributor.admin': true, 'contributor.text': 'some text' },
backer: { 'backer.tier': 10, 'backer.npc': 'Bilbo' },
subscriptions: { 'purchased.plan.extraMonths': 500, 'purchased.plan.consecutive.trinkets': 1000 },
'customization gem purchases': { 'purchased.background.tavern': true, 'purchased.skin.bear': true },
notifications: [{ type: 123 }],
webhooks: { webhooks: [{ url: 'https://foobar.com' }] },
};
each(protectedOperations, (data, testName) => {
it(`does not allow updating ${testName}`, async () => {
let errorText = t('messageUserOperationProtected', { operation: Object.keys(data)[0] });
const errorText = t('messageUserOperationProtected', { operation: Object.keys(data)[0] });
await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({
code: 401,
@@ -107,17 +107,17 @@ describe('PUT /user', () => {
});
context('Sub-Level Protected Operations', () => {
let protectedOperations = {
'class stat': {'stats.class': 'wizard'},
'flags unless whitelisted': {'flags.dropsEnabled': true},
webhooks: {'preferences.webhooks': [1, 2, 3]},
sleep: {'preferences.sleep': true},
'disable classes': {'preferences.disableClasses': true},
const protectedOperations = {
'class stat': { 'stats.class': 'wizard' },
'flags unless whitelisted': { 'flags.dropsEnabled': true },
webhooks: { 'preferences.webhooks': [1, 2, 3] },
sleep: { 'preferences.sleep': true },
'disable classes': { 'preferences.disableClasses': true },
};
each(protectedOperations, (data, testName) => {
it(`does not allow updating ${testName}`, async () => {
let errorText = t('messageUserOperationProtected', { operation: Object.keys(data)[0] });
const errorText = t('messageUserOperationProtected', { operation: Object.keys(data)[0] });
await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({
code: 401,
@@ -129,7 +129,7 @@ describe('PUT /user', () => {
});
context('Default Appearance Preferences', () => {
let testCases = {
const testCases = {
shirt: 'yellow',
skin: 'ddc994',
'hair.color': 'blond',
@@ -144,14 +144,14 @@ describe('PUT /user', () => {
update[`preferences.${type}`] = item;
it(`updates user with ${type} that is a default`, async () => {
let dbUpdate = {};
const dbUpdate = {};
dbUpdate[`purchased.${type}.${item}`] = true;
await user.update(dbUpdate);
// Sanity checks to make sure user is not already equipped with item
expect(get(user.preferences, type)).to.not.eql(item);
let updatedUser = await user.put('/user', update);
const updatedUser = await user.put('/user', update);
expect(get(updatedUser.preferences, type)).to.eql(item);
});
@@ -173,7 +173,7 @@ describe('PUT /user', () => {
'preferences.hair.beard': 3,
});
let updatedUser = await user.put('/user', {
const updatedUser = await user.put('/user', {
'preferences.hair.beard': 0,
});
@@ -186,7 +186,7 @@ describe('PUT /user', () => {
'preferences.hair.mustache': 2,
});
let updatedUser = await user.put('/user', {
const updatedUser = await user.put('/user', {
'preferences.hair.mustache': 0,
});
@@ -195,7 +195,7 @@ describe('PUT /user', () => {
});
context('Purchasable Appearance Preferences', () => {
let testCases = {
const testCases = {
background: 'volcano',
shirt: 'convict',
skin: 'cactus',
@@ -213,19 +213,19 @@ describe('PUT /user', () => {
await expect(user.put('/user', update)).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('mustPurchaseToSet', {val: item, key: `preferences.${type}`}),
message: t('mustPurchaseToSet', { val: item, key: `preferences.${type}` }),
});
});
it(`updates user with ${type} user does own`, async () => {
let dbUpdate = {};
const dbUpdate = {};
dbUpdate[`purchased.${type}.${item}`] = true;
await user.update(dbUpdate);
// Sanity check to make sure user is not already equipped with item
expect(get(user.preferences, type)).to.not.eql(item);
let updatedUser = await user.put('/user', update);
const updatedUser = await user.put('/user', update);
expect(get(updatedUser.preferences, type)).to.eql(item);
});

View File

@@ -1,3 +1,5 @@
import { v4 as uuid } from 'uuid';
import { each } from 'lodash';
import {
generateUser,
requester,
@@ -6,8 +8,6 @@ import {
getProperty,
} from '../../../../helpers/api-integration/v4';
import { ApiUser } from '../../../../helpers/api-integration/api-classes';
import { v4 as uuid } from 'uuid';
import { each } from 'lodash';
import { encrypt } from '../../../../../website/server/libs/encryption';
function generateRandomUserName () {
@@ -23,11 +23,11 @@ describe('POST /user/auth/local/register', () => {
});
it('registers a new user', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -43,11 +43,11 @@ describe('POST /user/auth/local/register', () => {
xit('remove spaces from username', async () => {
// TODO can probably delete this test now
let username = ' usernamewithspaces ';
let email = 'test@example.com';
let password = 'password';
const username = ' usernamewithspaces ';
const email = 'test@example.com';
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -108,24 +108,24 @@ describe('POST /user/auth/local/register', () => {
context('provides default tags and tasks', async () => {
it('for a generic API consumer', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let requests = new ApiUser(user);
const requests = new ApiUser(user);
let habits = await requests.get('/tasks/user?type=habits');
let dailys = await requests.get('/tasks/user?type=dailys');
let todos = await requests.get('/tasks/user?type=todos');
let rewards = await requests.get('/tasks/user?type=rewards');
let tags = await requests.get('/tags');
const habits = await requests.get('/tasks/user?type=habits');
const dailys = await requests.get('/tasks/user?type=dailys');
const todos = await requests.get('/tasks/user?type=todos');
const rewards = await requests.get('/tasks/user?type=rewards');
const tags = await requests.get('/tags');
expect(habits).to.have.a.lengthOf(0);
expect(dailys).to.have.a.lengthOf(0);
@@ -145,26 +145,26 @@ describe('POST /user/auth/local/register', () => {
xit('for Web', async () => {
api = requester(
null,
{'x-client': 'habitica-web'},
{ 'x-client': 'habitica-web' },
);
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let requests = new ApiUser(user);
const requests = new ApiUser(user);
let habits = await requests.get('/tasks/user?type=habits');
let dailys = await requests.get('/tasks/user?type=dailys');
let todos = await requests.get('/tasks/user?type=todos');
let rewards = await requests.get('/tasks/user?type=rewards');
let tags = await requests.get('/tags');
const habits = await requests.get('/tasks/user?type=habits');
const dailys = await requests.get('/tasks/user?type=dailys');
const todos = await requests.get('/tasks/user?type=todos');
const rewards = await requests.get('/tasks/user?type=rewards');
const tags = await requests.get('/tags');
expect(habits).to.have.a.lengthOf(3);
expect(habits[0].text).to.eql(t('defaultHabit1Text'));
@@ -199,26 +199,26 @@ describe('POST /user/auth/local/register', () => {
it('for Android', async () => {
api = requester(
null,
{'x-client': 'habitica-android'},
{ 'x-client': 'habitica-android' },
);
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let requests = new ApiUser(user);
const requests = new ApiUser(user);
let habits = await requests.get('/tasks/user?type=habits');
let dailys = await requests.get('/tasks/user?type=dailys');
let todos = await requests.get('/tasks/user?type=todos');
let rewards = await requests.get('/tasks/user?type=rewards');
let tags = await requests.get('/tags');
const habits = await requests.get('/tasks/user?type=habits');
const dailys = await requests.get('/tasks/user?type=dailys');
const todos = await requests.get('/tasks/user?type=todos');
const rewards = await requests.get('/tasks/user?type=rewards');
const tags = await requests.get('/tags');
expect(habits).to.have.a.lengthOf(0);
expect(dailys).to.have.a.lengthOf(0);
@@ -230,26 +230,26 @@ describe('POST /user/auth/local/register', () => {
it('for iOS', async () => {
api = requester(
null,
{'x-client': 'habitica-ios'},
{ 'x-client': 'habitica-ios' },
);
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let requests = new ApiUser(user);
const requests = new ApiUser(user);
let habits = await requests.get('/tasks/user?type=habits');
let dailys = await requests.get('/tasks/user?type=dailys');
let todos = await requests.get('/tasks/user?type=todos');
let rewards = await requests.get('/tasks/user?type=rewards');
let tags = await requests.get('/tags');
const habits = await requests.get('/tasks/user?type=habits');
const dailys = await requests.get('/tasks/user?type=dailys');
const todos = await requests.get('/tasks/user?type=todos');
const rewards = await requests.get('/tasks/user?type=rewards');
const tags = await requests.get('/tags');
expect(habits).to.have.a.lengthOf(0);
expect(dailys).to.have.a.lengthOf(0);
@@ -260,11 +260,11 @@ describe('POST /user/auth/local/register', () => {
});
it('enrolls new users in an A/B test', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -275,11 +275,11 @@ describe('POST /user/auth/local/register', () => {
});
it('includes items awarded by default when creating a new user', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -292,10 +292,10 @@ describe('POST /user/auth/local/register', () => {
});
it('requires password and confirmPassword to match', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
let confirmPassword = 'not password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const password = 'password';
const confirmPassword = 'not password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -310,9 +310,9 @@ describe('POST /user/auth/local/register', () => {
});
it('requires a username', async () => {
let email = `${generateRandomUserName()}@example.com`;
let password = 'password';
let confirmPassword = 'password';
const email = `${generateRandomUserName()}@example.com`;
const password = 'password';
const confirmPassword = 'password';
await expect(api.post('/user/auth/local/register', {
email,
@@ -326,8 +326,8 @@ describe('POST /user/auth/local/register', () => {
});
it('requires an email', async () => {
let username = generateRandomUserName();
let password = 'password';
const username = generateRandomUserName();
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -341,9 +341,9 @@ describe('POST /user/auth/local/register', () => {
});
it('requires a valid email', async () => {
let username = generateRandomUserName();
let email = 'notanemail@sdf';
let password = 'password';
const username = generateRandomUserName();
const email = 'notanemail@sdf';
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -358,11 +358,11 @@ describe('POST /user/auth/local/register', () => {
});
it('sanitizes email params to a lowercase string before creating the user', async () => {
let username = generateRandomUserName();
let email = 'ISANEmAiL@ExAmPle.coM';
let password = 'password';
const username = generateRandomUserName();
const email = 'ISANEmAiL@ExAmPle.coM';
const password = 'password';
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -373,9 +373,9 @@ describe('POST /user/auth/local/register', () => {
});
it('fails on a habitica.com email', async () => {
let username = generateRandomUserName();
let email = `${username}@habitica.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@habitica.com`;
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -390,9 +390,9 @@ describe('POST /user/auth/local/register', () => {
});
it('fails on a habitrpg.com email', async () => {
let username = generateRandomUserName();
let email = `${username}@habitrpg.com`;
let password = 'password';
const username = generateRandomUserName();
const email = `${username}@habitrpg.com`;
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -407,9 +407,9 @@ describe('POST /user/auth/local/register', () => {
});
it('requires a password', async () => {
let username = generateRandomUserName();
let email = `${username}@example.com`;
let confirmPassword = 'password';
const username = generateRandomUserName();
const email = `${username}@example.com`;
const confirmPassword = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -425,9 +425,9 @@ describe('POST /user/auth/local/register', () => {
context('attach to facebook user', () => {
let user;
let email = 'some@email.net';
let username = 'some-username';
let password = 'some-password';
const email = 'some@email.net';
const username = 'some-username';
const password = 'some-password';
beforeEach(async () => {
user = await generateUser();
});
@@ -458,7 +458,8 @@ describe('POST /user/auth/local/register', () => {
});
context('login is already taken', () => {
let username, email, api;
let username; let email; let
api;
beforeEach(async () => {
api = requester();
@@ -473,8 +474,8 @@ describe('POST /user/auth/local/register', () => {
});
it('rejects if username is already taken', async () => {
let uniqueEmail = `${generateRandomUserName()}@example.com`;
let password = 'password';
const uniqueEmail = `${generateRandomUserName()}@example.com`;
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username,
@@ -489,8 +490,8 @@ describe('POST /user/auth/local/register', () => {
});
it('rejects if email is already taken', async () => {
let uniqueUsername = generateRandomUserName();
let password = 'password';
const uniqueUsername = generateRandomUserName();
const password = 'password';
await expect(api.post('/user/auth/local/register', {
username: uniqueUsername,
@@ -506,7 +507,8 @@ describe('POST /user/auth/local/register', () => {
});
context('req.query.groupInvite', () => {
let api, username, email, password;
let api; let username; let email; let
password;
beforeEach(() => {
api = requester();
@@ -516,7 +518,7 @@ describe('POST /user/auth/local/register', () => {
});
it('does not crash the signup process when it\'s invalid', async () => {
let user = await api.post('/user/auth/local/register?groupInvite=aaaaInvalid', {
const user = await api.post('/user/auth/local/register?groupInvite=aaaaInvalid', {
username,
email,
password,
@@ -527,17 +529,17 @@ describe('POST /user/auth/local/register', () => {
});
it('supports invite using req.query.groupInvite', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
});
let invite = encrypt(JSON.stringify({
const invite = encrypt(JSON.stringify({
id: group._id,
inviter: groupLeader._id,
sentAt: Date.now(), // so we can let it expire
}));
let user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
const user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
username,
email,
password,
@@ -550,11 +552,11 @@ describe('POST /user/auth/local/register', () => {
});
it('awards achievement to inviter', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
});
let invite = encrypt(JSON.stringify({
const invite = encrypt(JSON.stringify({
id: group._id,
inviter: groupLeader._id,
sentAt: Date.now(),
@@ -572,17 +574,17 @@ describe('POST /user/auth/local/register', () => {
});
it('user not added to a party on expired invite', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'party', privacy: 'private' },
});
let invite = encrypt(JSON.stringify({
const invite = encrypt(JSON.stringify({
id: group._id,
inviter: groupLeader._id,
sentAt: Date.now() - 6.912e8, // 8 days old
}));
let user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
const user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
username,
email,
password,
@@ -593,17 +595,17 @@ describe('POST /user/auth/local/register', () => {
});
it('adds a user to a guild on an invite of type other than party', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
const { group, groupLeader } = await createAndPopulateGroup({
groupDetails: { type: 'guild', privacy: 'private' },
});
let invite = encrypt(JSON.stringify({
const invite = encrypt(JSON.stringify({
id: group._id,
inviter: groupLeader._id,
sentAt: Date.now(),
}));
let user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
const user = await api.post(`/user/auth/local/register?groupInvite=${invite}`, {
username,
email,
password,
@@ -619,7 +621,8 @@ describe('POST /user/auth/local/register', () => {
});
context('successful login via api', () => {
let api, username, email, password;
let api; let username; let email; let
password;
beforeEach(() => {
api = requester();
@@ -629,7 +632,7 @@ describe('POST /user/auth/local/register', () => {
});
it('sets all site tour values to -2 (already seen)', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -638,13 +641,13 @@ describe('POST /user/auth/local/register', () => {
expect(user.flags.tour).to.not.be.empty;
each(user.flags.tour, (value) => {
each(user.flags.tour, value => {
expect(value).to.eql(-2);
});
});
it('populates user with default todos, not no other task types', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -658,7 +661,7 @@ describe('POST /user/auth/local/register', () => {
});
it('populates user with default tags', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -670,17 +673,18 @@ describe('POST /user/auth/local/register', () => {
});
context('successful login with habitica-web header', () => {
let api, username, email, password;
let api; let username; let email; let
password;
beforeEach(() => {
api = requester({}, {'x-client': 'habitica-web'});
api = requester({}, { 'x-client': 'habitica-web' });
username = generateRandomUserName();
email = `${username}@example.com`;
password = 'password';
});
it('sets all common tutorial flags to true', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -689,13 +693,13 @@ describe('POST /user/auth/local/register', () => {
expect(user.flags.tour).to.not.be.empty;
each(user.flags.tutorial.common, (value) => {
each(user.flags.tutorial.common, value => {
expect(value).to.eql(true);
});
});
it('populates user with default todos, habits, and rewards', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -709,7 +713,7 @@ describe('POST /user/auth/local/register', () => {
});
it('populates user with default tags', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
@@ -720,17 +724,17 @@ describe('POST /user/auth/local/register', () => {
});
it('adds the correct tags to the correct tasks', async () => {
let user = await api.post('/user/auth/local/register', {
const user = await api.post('/user/auth/local/register', {
username,
email,
password,
confirmPassword: password,
});
let requests = new ApiUser(user);
const requests = new ApiUser(user);
let habits = await requests.get('/tasks/user?type=habits');
let todos = await requests.get('/tasks/user?type=todos');
const habits = await requests.get('/tasks/user?type=habits');
const todos = await requests.get('/tasks/user?type=todos');
expect(habits).to.have.a.lengthOf(0);
expect(todos).to.have.a.lengthOf(0);

View File

@@ -13,8 +13,8 @@ describe('POST /user/auth/verify-display-name', async () => {
});
it('successfully verifies display name including funky characters', async () => {
let newDisplayName = 'Sabé 🤬';
let response = await user.post(ENDPOINT, {
const newDisplayName = 'Sabé 🤬';
const response = await user.post(ENDPOINT, {
displayName: newDisplayName,
});
expect(response).to.eql({ isUsable: true });

View File

@@ -13,16 +13,16 @@ describe('POST /user/auth/verify-username', async () => {
});
it('successfully verifies username', async () => {
let newUsername = 'new-username';
let response = await user.post(ENDPOINT, {
const newUsername = 'new-username';
const response = await user.post(ENDPOINT, {
username: newUsername,
});
expect(response).to.eql({ isUsable: true });
});
it('successfully verifies username with allowed characters', async () => {
let newUsername = 'new-username_123';
let response = await user.post(ENDPOINT, {
const newUsername = 'new-username_123';
const response = await user.post(ENDPOINT, {
username: newUsername,
});
expect(response).to.eql({ isUsable: true });