From 6a7cd0900e765b556cf00702ff5907134c1d5859 Mon Sep 17 00:00:00 2001 From: Alys Date: Fri, 1 Jan 2016 11:24:15 +1000 Subject: [PATCH 01/14] adjust Bailey message about party hats to clarify that they're not available to players who join from now on, and that only one hat will appear for each player --- website/views/shared/new-stuff.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index c6e91d79b5..936d877885 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -4,7 +4,7 @@ h2 12/30/2015 - NEW YEAR'S EVE CELEBRATION: PARTY HATS, NEW YEAR'S CARDS, BEEMIN td .npc_matt.pull-right h3 Party Hats - p In honor of the new year, some free Party Hats are available in the Rewards store! New users get the ever-handsome Absurd Party Hat, and users who already received one last year get the Silly Party Hat or the new Ridiculous Party Hat. These hats will be available to purchase until January 31st, but once you've bought them, you'll have them forever. Enjoy! + p In honor of the new year, there's a free Party Hat available in the Rewards store! Users who joined Habitica in 2015 get the ever-handsome Absurd Party Hat, and users who already received one last year get the Silly Party Hat or the new Ridiculous Party Hat. Once you've bought it, you'll have it forever. Enjoy! p.small.muted by Lemoness and SabreCat tr td From 2c6f600703d213a99f898215994ad764cec2214a Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 31 Dec 2015 21:35:17 -0500 Subject: [PATCH 02/14] fix(event): NYE hat for new users --- common/script/content/gear/sets/special/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/script/content/gear/sets/special/index.js b/common/script/content/gear/sets/special/index.js index de192f8428..dedfd7137a 100644 --- a/common/script/content/gear/sets/special/index.js +++ b/common/script/content/gear/sets/special/index.js @@ -445,7 +445,7 @@ let head = { canOwn: ownsItem('head_special_fireCoralCirclet'), }, nye: { - event: EVENTS.winter, + event: EVENTS.winter2016, text: t('headSpecialNyeText'), notes: t('headSpecialNyeNotes'), value: 0, From 23aaf78167f1062331f53d672e7be570398aa88f Mon Sep 17 00:00:00 2001 From: Alys Date: Fri, 1 Jan 2016 16:06:52 +1000 Subject: [PATCH 03/14] revert change to Bailey about Party Hats now that the code behaviour has changed --- website/views/shared/new-stuff.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index 936d877885..661bff9cd4 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -4,7 +4,7 @@ h2 12/30/2015 - NEW YEAR'S EVE CELEBRATION: PARTY HATS, NEW YEAR'S CARDS, BEEMIN td .npc_matt.pull-right h3 Party Hats - p In honor of the new year, there's a free Party Hat available in the Rewards store! Users who joined Habitica in 2015 get the ever-handsome Absurd Party Hat, and users who already received one last year get the Silly Party Hat or the new Ridiculous Party Hat. Once you've bought it, you'll have it forever. Enjoy! + p In honor of the new year, there's a free Party Hat available in the Rewards store! New users get the ever-handsome Absurd Party Hat, and users who already received one last year get the Silly Party Hat or the new Ridiculous Party Hat. These hats will be available to purchase until January 31st, but once you've bought them, you'll have them forever. Enjoy! p.small.muted by Lemoness and SabreCat tr td From 69c5192f70ab1d6415639ac4f29cc2c770c42c69 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 10:32:28 -0600 Subject: [PATCH 04/14] tests(api): Add async to every it, before and beforeEach in v2 tests --- test/api/v2/groups/GET-groups.test.js | 10 ++-- test/api/v2/groups/GET-groups_id.test.js | 46 +++++++++---------- test/api/v2/groups/POST-groups.test.js | 26 +++++------ test/api/v2/groups/POST-groups_id.test.js | 8 ++-- .../api/v2/groups/POST-groups_id_join.test.js | 16 +++---- .../v2/groups/POST-groups_id_leave.test.js | 20 ++++---- .../POST-groups_id_removeMember.test.js | 6 +-- .../groups/chat/DELETE-groups_id_chat.test.js | 6 +-- .../v2/groups/chat/GET-groups_id_chat.test.js | 4 +- .../groups/chat/POST-groups_id_chat.test.js | 6 +-- .../POST-groups_id_chat_id_clearflags.test.js | 18 ++++---- .../chat/POST-groups_id_chat_id_flag.test.js | 22 ++++----- .../chat/POST-groups_id_chat_id_like.test.js | 18 ++++---- test/api/v2/register/POST-register.test.js | 40 ++++++++-------- test/api/v2/status/GET-status.test.js | 2 +- test/api/v2/user/DELETE-user.test.js | 24 +++++----- test/api/v2/user/GET-user.test.js | 8 ++-- test/api/v2/user/GET-user_tags.test.js | 4 +- test/api/v2/user/GET-user_tags_id.test.js | 6 +-- test/api/v2/user/PUT-user.test.js | 8 ++-- .../anonymized/GET-user_anonymized.test.js | 16 +++---- .../POST-user_batch-update.test.js | 8 ++-- .../user/pushDevice/POST-pushDevice.test.js | 4 +- .../api/v2/user/tasks/DELETE-tasks_id.test.js | 8 ++-- test/api/v2/user/tasks/GET-tasks.test.js | 4 +- test/api/v2/user/tasks/GET-tasks_id.test.js | 8 ++-- test/api/v2/user/tasks/POST-tasks.test.js | 14 +++--- test/api/v2/user/tasks/PUT-tasks_id.test.js | 12 ++--- 28 files changed, 186 insertions(+), 186 deletions(-) diff --git a/test/api/v2/groups/GET-groups.test.js b/test/api/v2/groups/GET-groups.test.js index ef2915b538..ea881787f7 100644 --- a/test/api/v2/groups/GET-groups.test.js +++ b/test/api/v2/groups/GET-groups.test.js @@ -10,7 +10,7 @@ describe('GET /groups', () => { let user; - before(() => { + before(async () => { let leader, createdGroup; // Set up a world with a mixture of public and private guilds @@ -83,7 +83,7 @@ describe('GET /groups', () => { context('tavern passed in as query', () => { - it('returns only the tavern', () => { + it('returns only the tavern', async () => { return expect(user.get('/groups', null, {type: 'tavern'})) .to.eventually.have.a.lengthOf(1) .and.to.have.deep.property('[0]') @@ -93,7 +93,7 @@ describe('GET /groups', () => { context('party passed in as query', () => { - it('returns only the user\'s party', () => { + it('returns only the user\'s party', async () => { return expect(user.get('/groups', null, {type: 'party'})) .to.eventually.have.a.lengthOf(1) .and.to.have.deep.property('[0]') @@ -103,7 +103,7 @@ describe('GET /groups', () => { context('public passed in as query', () => { - it('returns all public guilds', () => { + it('returns all public guilds', async () => { return expect(user.get('/groups', null, {type: 'public'})) .to.eventually.have.a.lengthOf(NUMBER_OF_PUBLIC_GUILDS); }); @@ -111,7 +111,7 @@ describe('GET /groups', () => { context('guilds passed in as query', () => { - it('returns all guilds user is a part of ', () => { + it('returns all guilds user is a part of ', async () => { return expect(user.get('/groups', null, {type: 'guilds'})) .to.eventually.have.a.lengthOf(NUMBER_OF_USERS_GUILDS); }); diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js index e3c9139e20..55fe7fa9c0 100644 --- a/test/api/v2/groups/GET-groups_id.test.js +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -19,7 +19,7 @@ describe('GET /groups/:id', () => { context(`Member of a ${groupType}`, () => { let leader, member, createdGroup; - before(() => { + before(async () => { return createAndPopulateGroup({ members: 30, groupDetails: { @@ -34,7 +34,7 @@ describe('GET /groups/:id', () => { }); }); - it('returns the group object', () => { + it('returns the group object', async () => { return member.get(`/groups/${createdGroup._id}`).then((group) => { expect(group._id).to.eql(createdGroup._id); expect(group.name).to.eql(createdGroup.name); @@ -43,7 +43,7 @@ describe('GET /groups/:id', () => { }); }); - it('transforms members array to an array of user objects', () => { + it('transforms members array to an array of user objects', async () => { return member.get(`/groups/${createdGroup._id}`).then((group) => { let member = group.members[0]; expect(member._id).to.exist; @@ -54,7 +54,7 @@ describe('GET /groups/:id', () => { }); }); - it('transforms leader id to leader object', () => { + it('transforms leader id to leader object', async () => { return member.get(`/groups/${createdGroup._id}`).then((group) => { expect(group.leader._id).to.eql(leader._id); expect(group.leader.profile.name).to.eql(leader.profile.name); @@ -65,7 +65,7 @@ describe('GET /groups/:id', () => { }); }); - it('includes the user in the members list', () => { + it('includes the user in the members list', async () => { return member.get(`/groups/${createdGroup._id}`).then((group) => { let members = group.members; let userInGroup = find(members, (user) => { @@ -123,7 +123,7 @@ describe('GET /groups/:id', () => { flagCount: 3, }; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { name: 'test guild', @@ -145,13 +145,13 @@ describe('GET /groups/:id', () => { context('non-admin', () => { let nonAdmin; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((user) => { nonAdmin = user; }); }); - it('does not include messages with a flag count of 2 or greater', () => { + it('does not include messages with a flag count of 2 or greater', async () => { return nonAdmin.get(`/groups/${group._id}`).then((_group) => { expect(_group.chat).to.have.lengthOf(3); expect(_group.chat[0].id).to.eql(chat1.id); @@ -160,7 +160,7 @@ describe('GET /groups/:id', () => { }); }); - it('does not include user ids in flags object', () => { + it('does not include user ids in flags object', async () => { return nonAdmin.get(`/groups/${group._id}`).then((_group) => { let chatWithOneFlag = _group.chat[2]; expect(chatWithOneFlag.id).to.eql(chat3.id); @@ -173,7 +173,7 @@ describe('GET /groups/:id', () => { context('admin', () => { let admin; - beforeEach(() => { + beforeEach(async () => { return generateUser({ 'contributor.admin': true, }).then((user) => { @@ -181,7 +181,7 @@ describe('GET /groups/:id', () => { }); }); - it('includes all messages', () => { + it('includes all messages', async () => { return admin.get(`/groups/${group._id}`).then((_group) => { expect(_group.chat).to.have.lengthOf(5); expect(_group.chat[0].id).to.eql(chat1.id); @@ -192,7 +192,7 @@ describe('GET /groups/:id', () => { }); }); - it('includes user ids in flags object', () => { + it('includes user ids in flags object', async () => { return admin.get(`/groups/${group._id}`).then((_group) => { let chatWithOneFlag = _group.chat[2]; expect(chatWithOneFlag.id).to.eql(chat3.id); @@ -206,7 +206,7 @@ describe('GET /groups/:id', () => { context('Non-member of a public guild', () => { let leader, nonMember, createdGroup; - before(() => { + before(async () => { return createAndPopulateGroup({ members: 1, groupDetails: { @@ -223,7 +223,7 @@ describe('GET /groups/:id', () => { }); }); - it('returns the group object for a non-member', () => { + it('returns the group object for a non-member', async () => { return nonMember.get(`/groups/${createdGroup._id}`) .then((group) => { expect(group._id).to.eql(createdGroup._id); @@ -233,7 +233,7 @@ describe('GET /groups/:id', () => { }); }); - it('does not include user in members list', () => { + it('does not include user in members list', async () => { return nonMember.get(`/groups/${createdGroup._id}`).then((group) => { let userInGroup = find(group.members, (user) => { return nonMember._id === user._id; @@ -246,7 +246,7 @@ describe('GET /groups/:id', () => { context('Private Guilds', () => { let leader, nonMember, createdGroup; - before(() => { + before(async () => { return createAndPopulateGroup({ members: 1, groupDetails: { @@ -263,7 +263,7 @@ describe('GET /groups/:id', () => { }); }); - it('does not return the group object for a non-member', () => { + it('does not return the group object for a non-member', async () => { return expect(nonMember.get(`/groups/${createdGroup._id}`)) .to.eventually.be.rejected.and.eql({ code: 404, @@ -275,7 +275,7 @@ describe('GET /groups/:id', () => { context('Non-member of a party', () => { let leader, nonMember, createdGroup; - before(() => { + before(async () => { return createAndPopulateGroup({ members: 1, groupDetails: { @@ -292,7 +292,7 @@ describe('GET /groups/:id', () => { }); }); - it('does not return the group object for a non-member', () => { + it('does not return the group object for a non-member', async () => { return expect(nonMember.get(`/groups/${createdGroup._id}`)) .to.eventually.be.rejected.and.eql({ code: 404, @@ -304,7 +304,7 @@ describe('GET /groups/:id', () => { context('Member of a party', () => { let leader, member, createdGroup; - before(() => { + before(async () => { return createAndPopulateGroup({ members: 1, groupDetails: { @@ -319,7 +319,7 @@ describe('GET /groups/:id', () => { }); }); - it('returns the user\'s party if an id of "party" is passed in', () => { + it('returns the user\'s party if an id of "party" is passed in', async () => { return member.get('/groups/party') .then((group) => { expect(group._id).to.eql(createdGroup._id); @@ -333,13 +333,13 @@ describe('GET /groups/:id', () => { context('Non-existent group', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; }); }); - it('returns error if group does not exist', () => { + it('returns error if group does not exist', async () => { return expect(user.get('/groups/group-that-does-not-exist')) .to.eventually.be.rejected.and.eql({ code: 404, diff --git a/test/api/v2/groups/POST-groups.test.js b/test/api/v2/groups/POST-groups.test.js index 90c3cbfcaa..c898915cff 100644 --- a/test/api/v2/groups/POST-groups.test.js +++ b/test/api/v2/groups/POST-groups.test.js @@ -8,11 +8,11 @@ describe('POST /groups', () => { context('All groups', () => { let leader; - beforeEach(async () => { + beforeEach(async async () => { leader = await generateUser(); }); - xit('returns defaults? (TODO: it\'s possible to create a group without a type. Should the group default to party? Should we require type to be set?', () => { + xit('returns defaults? (TODO: it\'s possible to create a group without a type. Should the group default to party? Should we require type to be set?', async () => { return leader.post('/groups').then((group) => { expect(group._id).to.exist; expect(group.name).to.eql(`${leader.profile.name}'s group`); @@ -21,7 +21,7 @@ describe('POST /groups', () => { }); }); - it('returns a group object', async () => { + it('returns a group object', async async () => { let group = await leader.post('/groups', { name: 'Test Group', type: 'party', @@ -39,7 +39,7 @@ describe('POST /groups', () => { expect(group.memberCount).to.eql(1); }); - it('returns a populated members array', async () => { + it('returns a populated members array', async async () => { let party = await leader.post('/groups', { type: 'party', }); @@ -55,11 +55,11 @@ describe('POST /groups', () => { context('Parties', () => { let leader; - beforeEach(async () => { + beforeEach(async async () => { leader = await generateUser(); }); - it('allows party creation without gems', async () => { + it('allows party creation without gems', async async () => { let party = await leader.post('/groups', { type: 'party', }); @@ -67,7 +67,7 @@ describe('POST /groups', () => { expect(party._id).to.exist; }); - it('prevents party creation if user is already in party', async () => { + it('prevents party creation if user is already in party', async async () => { let party = await generateGroup(leader, { type: 'party', }); @@ -78,7 +78,7 @@ describe('POST /groups', () => { }); }); - xit('prevents creating a public party. TODO: it is possible to create a public party. Should we send back an error? Automatically switch the privacy to private?', () => { + xit('prevents creating a public party. TODO: it is possible to create a public party. Should we send back an error? Automatically switch the privacy to private?', async () => { return expect(leader.post('/groups', { type: 'party', privacy: 'public', @@ -92,13 +92,13 @@ describe('POST /groups', () => { context('Guilds', () => { let leader; - beforeEach(async () => { + beforeEach(async async () => { leader = await generateUser({ balance: 2, }); }); - it('prevents guild creation when user does not have enough gems', async () => { + it('prevents guild creation when user does not have enough gems', async async () => { let userWithoutGems = await generateUser({ balance: 0.75, }); @@ -109,7 +109,7 @@ describe('POST /groups', () => { }); }); - it('can create a public guild', async () => { + it('can create a public guild', async async () => { let guild = await leader.post('/groups', { type: 'guild', privacy: 'public', @@ -118,7 +118,7 @@ describe('POST /groups', () => { expect(guild.leader).to.eql(leader._id); }); - it('can create a private guild', async () => { + it('can create a private guild', async async () => { let privateGuild = await leader.post('/groups', { type: 'guild', privacy: 'private', @@ -127,7 +127,7 @@ describe('POST /groups', () => { expect(privateGuild.leader).to.eql(leader._id); }); - it('deducts gems from user and adds them to guild bank', async () => { + it('deducts gems from user and adds them to guild bank', async async () => { let guild = await leader.post('/groups', { type: 'guild', privacy: 'private', diff --git a/test/api/v2/groups/POST-groups_id.test.js b/test/api/v2/groups/POST-groups_id.test.js index d96d1c4088..fd628505d1 100644 --- a/test/api/v2/groups/POST-groups_id.test.js +++ b/test/api/v2/groups/POST-groups_id.test.js @@ -9,7 +9,7 @@ describe('POST /groups/:id', () => { context('user is not the leader of the group', () => { let user, otherUser, groupUserDoesNotOwn; - beforeEach(() => { + beforeEach(async () => { return Promise.all([ generateUser({ balance: 10 }), generateUser({ balance: 10 }), @@ -28,7 +28,7 @@ describe('POST /groups/:id', () => { }); }); - it('does not allow user to update group', () => { + it('does not allow user to update group', async () => { return expect(user.post(`/groups/${groupUserDoesNotOwn._id}`, { name: 'Change' })).to.eventually.be.rejected.and.eql({ @@ -41,7 +41,7 @@ describe('POST /groups/:id', () => { context('user is the leader of the group', () => { let user, usersGroup; - beforeEach(() => { + beforeEach(async () => { return generateUser({ balance: 10, }).then((_user) => { @@ -57,7 +57,7 @@ describe('POST /groups/:id', () => { }); }); - it('allows user to update group', () => { + it('allows user to update group', async () => { return user.post(`/groups/${usersGroup._id}`, { name: 'New Group Title', description: 'New group description', diff --git a/test/api/v2/groups/POST-groups_id_join.test.js b/test/api/v2/groups/POST-groups_id_join.test.js index 6613dabc78..4016ea1853 100644 --- a/test/api/v2/groups/POST-groups_id_join.test.js +++ b/test/api/v2/groups/POST-groups_id_join.test.js @@ -19,7 +19,7 @@ describe('POST /groups/:id/join', () => { context(`user has invitation to a ${groupType}`, () => { let group, invitee; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: data.type, @@ -32,7 +32,7 @@ describe('POST /groups/:id/join', () => { }); }); - it(`allows user to join a ${groupType}`, () => { + it(`allows user to join a ${groupType}`, async () => { return invitee.post(`/groups/${group._id}/join`).then((res) => { return invitee.get(`/groups/${group._id}`); }).then((_group) => { @@ -54,7 +54,7 @@ describe('POST /groups/:id/join', () => { context(`user does not have an invitation to a ${groupType}`, () => { let group, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: data.type, @@ -68,7 +68,7 @@ describe('POST /groups/:id/join', () => { }); }); - it(`does not allow user to join a ${groupType}`, () => { + it(`does not allow user to join a ${groupType}`, async () => { return expect(user.post(`/groups/${group._id}/join`).then((res) => { return user.get(`/groups/${group._id}`); })).to.eventually.be.rejected.and.eql({ @@ -82,7 +82,7 @@ describe('POST /groups/:id/join', () => { context('user does not have an invitation to a public group', () => { let group, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -96,7 +96,7 @@ describe('POST /groups/:id/join', () => { }); }); - it('allows user to join a public guild', () => { + it('allows user to join a public guild', async () => { return user.post(`/groups/${group._id}/join`).then((res) => { return user.get(`/groups/${group._id}`); }).then((_group) => { @@ -113,7 +113,7 @@ describe('POST /groups/:id/join', () => { context('public guild has no leader', () => { let user, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { name: 'test guild', @@ -130,7 +130,7 @@ describe('POST /groups/:id/join', () => { }); }); - it('makes the joining user the leader', () => { + it('makes the joining user the leader', async () => { return expect(user.post(`/groups/${group._id}/join`).then((result) => { return user.get(`/groups/${group._id}`); })).to.eventually.have.deep.property('leader._id', user._id); diff --git a/test/api/v2/groups/POST-groups_id_leave.test.js b/test/api/v2/groups/POST-groups_id_leave.test.js index 946cca406d..31bdbf2c8b 100644 --- a/test/api/v2/groups/POST-groups_id_leave.test.js +++ b/test/api/v2/groups/POST-groups_id_leave.test.js @@ -15,7 +15,7 @@ describe('POST /groups/:id/leave', () => { context('user is a non-leader member of a guild', () => { let user, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ members: 3, groupDetails: { @@ -29,7 +29,7 @@ describe('POST /groups/:id/leave', () => { }); }); - it('leaves the group', () => { + it('leaves the group', async () => { return user.post(`/groups/${group._id}/leave`).then((result) => { return user.get(`/groups/${group._id}`); }).then((group) => { @@ -44,7 +44,7 @@ describe('POST /groups/:id/leave', () => { context('user is the last member of a public guild', () => { let user, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { name: 'test guild', @@ -57,7 +57,7 @@ describe('POST /groups/:id/leave', () => { }); }); - it('leaves the group accessible', () => { + it('leaves the group accessible', async () => { return expect(user.post(`/groups/${group._id}/leave`).then((result) => { return user.get(`/groups/${group._id}`); })).to.eventually.have.property('_id', group._id); @@ -67,7 +67,7 @@ describe('POST /groups/:id/leave', () => { context('user is the last member of a private group', () => { let user, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { name: 'test guild', @@ -80,7 +80,7 @@ describe('POST /groups/:id/leave', () => { }); }); - it('group is deleted', () => { + it('group is deleted', async () => { return expect(user.post(`/groups/${group._id}/leave`).then((result) => { return checkExistence('groups', group._id); })).to.eventually.eql(false); @@ -90,7 +90,7 @@ describe('POST /groups/:id/leave', () => { context('user is the last member of a private group with pending invites', () => { let user, invitee1, invitee2, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ invites: 2, groupDetails: { @@ -106,7 +106,7 @@ describe('POST /groups/:id/leave', () => { }); }); - it('deletes the group invitations from users', () => { + it('deletes the group invitations from users', async () => { return user.post(`/groups/${group._id}/leave`).then((result) => { return Promise.all([ expect(invitee1.get(`/user`)) @@ -123,7 +123,7 @@ describe('POST /groups/:id/leave', () => { context('user is the last member of a party with pending invites', () => { let user, invitee1, invitee2, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ invites: 2, groupDetails: { @@ -139,7 +139,7 @@ describe('POST /groups/:id/leave', () => { }); }); - it('deletes the group invitations from users', () => { + it('deletes the group invitations from users', async () => { return user.post(`/groups/${group._id}/leave`).then((result) => { return Promise.all([ expect(invitee1.get(`/user`)) diff --git a/test/api/v2/groups/POST-groups_id_removeMember.test.js b/test/api/v2/groups/POST-groups_id_removeMember.test.js index 27214b8050..9cbd090222 100644 --- a/test/api/v2/groups/POST-groups_id_removeMember.test.js +++ b/test/api/v2/groups/POST-groups_id_removeMember.test.js @@ -18,7 +18,7 @@ describe('POST /groups/:id/removeMember', () => { context('user is the leader of a guild', () => { let leader, member, group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ members: 1, groupDetails: { @@ -33,7 +33,7 @@ describe('POST /groups/:id/removeMember', () => { }); }); - it('does not allow leader to remove themselves', () => { + it('does not allow leader to remove themselves', async () => { return expect(leader.post(`/groups/${group._id}/removeMember`, null, { uuid: leader._id, })).to.eventually.be.rejected.and.eql({ @@ -42,7 +42,7 @@ describe('POST /groups/:id/removeMember', () => { }); }); - it('can remove other members of guild', () => { + it('can remove other members of guild', async () => { return leader.post(`/groups/${group._id}/removeMember`, null, { uuid: member._id, }).then((res) => { diff --git a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js index c097a6454b..964159c1bf 100644 --- a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js @@ -7,7 +7,7 @@ import { describe('DELETE /groups/:id/chat', () => { let group, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -23,7 +23,7 @@ describe('DELETE /groups/:id/chat', () => { }); }); - it('deletes a message', () => { + it('deletes a message', async () => { return user.del(`/groups/${group._id}/chat/${message.id}`).then((res) => { return user.get(`/groups/${group._id}/chat/`); }).then((messages) => { @@ -31,7 +31,7 @@ describe('DELETE /groups/:id/chat', () => { }); }); - it('returns an error is message does not exist', () => { + it('returns an error is message does not exist', async () => { return expect(user.del(`/groups/${group._id}/chat/some-fake-id`)).to.eventually.be.rejected.and.eql({ code: 404, text: t('messageGroupChatNotFound'), diff --git a/test/api/v2/groups/chat/GET-groups_id_chat.test.js b/test/api/v2/groups/chat/GET-groups_id_chat.test.js index f5a440a1cb..fac510bb03 100644 --- a/test/api/v2/groups/chat/GET-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/GET-groups_id_chat.test.js @@ -9,7 +9,7 @@ describe('GET /groups/:id/chat', () => { context('group with multiple messages', () => { let group, member, message1, message2, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -31,7 +31,7 @@ describe('GET /groups/:id/chat', () => { }); }); - it('gets messages', () => { + it('gets messages', async () => { return user.get(`/groups/${group._id}/chat`).then((messages) => { expect(messages).to.have.length(2); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat.test.js b/test/api/v2/groups/chat/POST-groups_id_chat.test.js index d476643ea6..781d5e7bc4 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat.test.js @@ -8,7 +8,7 @@ describe('POST /groups/:id/chat', () => { let group, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -20,7 +20,7 @@ describe('POST /groups/:id/chat', () => { }); }); - it('creates a chat message', () => { + it('creates a chat message', async () => { return user.post(`/groups/${group._id}/chat`, null, { message: 'Test Message', }).then((res) => { @@ -33,7 +33,7 @@ describe('POST /groups/:id/chat', () => { }); }); - it('does not post an empty message', () => { + it('does not post an empty message', async () => { return expect(user.post(`/groups/${group._id}/chat`, null, { message: '', })).to.eventually.be.rejected.and.eql({ diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js index 8b98ce98f6..7cb5f20c59 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js @@ -7,7 +7,7 @@ import { describe('POST /groups/:id/chat/:id/clearflags', () => { let group; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -28,13 +28,13 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { context('non admin', () => { let nonadmin; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((user) => { nonadmin = user; }); }); - it('cannot clear flags', () => { + it('cannot clear flags', async () => { return expect(nonadmin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`)) .to.eventually.be.rejected.and.eql({ code: 401, @@ -46,7 +46,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { context('admin', () => { let admin; - beforeEach(() => { + beforeEach(async () => { return generateUser({ 'contributor.admin': true, }).then((user) => { @@ -54,7 +54,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); }); - it('clears flags', () => { + it('clears flags', async () => { return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { @@ -62,7 +62,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); }); - it('leaves old flags on the flag object', () => { + it('leaves old flags on the flag object', async () => { return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { @@ -70,7 +70,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); }); - it('returns error if message does not exist', () => { + it('returns error if message does not exist', async () => { return expect(admin.post(`/groups/${group._id}/chat/non-existant-message/clearflags`)) .to.eventually.be.rejected.and.eql({ code: 404, @@ -82,7 +82,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { context('admin user, group with multiple messages', () => { let admin, author, group, member; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((user) => { author = user; @@ -109,7 +109,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); }); - it('changes only the message that is flagged', () => { + it('changes only the message that is flagged', async () => { return admin.post(`/groups/${group._id}/chat/message-to-unflag/clearflags`).then((messages) => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js index d640c8035e..076f05321f 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js @@ -9,7 +9,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { context('another member\'s message', () => { let group, member, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -27,7 +27,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('flags message', () => { + it('flags message', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { return user.get(`/groups/${group._id}/chat`); }).then((messages) => { @@ -36,7 +36,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('cannot flag the same message twice', () => { + it('cannot flag the same message twice', async () => { return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { return user.post(`/groups/${group._id}/chat/${message.id}/flag`); })).to.eventually.be.rejected.and.eql({ @@ -49,7 +49,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { context('own message', () => { let group, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -66,7 +66,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('cannot flag message', () => { + it('cannot flag message', async () => { return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`)) .to.eventually.be.rejected.and.eql({ code: 401, @@ -78,7 +78,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { context('nonexistant message', () => { let group, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -90,7 +90,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('returns error', () => { + it('returns error', async () => { return expect(user.post(`/groups/${group._id}/chat/non-existant-message/flag`)) .to.eventually.be.rejected.and.eql({ code: 404, @@ -102,7 +102,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { context('group with multiple messages', () => { let admin, author, group, member, message, user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((user) => { author = user; @@ -131,7 +131,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('changes only the message that is flagged', () => { + it('changes only the message that is flagged', async () => { return user.post(`/groups/${group._id}/chat/message-to-be-flagged/flag`).then((messages) => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { @@ -160,7 +160,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { context('admin flagging a message', () => { let group, member, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -182,7 +182,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); }); - it('sets flagCount to 5', () => { + it('sets flagCount to 5', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { return user.get(`/groups/${group._id}/chat`); }).then((messages) => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js index bbe06bb1fb..7b5623d7a0 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js @@ -9,7 +9,7 @@ describe('POST /groups/:id/chat/:id/like', () => { context('another member\'s message', () => { let group, member, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -27,14 +27,14 @@ describe('POST /groups/:id/chat/:id/like', () => { }); }); - it('likes message', () => { + it('likes message', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { let message = messages[0]; expect(message.likes[user._id]).to.eql(true); }); }); - it('returns the message object', () => { + it('returns the message object', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { let message = messages[0]; expect(message.text).to.eql('Group member message'); @@ -47,7 +47,7 @@ describe('POST /groups/:id/chat/:id/like', () => { context('own message', () => { let group, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -64,7 +64,7 @@ describe('POST /groups/:id/chat/:id/like', () => { }); }); - it('cannot like message', () => { + it('cannot like message', async () => { return expect(user.post(`/groups/${group._id}/chat/${message.id}/like`)) .to.eventually.be.rejected.and.eql({ code: 401, @@ -76,7 +76,7 @@ describe('POST /groups/:id/chat/:id/like', () => { context('group with multiple messages', () => { let admin, author, group, member, message, user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((user) => { author = user; @@ -105,7 +105,7 @@ describe('POST /groups/:id/chat/:id/like', () => { }); }); - it('changes only the message that is liked', () => { + it('changes only the message that is liked', async () => { return user.post(`/groups/${group._id}/chat/message-to-be-liked/like`).then((messages) => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { @@ -134,7 +134,7 @@ describe('POST /groups/:id/chat/:id/like', () => { context('nonexistant message', () => { let group, message, user; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -146,7 +146,7 @@ describe('POST /groups/:id/chat/:id/like', () => { }); }); - it('returns error', () => { + it('returns error', async () => { return expect(user.post(`/groups/${group._id}/chat/non-existant-message/like`)) .to.eventually.be.rejected.and.eql({ code: 404, diff --git a/test/api/v2/register/POST-register.test.js b/test/api/v2/register/POST-register.test.js index a4d1987002..a49d4aa67d 100644 --- a/test/api/v2/register/POST-register.test.js +++ b/test/api/v2/register/POST-register.test.js @@ -9,7 +9,7 @@ import { each } from 'lodash'; describe('POST /register', () => { context('username and email are free', () => { - it('registers a new user', () => { + it('registers a new user', async () => { let api = requester(); let username = generateRandomUserName(); let email = `${username}@example.com`; @@ -27,7 +27,7 @@ describe('POST /register', () => { }); }); - it('requires password and confirmPassword to match', () => { + it('requires password and confirmPassword to match', async () => { let api = requester(); let username = generateRandomUserName(); let email = `${username}@example.com`; @@ -45,7 +45,7 @@ describe('POST /register', () => { }); }); - it('requires a username', () => { + it('requires a username', async () => { let api = requester(); let email = `${generateRandomUserName()}@example.com`; let password = 'password'; @@ -61,7 +61,7 @@ describe('POST /register', () => { }); }); - it('requires an email', () => { + it('requires an email', async () => { let api = requester(); let username = generateRandomUserName(); let password = 'password'; @@ -77,7 +77,7 @@ describe('POST /register', () => { }); }); - it('requires a password', () => { + it('requires a password', async () => { let api = requester(); let username = generateRandomUserName(); let email = `${username}@example.com`; @@ -96,7 +96,7 @@ describe('POST /register', () => { context('login is already taken', () => { let username, email; - beforeEach(() => { + beforeEach(async () => { username = generateRandomUserName(); email = `${username}@example.com`; return generateUser({ @@ -106,7 +106,7 @@ describe('POST /register', () => { }); }); - it('rejects if username is already taken', () => { + it('rejects if username is already taken', async () => { let api = requester(); let uniqueEmail = `${generateRandomUserName()}@exampe.com`; let password = 'password'; @@ -122,7 +122,7 @@ describe('POST /register', () => { }); }); - it('rejects if email is already taken', () => { + it('rejects if email is already taken', async () => { let api = requester(); let uniqueUsername = generateRandomUserName(); let password = 'password'; @@ -142,14 +142,14 @@ describe('POST /register', () => { context('successful login via api', () => { let api, username, email, password; - beforeEach(() => { + beforeEach(async () => { api = requester(); username = generateRandomUserName(); email = `${username}@example.com`; password = 'password'; }); - it('sets all site tour values to -2 (already seen)', () => { + it('sets all site tour values to -2 (already seen)', async () => { return api.post('/register', { username: username, email: email, @@ -164,7 +164,7 @@ describe('POST /register', () => { }); }); - it('populates user with default todos, not no other task types', () => { + it('populates user with default todos, not no other task types', async () => { return api.post('/register', { username: username, email: email, @@ -178,7 +178,7 @@ describe('POST /register', () => { }); }); - it('populates user with default tags', () => { + it('populates user with default tags', async () => { return api.post('/register', { username: username, email: email, @@ -193,14 +193,14 @@ describe('POST /register', () => { context('successful login with habitica-web header', () => { let api, username, email, password; - beforeEach(() => { + beforeEach(async () => { api = requester({}, {'x-client': 'habitica-web'}); username = generateRandomUserName(); email = `${username}@example.com`; password = 'password'; }); - it('sets all common tutorial flags to true', () => { + it('sets all common tutorial flags to true', async () => { return api.post('/register', { username: username, email: email, @@ -215,7 +215,7 @@ describe('POST /register', () => { }); }); - it('populates user with default todos, habits, and rewards', () => { + it('populates user with default todos, habits, and rewards', async () => { return api.post('/register', { username: username, email: email, @@ -229,7 +229,7 @@ describe('POST /register', () => { }); }); - it('populates user with default tags', () => { + it('populates user with default tags', async () => { return api.post('/register', { username: username, email: email, @@ -244,14 +244,14 @@ describe('POST /register', () => { context('successful login with habitica-android header', () => { let api, username, email, password; - beforeEach(() => { + beforeEach(async () => { api = requester({}, {'x-client': 'habitica-android'}); username = generateRandomUserName(); email = `${username}@example.com`; password = 'password'; }); - it('sets all common tutorial flags to true', () => { + it('sets all common tutorial flags to true', async () => { return api.post('/register', { username: username, email: email, @@ -266,7 +266,7 @@ describe('POST /register', () => { }); }); - it('populates user with default todos, habits, and rewards', () => { + it('populates user with default todos, habits, and rewards', async () => { return api.post('/register', { username: username, email: email, @@ -280,7 +280,7 @@ describe('POST /register', () => { }); }); - it('populates user with default tags', () => { + it('populates user with default tags', async () => { return api.post('/register', { username: username, email: email, diff --git a/test/api/v2/status/GET-status.test.js b/test/api/v2/status/GET-status.test.js index 2ac91b55e8..6e9974537c 100644 --- a/test/api/v2/status/GET-status.test.js +++ b/test/api/v2/status/GET-status.test.js @@ -1,7 +1,7 @@ import {requester} from '../../../helpers/api-integration.helper'; describe('Status', () => { - it('returns a status of up when server is up', () => { + it('returns a status of up when server is up', async () => { let api = requester(); return expect(api.get('/status')) diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js index 49e0b869fb..e035aec072 100644 --- a/test/api/v2/user/DELETE-user.test.js +++ b/test/api/v2/user/DELETE-user.test.js @@ -10,13 +10,13 @@ import { find } from 'lodash'; describe('DELETE /user', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((usr) => { user = usr; }); }); - it('deletes the user', () => { + it('deletes the user', async () => { return expect(user.del('/user').then((fetchedUser) => { return checkExistence('users', user._id); })).to.eventually.eql(false); @@ -29,7 +29,7 @@ describe('DELETE /user', () => { context('last member of a party', () => { let party; - beforeEach(() => { + beforeEach(async () => { return generateGroup(user, { type: 'party', privacy: 'private' @@ -38,7 +38,7 @@ describe('DELETE /user', () => { }); }); - it('deletes party when user is the only member', () => { + it('deletes party when user is the only member', async () => { return expect(user.del('/user').then((result) => { return checkExistence('groups', party._id); })).to.eventually.eql(false); @@ -48,7 +48,7 @@ describe('DELETE /user', () => { context('last member of a private guild', () => { let guild; - beforeEach(() => { + beforeEach(async () => { return generateGroup(user, { type: 'guild', privacy: 'private' @@ -57,7 +57,7 @@ describe('DELETE /user', () => { }); }); - it('deletes guild when user is the only member', () => { + it('deletes guild when user is the only member', async () => { return expect(user.del('/user').then((result) => { return checkExistence('groups', guild._id); })).to.eventually.eql(false); @@ -67,7 +67,7 @@ describe('DELETE /user', () => { context('groups user is leader of', () => { let group, oldLeader, newLeader; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -81,7 +81,7 @@ describe('DELETE /user', () => { }); }); - it('chooses new group leader for any group user was the leader of', () => { + it('chooses new group leader for any group user was the leader of', async () => { return oldLeader.del('/user').then((res) => { return newLeader.get(`/groups/${group._id}`); }).then((guild) => { @@ -94,7 +94,7 @@ describe('DELETE /user', () => { context('groups user is a part of', () => { let group1, group2, userToDelete, otherUser; - beforeEach(() => { + beforeEach(async () => { return generateUser({ balance: 10, }).then((user) => { @@ -122,7 +122,7 @@ describe('DELETE /user', () => { }); }); - it('removes user from all groups user was a part of', () => { + it('removes user from all groups user was a part of', async () => { return userToDelete.del('/user').then((res) => { return otherUser.get(`/groups/${group1._id}`); }).then((fetchedGroup1) => { @@ -145,7 +145,7 @@ describe('DELETE /user', () => { context('pending invitation to group', () => { let group, userToDelete, otherUser; - beforeEach(() => { + beforeEach(async () => { return createAndPopulateGroup({ groupDetails: { type: 'guild', @@ -160,7 +160,7 @@ describe('DELETE /user', () => { }); }); - it('removes invitations from groups', () => { + it('removes invitations from groups', async () => { return userToDelete.del('/user').then((res) => { return otherUser.get(`/groups/${group._id}`); }).then((fetchedGroup) => { diff --git a/test/api/v2/user/GET-user.test.js b/test/api/v2/user/GET-user.test.js index 4a245bf58a..5544f0f7c6 100644 --- a/test/api/v2/user/GET-user.test.js +++ b/test/api/v2/user/GET-user.test.js @@ -5,24 +5,24 @@ import { describe('GET /user', () => { let user; - before(async () => { + before(async async () => { let usr = await generateUser(); user = await usr.get('/user'); }); - it('gets the user object', () => { + it('gets the user object', async () => { expect(user._id).to.eql(user._id); expect(user.auth.local.username).to.eql(user.auth.local.username); expect(user.todos).to.eql(user.todos); expect(user.items).to.eql(user.items); }); - it('does not include password information', () => { + it('does not include password information', async () => { expect(user.auth.local.hashed_password).to.not.exist expect(user.auth.local.salt).to.not.exist }); - it('does not include api token', () => { + it('does not include api token', async () => { expect(user.apiToken).to.not.exist }); }); diff --git a/test/api/v2/user/GET-user_tags.test.js b/test/api/v2/user/GET-user_tags.test.js index 9e0e23dbc1..92a6e3d6f3 100644 --- a/test/api/v2/user/GET-user_tags.test.js +++ b/test/api/v2/user/GET-user_tags.test.js @@ -5,13 +5,13 @@ import { describe('GET /user/tags', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((usr) => { user = usr; }); }); - it('gets the user\'s tags', () => { + it('gets the user\'s tags', async () => { return expect(user.get('/user/tags')) .to.eventually.eql(user.tags); }); diff --git a/test/api/v2/user/GET-user_tags_id.test.js b/test/api/v2/user/GET-user_tags_id.test.js index 6cdda69949..3e185f07ae 100644 --- a/test/api/v2/user/GET-user_tags_id.test.js +++ b/test/api/v2/user/GET-user_tags_id.test.js @@ -6,18 +6,18 @@ import { describe('GET /user/tags/id', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((usr) => { user = usr; }); }); - it('gets a user\'s tag by id', () => { + it('gets a user\'s tag by id', async () => { return expect(user.get('/user/tags/' + user.tags[0].id)) .to.eventually.eql(user.tags[0]); }); - it('fails for non-existent tags', () => { + it('fails for non-existent tags', async () => { return expect(user.get('/user/tags/not-an-id')) .to.eventually.be.rejected.and.eql({ code: 404, diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index ac0b8a3dd5..2055125e94 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -8,14 +8,14 @@ import { each } from 'lodash'; describe('PUT /user', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((usr) => { user = usr; }); }); context('allowed operations', () => { - it('updates the user', () => { + it('updates the user', async () => { return user.put('/user', { 'profile.name' : 'Frodo', 'preferences.costume': true, @@ -40,7 +40,7 @@ describe('PUT /user', () => { }; each(protectedOperations, (data, testName) => { - it(`does not allow updating ${testName}`, () => { + it(`does not allow updating ${testName}`, async () => { let errorText = []; each(data, (value, operation) => { errorText.push(t('messageUserOperationProtected', { operation: operation })); @@ -59,7 +59,7 @@ describe('PUT /user', () => { }; each(protectedOperations, (data, testName) => { - it(`does not allow updating ${testName}`, () => { + it(`does not allow updating ${testName}`, async () => { let errorText = []; each(data, (value, operation) => { errorText.push(t('messageUserOperationProtected', { operation: operation })); diff --git a/test/api/v2/user/anonymized/GET-user_anonymized.test.js b/test/api/v2/user/anonymized/GET-user_anonymized.test.js index 82fc5b61ff..9a4a4aa0cc 100644 --- a/test/api/v2/user/anonymized/GET-user_anonymized.test.js +++ b/test/api/v2/user/anonymized/GET-user_anonymized.test.js @@ -6,7 +6,7 @@ import { each } from 'lodash'; describe('GET /user/anonymized', () => { let user; - before(() => { + before(async () => { return generateUser({ 'inbox.messages' : { 'the-message-id' : { @@ -47,24 +47,24 @@ describe('GET /user/anonymized', () => { }); }); - it('retains user id', () => { + it('retains user id', async () => { expect(user._id).to.exist; }); - it('removes credentials and financial information', () => { + it('removes credentials and financial information', async () => { expect(user.apiToken).to.not.exist; expect(user.auth.local).to.not.exist; expect(user.auth.facebook).to.not.exist; expect(user.purchased.plan).to.not.exist; }); - it('removes profile information', () => { + it('removes profile information', async () => { expect(user.profile).to.not.exist; expect(user.contributor).to.not.exist; expect(user.achievements.challenges).to.not.exist; }); - it('removes social information', () => { + it('removes social information', async () => { expect(user.newMessages).to.not.exist; expect(user.invitations).to.not.exist; expect(user.items.special.nyeReceived).to.not.exist; @@ -75,7 +75,7 @@ describe('GET /user/anonymized', () => { }); }); - it('anonymizes task info', () => { + it('anonymizes task info', async () => { each(['habits', 'todos', 'dailys', 'rewards'], (tasks) => { each(user[tasks], (task) => { expect(task.text).to.eql('task text'); @@ -88,14 +88,14 @@ describe('GET /user/anonymized', () => { }); }); - it('anonymizes tags', () => { + it('anonymizes tags', async () => { each(user.tags, (tag) => { expect(tag.name).to.eql('tag'); expect(tag.challenge).to.eql('challenge'); }); }); - it('removes webhooks', () => { + it('removes webhooks', async () => { expect(user.webhooks).to.not.exist; }); }); diff --git a/test/api/v2/user/batch-update/POST-user_batch-update.test.js b/test/api/v2/user/batch-update/POST-user_batch-update.test.js index 6c0024e526..30a85c3607 100644 --- a/test/api/v2/user/batch-update/POST-user_batch-update.test.js +++ b/test/api/v2/user/batch-update/POST-user_batch-update.test.js @@ -8,14 +8,14 @@ import { each } from 'lodash'; describe('POST /user/batch-update', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((usr) => { user = usr; }); }); context('allowed operations', () => { - it('makes batch operations', () => { + it('makes batch operations', async () => { let task; return user.get('/user/tasks').then((tasks) => { @@ -45,7 +45,7 @@ describe('POST /user/batch-update', () => { each(protectedOperations, (operation, description) => { - it(`it sends back a 500 error for ${description} operation`, () => { + it(`it sends back a 500 error for ${description} operation`, async () => { return expect(user.post('/user/batch-update', [ { op: operation }, ])).to.eventually.be.rejected.and.eql({ @@ -57,7 +57,7 @@ describe('POST /user/batch-update', () => { }); context('unknown operations', () => { - it('sends back a 500 error', () => { + it('sends back a 500 error', async () => { return expect(user.post('/user/batch-update', [ {op: 'aNotRealOperation'}, ])).to.eventually.be.rejected.and.eql({ diff --git a/test/api/v2/user/pushDevice/POST-pushDevice.test.js b/test/api/v2/user/pushDevice/POST-pushDevice.test.js index 3a467b21a9..f75e1a541b 100644 --- a/test/api/v2/user/pushDevice/POST-pushDevice.test.js +++ b/test/api/v2/user/pushDevice/POST-pushDevice.test.js @@ -5,13 +5,13 @@ import { describe('POST /user/pushDevice', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; }); }); - it('registers a device id', () => { + it('registers a device id', async () => { return user.post('/user/pushDevice', { regId: '123123', type: 'android', diff --git a/test/api/v2/user/tasks/DELETE-tasks_id.test.js b/test/api/v2/user/tasks/DELETE-tasks_id.test.js index 521f1552f5..f7e8e2347b 100644 --- a/test/api/v2/user/tasks/DELETE-tasks_id.test.js +++ b/test/api/v2/user/tasks/DELETE-tasks_id.test.js @@ -6,14 +6,14 @@ import { describe('DELETE /user/tasks/:id', () => { let user, task; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; task = user.todos[0]; }); }); - it('deletes a task', () => { + it('deletes a task', async () => { return expect(user.del(`/user/tasks/${task.id}`) .then((res) => { return user.get(`/user/tasks/${task.id}`); @@ -23,7 +23,7 @@ describe('DELETE /user/tasks/:id', () => { }); }); - it('returns an error if the task does not exist', () => { + it('returns an error if the task does not exist', async () => { return expect(user.del('/user/tasks/task-that-does-not-exist')) .to.eventually.be.rejected.and.eql({ code: 404, @@ -31,7 +31,7 @@ describe('DELETE /user/tasks/:id', () => { }); }); - it('does not delete another user\'s task', () => { + it('does not delete another user\'s task', async () => { return expect(generateUser().then((otherUser) => { let otherUsersTask = otherUser.todos[0]; return user.del(`/user/tasks/${otherUsersTask.id}`); diff --git a/test/api/v2/user/tasks/GET-tasks.test.js b/test/api/v2/user/tasks/GET-tasks.test.js index 8e8023d000..5ff1ff3192 100644 --- a/test/api/v2/user/tasks/GET-tasks.test.js +++ b/test/api/v2/user/tasks/GET-tasks.test.js @@ -6,7 +6,7 @@ import { describe('GET /user/tasks/', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser({ dailys: [ {text: 'daily', type: 'daily'}, @@ -19,7 +19,7 @@ describe('GET /user/tasks/', () => { }); }); - it('gets all tasks', () => { + it('gets all tasks', async () => { return user.get(`/user/tasks/`).then((tasks) => { expect(tasks).to.be.an('array'); expect(tasks.length).to.be.greaterThan(3); diff --git a/test/api/v2/user/tasks/GET-tasks_id.test.js b/test/api/v2/user/tasks/GET-tasks_id.test.js index 30aa9ef29f..275296cb36 100644 --- a/test/api/v2/user/tasks/GET-tasks_id.test.js +++ b/test/api/v2/user/tasks/GET-tasks_id.test.js @@ -6,14 +6,14 @@ import { describe('GET /user/tasks/:id', () => { let user, task; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; task = user.todos[0]; }); }); - it('gets a task', () => { + it('gets a task', async () => { return user.get(`/user/tasks/${task.id}`).then((foundTask) => { expect(foundTask.id).to.eql(task.id); expect(foundTask.text).to.eql(task.text); @@ -23,7 +23,7 @@ describe('GET /user/tasks/:id', () => { }); }); - it('returns an error if the task does not exist', () => { + it('returns an error if the task does not exist', async () => { return expect(user.get('/user/tasks/task-that-does-not-exist')) .to.eventually.be.rejected.and.eql({ code: 404, @@ -31,7 +31,7 @@ describe('GET /user/tasks/:id', () => { }); }); - it('does not get another user\'s task', () => { + it('does not get another user\'s task', async () => { return expect(generateUser().then((otherUser) => { let otherUsersTask = otherUser.todos[0]; diff --git a/test/api/v2/user/tasks/POST-tasks.test.js b/test/api/v2/user/tasks/POST-tasks.test.js index 44bc468352..3615cede5a 100644 --- a/test/api/v2/user/tasks/POST-tasks.test.js +++ b/test/api/v2/user/tasks/POST-tasks.test.js @@ -7,24 +7,24 @@ describe('POST /user/tasks', () => { let user; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; }); }); - it('creates a task', () => { + it('creates a task', async () => { return user.post('/user/tasks').then((task) => { expect(task.id).to.exist; }); }); - it('creates a habit by default', () => { + it('creates a habit by default', async () => { return expect(user.post('/user/tasks')) .to.eventually.have.property('type', 'habit'); }); - it('creates a task with specified values', () => { + it('creates a task with specified values', async () => { return user.post('/user/tasks', { type: 'daily', text: 'My task', @@ -38,7 +38,7 @@ describe('POST /user/tasks', () => { }); }); - it('does not create a task with an id that already exists', () => { + it('does not create a task with an id that already exists', async () => { let todo = user.todos[0]; return expect(user.post('/user/tasks', { @@ -49,7 +49,7 @@ describe('POST /user/tasks', () => { }); }); - xit('TODO: no error is thrown - throws a 500 validation error if invalid type is posted', () => { + xit('TODO: no error is thrown - throws a 500 validation error if invalid type is posted', async () => { return expect(user.post('/user/tasks', { type: 'not-valid', })).to.eventually.be.rejected.and.eql({ @@ -58,7 +58,7 @@ describe('POST /user/tasks', () => { }); }); - xit('TODO: no error is thrown - throws a 500 validation error if invalid data is posted', () => { + xit('TODO: no error is thrown - throws a 500 validation error if invalid data is posted', async () => { return expect(user.post('/user/tasks', { frequency: 'not-valid', })).to.eventually.be.rejected.and.eql({ diff --git a/test/api/v2/user/tasks/PUT-tasks_id.test.js b/test/api/v2/user/tasks/PUT-tasks_id.test.js index ad5243da13..054ed7fcd2 100644 --- a/test/api/v2/user/tasks/PUT-tasks_id.test.js +++ b/test/api/v2/user/tasks/PUT-tasks_id.test.js @@ -6,14 +6,14 @@ import { describe('PUT /user/tasks/:id', () => { let user, task; - beforeEach(() => { + beforeEach(async () => { return generateUser().then((_user) => { user = _user; task = user.todos[0]; }); }); - it('does not update the id of the task', () => { + it('does not update the id of the task', async () => { return user.put(`/user/tasks/${task.id}`, { id: 'some-thing', }).then((updatedTask) => { @@ -22,7 +22,7 @@ describe('PUT /user/tasks/:id', () => { }); }); - it('does not update the type of the task', () => { + it('does not update the type of the task', async () => { return user.put(`/user/tasks/${task.id}`, { type: 'habit', }).then((updatedTask) => { @@ -31,7 +31,7 @@ describe('PUT /user/tasks/:id', () => { }); }); - it('updates text, attribute, priority, value and notes', () => { + it('updates text, attribute, priority, value and notes', async () => { return user.put(`/user/tasks/${task.id}`, { text: 'new text', notes: 'new notes', @@ -47,7 +47,7 @@ describe('PUT /user/tasks/:id', () => { }); }); - it('returns an error if the task does not exist', () => { + it('returns an error if the task does not exist', async () => { return expect(user.put('/user/tasks/task-id-that-does-not-exist')) .to.eventually.be.rejected.and.eql({ code: 404, @@ -55,7 +55,7 @@ describe('PUT /user/tasks/:id', () => { }); }); - it('does not update another user\'s task', () => { + it('does not update another user\'s task', async () => { return expect(generateUser().then((otherUser) => { let otherUsersTask = otherUser.todos[0]; return user.put(`/user/tasks/${otherUsersTask._id}`, { From ed753f4921995afe2cf0dbfb8abb791413330a78 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 12:56:43 -0600 Subject: [PATCH 05/14] tests(api): Remove extra async --- test/api/v2/groups/POST-groups.test.js | 22 +++++++++++----------- test/api/v2/user/GET-user.test.js | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/test/api/v2/groups/POST-groups.test.js b/test/api/v2/groups/POST-groups.test.js index c898915cff..4d1dfb2d23 100644 --- a/test/api/v2/groups/POST-groups.test.js +++ b/test/api/v2/groups/POST-groups.test.js @@ -8,7 +8,7 @@ describe('POST /groups', () => { context('All groups', () => { let leader; - beforeEach(async async () => { + beforeEach(async () => { leader = await generateUser(); }); @@ -21,7 +21,7 @@ describe('POST /groups', () => { }); }); - it('returns a group object', async async () => { + it('returns a group object', async () => { let group = await leader.post('/groups', { name: 'Test Group', type: 'party', @@ -39,7 +39,7 @@ describe('POST /groups', () => { expect(group.memberCount).to.eql(1); }); - it('returns a populated members array', async async () => { + it('returns a populated members array', async () => { let party = await leader.post('/groups', { type: 'party', }); @@ -55,11 +55,11 @@ describe('POST /groups', () => { context('Parties', () => { let leader; - beforeEach(async async () => { + beforeEach(async () => { leader = await generateUser(); }); - it('allows party creation without gems', async async () => { + it('allows party creation without gems', async () => { let party = await leader.post('/groups', { type: 'party', }); @@ -67,7 +67,7 @@ describe('POST /groups', () => { expect(party._id).to.exist; }); - it('prevents party creation if user is already in party', async async () => { + it('prevents party creation if user is already in party', async () => { let party = await generateGroup(leader, { type: 'party', }); @@ -92,13 +92,13 @@ describe('POST /groups', () => { context('Guilds', () => { let leader; - beforeEach(async async () => { + beforeEach(async () => { leader = await generateUser({ balance: 2, }); }); - it('prevents guild creation when user does not have enough gems', async async () => { + it('prevents guild creation when user does not have enough gems', async () => { let userWithoutGems = await generateUser({ balance: 0.75, }); @@ -109,7 +109,7 @@ describe('POST /groups', () => { }); }); - it('can create a public guild', async async () => { + it('can create a public guild', async () => { let guild = await leader.post('/groups', { type: 'guild', privacy: 'public', @@ -118,7 +118,7 @@ describe('POST /groups', () => { expect(guild.leader).to.eql(leader._id); }); - it('can create a private guild', async async () => { + it('can create a private guild', async () => { let privateGuild = await leader.post('/groups', { type: 'guild', privacy: 'private', @@ -127,7 +127,7 @@ describe('POST /groups', () => { expect(privateGuild.leader).to.eql(leader._id); }); - it('deducts gems from user and adds them to guild bank', async async () => { + it('deducts gems from user and adds them to guild bank', async () => { let guild = await leader.post('/groups', { type: 'guild', privacy: 'private', diff --git a/test/api/v2/user/GET-user.test.js b/test/api/v2/user/GET-user.test.js index 5544f0f7c6..681997408c 100644 --- a/test/api/v2/user/GET-user.test.js +++ b/test/api/v2/user/GET-user.test.js @@ -5,7 +5,7 @@ import { describe('GET /user', () => { let user; - before(async async () => { + before(async () => { let usr = await generateUser(); user = await usr.get('/user'); }); From 70b23d06290734e60cdad9c13b1f432e392a6c05 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 13:17:25 -0600 Subject: [PATCH 06/14] tests(api): Convert simple user generation to use await --- test/api/v2/groups/GET-groups_id.test.js | 8 ++------ .../groups/chat/POST-groups_id_chat_id_clearflags.test.js | 4 +--- test/api/v2/user/DELETE-user.test.js | 4 +--- test/api/v2/user/GET-user_tags.test.js | 4 +--- test/api/v2/user/GET-user_tags_id.test.js | 4 +--- test/api/v2/user/PUT-user.test.js | 4 +--- .../v2/user/batch-update/POST-user_batch-update.test.js | 4 +--- test/api/v2/user/pushDevice/POST-pushDevice.test.js | 4 +--- test/api/v2/user/tasks/DELETE-tasks_id.test.js | 6 ++---- test/api/v2/user/tasks/GET-tasks_id.test.js | 6 ++---- test/api/v2/user/tasks/POST-tasks.test.js | 4 +--- test/api/v2/user/tasks/PUT-tasks_id.test.js | 6 ++---- 12 files changed, 16 insertions(+), 42 deletions(-) diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js index 55fe7fa9c0..5c6f6925b6 100644 --- a/test/api/v2/groups/GET-groups_id.test.js +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -146,9 +146,7 @@ describe('GET /groups/:id', () => { let nonAdmin; beforeEach(async () => { - return generateUser().then((user) => { - nonAdmin = user; - }); + nonAdmin = await generateUser(); }); it('does not include messages with a flag count of 2 or greater', async () => { @@ -334,9 +332,7 @@ describe('GET /groups/:id', () => { let user; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - }); + user = await generateUser(); }); it('returns error if group does not exist', async () => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js index 7cb5f20c59..54cb954943 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js @@ -29,9 +29,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { let nonadmin; beforeEach(async () => { - return generateUser().then((user) => { - nonadmin = user; - }); + nonadmin = await generateUser(); }); it('cannot clear flags', async () => { diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js index e035aec072..245a175cfd 100644 --- a/test/api/v2/user/DELETE-user.test.js +++ b/test/api/v2/user/DELETE-user.test.js @@ -11,9 +11,7 @@ describe('DELETE /user', () => { let user; beforeEach(async () => { - return generateUser().then((usr) => { - user = usr; - }); + user = await generateUser(); }); it('deletes the user', async () => { diff --git a/test/api/v2/user/GET-user_tags.test.js b/test/api/v2/user/GET-user_tags.test.js index 92a6e3d6f3..f03be34b04 100644 --- a/test/api/v2/user/GET-user_tags.test.js +++ b/test/api/v2/user/GET-user_tags.test.js @@ -6,9 +6,7 @@ describe('GET /user/tags', () => { let user; beforeEach(async () => { - return generateUser().then((usr) => { - user = usr; - }); + user = await generateUser(); }); it('gets the user\'s tags', async () => { diff --git a/test/api/v2/user/GET-user_tags_id.test.js b/test/api/v2/user/GET-user_tags_id.test.js index 3e185f07ae..1c6f76ded1 100644 --- a/test/api/v2/user/GET-user_tags_id.test.js +++ b/test/api/v2/user/GET-user_tags_id.test.js @@ -7,9 +7,7 @@ describe('GET /user/tags/id', () => { let user; beforeEach(async () => { - return generateUser().then((usr) => { - user = usr; - }); + user = await generateUser(); }); it('gets a user\'s tag by id', async () => { diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index 2055125e94..dfe955af22 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -9,9 +9,7 @@ describe('PUT /user', () => { let user; beforeEach(async () => { - return generateUser().then((usr) => { - user = usr; - }); + user = await generateUser(); }); context('allowed operations', () => { diff --git a/test/api/v2/user/batch-update/POST-user_batch-update.test.js b/test/api/v2/user/batch-update/POST-user_batch-update.test.js index 30a85c3607..9d8072c0ba 100644 --- a/test/api/v2/user/batch-update/POST-user_batch-update.test.js +++ b/test/api/v2/user/batch-update/POST-user_batch-update.test.js @@ -9,9 +9,7 @@ describe('POST /user/batch-update', () => { let user; beforeEach(async () => { - return generateUser().then((usr) => { - user = usr; - }); + user = await generateUser(); }); context('allowed operations', () => { diff --git a/test/api/v2/user/pushDevice/POST-pushDevice.test.js b/test/api/v2/user/pushDevice/POST-pushDevice.test.js index f75e1a541b..75a5270547 100644 --- a/test/api/v2/user/pushDevice/POST-pushDevice.test.js +++ b/test/api/v2/user/pushDevice/POST-pushDevice.test.js @@ -6,9 +6,7 @@ describe('POST /user/pushDevice', () => { let user; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - }); + user = await generateUser(); }); it('registers a device id', async () => { diff --git a/test/api/v2/user/tasks/DELETE-tasks_id.test.js b/test/api/v2/user/tasks/DELETE-tasks_id.test.js index f7e8e2347b..2df05d894c 100644 --- a/test/api/v2/user/tasks/DELETE-tasks_id.test.js +++ b/test/api/v2/user/tasks/DELETE-tasks_id.test.js @@ -7,10 +7,8 @@ describe('DELETE /user/tasks/:id', () => { let user, task; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - task = user.todos[0]; - }); + user = await generateUser(); + task = user.todos[0]; }); it('deletes a task', async () => { diff --git a/test/api/v2/user/tasks/GET-tasks_id.test.js b/test/api/v2/user/tasks/GET-tasks_id.test.js index 275296cb36..9f092c1693 100644 --- a/test/api/v2/user/tasks/GET-tasks_id.test.js +++ b/test/api/v2/user/tasks/GET-tasks_id.test.js @@ -7,10 +7,8 @@ describe('GET /user/tasks/:id', () => { let user, task; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - task = user.todos[0]; - }); + user = await generateUser(); + task = user.todos[0]; }); it('gets a task', async () => { diff --git a/test/api/v2/user/tasks/POST-tasks.test.js b/test/api/v2/user/tasks/POST-tasks.test.js index 3615cede5a..096c48678e 100644 --- a/test/api/v2/user/tasks/POST-tasks.test.js +++ b/test/api/v2/user/tasks/POST-tasks.test.js @@ -8,9 +8,7 @@ describe('POST /user/tasks', () => { let user; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - }); + user = await generateUser(); }); it('creates a task', async () => { diff --git a/test/api/v2/user/tasks/PUT-tasks_id.test.js b/test/api/v2/user/tasks/PUT-tasks_id.test.js index 054ed7fcd2..7d63168d8e 100644 --- a/test/api/v2/user/tasks/PUT-tasks_id.test.js +++ b/test/api/v2/user/tasks/PUT-tasks_id.test.js @@ -7,10 +7,8 @@ describe('PUT /user/tasks/:id', () => { let user, task; beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - task = user.todos[0]; - }); + user = await generateUser(); + task = user.todos[0]; }); it('does not update the id of the task', async () => { From 9f9ba2797afd377543062c983b36dd5f0028f18a Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 13:31:11 -0600 Subject: [PATCH 07/14] tests(api): Update complex beforeEachs to use await --- .../POST-groups_id_chat_id_clearflags.test.js | 43 ++++++++--------- .../chat/POST-groups_id_chat_id_flag.test.js | 46 +++++++++---------- .../chat/POST-groups_id_chat_id_like.test.js | 46 +++++++++---------- 3 files changed, 62 insertions(+), 73 deletions(-) diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js index 54cb954943..10aa6b9d83 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js @@ -81,30 +81,27 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { let admin, author, group, member; beforeEach(async () => { - return generateUser().then((user) => { - author = user; - - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-unflag', uuid: author._id, flagCount: 1, flags: {'some-user': true} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, - { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - }).then((res) => { - group = res.group; - return generateUser({ - 'contributor.admin': true, - }); - }).then((user) => { - admin = user; + author = await generateUser(); + admin = await generateUser({ + 'contributor.admin': true, }); + + let groupData = await createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + chat: [ + { id: 'message-to-unflag', uuid: author._id, flagCount: 1, flags: {'some-user': true} }, + { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, + { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, + ], + }, + members: 1, + }); + + group = groupData.group; + member = groupData.members[0]; }); it('changes only the message that is flagged', async () => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js index 076f05321f..eff1be3c32 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js @@ -103,32 +103,28 @@ describe('POST /groups/:id/chat/:id/flag', () => { let admin, author, group, member, message, user; beforeEach(async () => { - return generateUser().then((user) => { - author = user; - - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-be-flagged', uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, - { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - }).then((res) => { - group = res.group; - user = res.leader; - member = res.members[0]; - return generateUser({ - 'contributor.admin': true, - }); - }).then((user) => { - admin = user; + author = await generateUser(); + admin = await generateUser({ + 'contributor.admin': true, }); + + let groupData = await createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + chat: [ + { id: 'message-to-be-flagged', uuid: author._id, flagCount: 0, flags: {} }, + { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, + { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, + ], + }, + members: 1, + }); + + group = groupData.group; + user = groupData.leader; + member = groupData.members[0]; }); it('changes only the message that is flagged', async () => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js index 7b5623d7a0..d1736e3f7e 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js @@ -77,32 +77,28 @@ describe('POST /groups/:id/chat/:id/like', () => { let admin, author, group, member, message, user; beforeEach(async () => { - return generateUser().then((user) => { - author = user; - - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-be-liked', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-like-message', likes: { 'id': true }, uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-like-message', likes: { 'id': true, 'id2': true }, uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, - { id: 'no-likes', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - }).then((res) => { - group = res.group; - user = res.leader; - member = res.members[0]; - return generateUser({ - 'contributor.admin': true, - }); - }).then((user) => { - admin = user; + author = await generateUser(); + admin = await generateUser({ + 'contributor.admin': true, }); + + let groupData = await createAndPopulateGroup({ + groupDetails: { + type: 'guild', + privacy: 'public', + chat: [ + { id: 'message-to-be-liked', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, + { id: '1-like-message', likes: { 'id': true }, uuid: author._id, flagCount: 1, flags: { 'id1': true } }, + { id: '2-like-message', likes: { 'id': true, 'id2': true }, uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: 'no-likes', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, + ], + }, + members: 1, + }); + + group = groupData.group; + user = groupData.leader; + member = groupData.members[0]; }); it('changes only the message that is liked', async () => { From 195fdce9ce3ca6b3e02a235174beca864386aef2 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 19:33:23 -0600 Subject: [PATCH 08/14] tests(api): Update GET groups and GET groups id tests to use await --- test/api/v2/groups/GET-groups.test.js | 100 ++++------- test/api/v2/groups/GET-groups_id.test.js | 216 +++++++++++------------ 2 files changed, 139 insertions(+), 177 deletions(-) diff --git a/test/api/v2/groups/GET-groups.test.js b/test/api/v2/groups/GET-groups.test.js index ea881787f7..81f16c5a82 100644 --- a/test/api/v2/groups/GET-groups.test.js +++ b/test/api/v2/groups/GET-groups.test.js @@ -11,80 +11,59 @@ describe('GET /groups', () => { let user; before(async () => { - let leader, createdGroup; - // Set up a world with a mixture of public and private guilds // Invite user to a few of them - return resetHabiticaDB().then(() => { - return generateUser(); - }).then((_user) => { - user = _user; + await resetHabiticaDB(); - return generateUser({ - balance: 10, - }); - }).then((_user) => { - leader = _user; + user = await generateUser(); + let leader = await generateUser({ balance: 10 }); - let publicGuildWithUserAsMember = generateGroup(leader, { - name: 'public guild - is member', - type: 'guild', - privacy: 'public', - members: [leader._id, user._id], - }); + let publicGuildWithUserAsMember = await generateGroup(leader, { + name: 'public guild - is member', + type: 'guild', + privacy: 'public', + members: [leader._id, user._id], + }); - let publicGuildWithoutUserAsMember = generateGroup(leader, { - name: 'public guild - is not member', - type: 'guild', - privacy: 'public', - }); + let publicGuildWithoutUserAsMember = await generateGroup(leader, { + name: 'public guild - is not member', + type: 'guild', + privacy: 'public', + }); - let privateGuildWithUserAsMember = generateGroup(leader, { - name: 'private guild - is member', - type: 'guild', - privacy: 'private', - members: [leader._id, user._id], - }); + let privateGuildWithUserAsMember = await generateGroup(leader, { + name: 'private guild - is member', + type: 'guild', + privacy: 'private', + members: [leader._id, user._id], + }); - let privateGuildWithoutUserAsMember = generateGroup(leader, { - name: 'private guild - is not member', - type: 'guild', - privacy: 'private', - }); + let privateGuildWithoutUserAsMember = await generateGroup(leader, { + name: 'private guild - is not member', + type: 'guild', + privacy: 'private', + }); - let partyWithoutUserAsMember = generateGroup(leader, { - name: 'party name', - type: 'party', - privacy: 'private', - }); + let partyWithoutUserAsMember = await generateGroup(leader, { + name: 'party name', + type: 'party', + privacy: 'private', + }); - let promises = [ - publicGuildWithUserAsMember, - publicGuildWithoutUserAsMember, - privateGuildWithUserAsMember, - privateGuildWithoutUserAsMember, - partyWithoutUserAsMember, - ]; - - return Promise.all(promises); - }).then((groups) => { - return user.post('/groups', { - type: 'party', - name: 'user\'s party', - privacy: 'private', - }); + let usersParty = await user.post('/groups', { + type: 'party', + name: 'user\'s party', + privacy: 'private', }); }); context('no query passed in', () => { - xit('lists all public guilds, the tavern, user\'s party, and any private guilds that user is a part of - TODO query includes duplicates - IE, tavern is included as tavern and part of public guilds. Refactor so this is not the case'); }); context('tavern passed in as query', () => { - it('returns only the tavern', async () => { - return expect(user.get('/groups', null, {type: 'tavern'})) + await expect(user.get('/groups', null, {type: 'tavern'})) .to.eventually.have.a.lengthOf(1) .and.to.have.deep.property('[0]') .and.to.have.property('_id', 'habitrpg'); @@ -92,9 +71,8 @@ describe('GET /groups', () => { }); context('party passed in as query', () => { - it('returns only the user\'s party', async () => { - return expect(user.get('/groups', null, {type: 'party'})) + await expect(user.get('/groups', null, {type: 'party'})) .to.eventually.have.a.lengthOf(1) .and.to.have.deep.property('[0]') .and.to.have.property('leader', user._id); @@ -102,17 +80,15 @@ describe('GET /groups', () => { }); context('public passed in as query', () => { - it('returns all public guilds', async () => { - return expect(user.get('/groups', null, {type: 'public'})) + await expect(user.get('/groups', null, {type: 'public'})) .to.eventually.have.a.lengthOf(NUMBER_OF_PUBLIC_GUILDS); }); }); context('guilds passed in as query', () => { - it('returns all guilds user is a part of ', async () => { - return expect(user.get('/groups', null, {type: 'guilds'})) + await expect(user.get('/groups', null, {type: 'guilds'})) .to.eventually.have.a.lengthOf(NUMBER_OF_USERS_GUILDS); }); }); diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js index 5c6f6925b6..7ecc9dc319 100644 --- a/test/api/v2/groups/GET-groups_id.test.js +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -20,59 +20,57 @@ describe('GET /groups/:id', () => { let leader, member, createdGroup; before(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 30, groupDetails: { name: 'test guild', type: 'guild', privacy: 'public', }, - }).then((res) => { - leader = res.leader; - member = res.members[0]; - createdGroup = res.group; }); + + leader = groupData.leader; + member = groupData.members[0]; + createdGroup = groupData.group; }); it('returns the group object', async () => { - return member.get(`/groups/${createdGroup._id}`).then((group) => { - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); + let group = await member.get(`/groups/${createdGroup._id}`); + + expect(group._id).to.eql(createdGroup._id); + expect(group.name).to.eql(createdGroup.name); + expect(group.type).to.eql(createdGroup.type); + expect(group.privacy).to.eql(createdGroup.privacy); }); it('transforms members array to an array of user objects', async () => { - return member.get(`/groups/${createdGroup._id}`).then((group) => { - let member = group.members[0]; - expect(member._id).to.exist; - expect(member.profile.name).to.exist; - expect(member.contributor).to.exist; - expect(member.achievements).to.exist; - expect(member.items).to.exist; - }); + let group = await member.get(`/groups/${createdGroup._id}`); + let someMember = group.members[0]; + + expect(someMember._id).to.exist; + expect(someMember.profile.name).to.exist; + expect(someMember.contributor).to.exist; + expect(someMember.achievements).to.exist; + expect(someMember.items).to.exist; }); it('transforms leader id to leader object', async () => { - return member.get(`/groups/${createdGroup._id}`).then((group) => { - expect(group.leader._id).to.eql(leader._id); - expect(group.leader.profile.name).to.eql(leader.profile.name); - expect(group.leader.items).to.exist; - expect(group.leader.stats).to.exist; - expect(group.leader.achievements).to.exist; - expect(group.leader.contributor).to.exist; - }); + let group = await member.get(`/groups/${createdGroup._id}`); + + expect(group.leader._id).to.eql(leader._id); + expect(group.leader.profile.name).to.eql(leader.profile.name); + expect(group.leader.items).to.exist; + expect(group.leader.stats).to.exist; + expect(group.leader.achievements).to.exist; + expect(group.leader.contributor).to.exist; }); it('includes the user in the members list', async () => { - return member.get(`/groups/${createdGroup._id}`).then((group) => { - let members = group.members; - let userInGroup = find(members, (user) => { - return member._id === user._id; - }); - expect(userInGroup).to.be.ok; - }); + let group = await member.get(`/groups/${createdGroup._id}`); + let members = group.members; + let userInGroup = find(group.members, '_id', member._id); + + expect(userInGroup).to.be.exist; }); }); }); @@ -124,7 +122,7 @@ describe('GET /groups/:id', () => { }; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { name: 'test guild', type: 'guild', @@ -137,9 +135,9 @@ describe('GET /groups/:id', () => { chat5, ], }, - }).then((res) => { - group = res.group; }); + + group = groupData.group; }); context('non-admin', () => { @@ -150,21 +148,21 @@ describe('GET /groups/:id', () => { }); it('does not include messages with a flag count of 2 or greater', async () => { - return nonAdmin.get(`/groups/${group._id}`).then((_group) => { - expect(_group.chat).to.have.lengthOf(3); - expect(_group.chat[0].id).to.eql(chat1.id); - expect(_group.chat[1].id).to.eql(chat2.id); - expect(_group.chat[2].id).to.eql(chat3.id); - }); + let fetchedGroup = await nonAdmin.get(`/groups/${group._id}`); + + expect(fetchedGroup.chat).to.have.lengthOf(3); + expect(fetchedGroup.chat[0].id).to.eql(chat1.id); + expect(fetchedGroup.chat[1].id).to.eql(chat2.id); + expect(fetchedGroup.chat[2].id).to.eql(chat3.id); }); it('does not include user ids in flags object', async () => { - return nonAdmin.get(`/groups/${group._id}`).then((_group) => { - let chatWithOneFlag = _group.chat[2]; - expect(chatWithOneFlag.id).to.eql(chat3.id); - expect(chat3.flags).to.eql({ 'user-id': true }); - expect(chatWithOneFlag.flags).to.eql({}); - }); + let fetchedGroup = await nonAdmin.get(`/groups/${group._id}`); + let chatWithOneFlag = fetchedGroup.chat[2]; + + expect(chatWithOneFlag.id).to.eql(chat3.id); + expect(chat3.flags).to.eql({ 'user-id': true }); + expect(chatWithOneFlag.flags).to.eql({}); }); }); @@ -172,31 +170,29 @@ describe('GET /groups/:id', () => { let admin; beforeEach(async () => { - return generateUser({ + admin = await generateUser({ 'contributor.admin': true, - }).then((user) => { - admin = user; }); }); it('includes all messages', async () => { - return admin.get(`/groups/${group._id}`).then((_group) => { - expect(_group.chat).to.have.lengthOf(5); - expect(_group.chat[0].id).to.eql(chat1.id); - expect(_group.chat[1].id).to.eql(chat2.id); - expect(_group.chat[2].id).to.eql(chat3.id); - expect(_group.chat[3].id).to.eql(chat4.id); - expect(_group.chat[4].id).to.eql(chat5.id); - }); + let fetchedGroup = await admin.get(`/groups/${group._id}`); + + expect(fetchedGroup.chat).to.have.lengthOf(5); + expect(fetchedGroup.chat[0].id).to.eql(chat1.id); + expect(fetchedGroup.chat[1].id).to.eql(chat2.id); + expect(fetchedGroup.chat[2].id).to.eql(chat3.id); + expect(fetchedGroup.chat[3].id).to.eql(chat4.id); + expect(fetchedGroup.chat[4].id).to.eql(chat5.id); }); it('includes user ids in flags object', async () => { - return admin.get(`/groups/${group._id}`).then((_group) => { - let chatWithOneFlag = _group.chat[2]; - expect(chatWithOneFlag.id).to.eql(chat3.id); - expect(chat3.flags).to.eql({ 'user-id': true }); - expect(chatWithOneFlag.flags).to.eql(chat3.flags); - }); + let fetchedGroup = await admin.get(`/groups/${group._id}`); + let chatWithOneFlag = fetchedGroup.chat[2]; + + expect(chatWithOneFlag.id).to.eql(chat3.id); + expect(chat3.flags).to.eql({ 'user-id': true }); + expect(chatWithOneFlag.flags).to.eql(chat3.flags); }); }); }); @@ -205,39 +201,34 @@ describe('GET /groups/:id', () => { let leader, nonMember, createdGroup; before(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 1, groupDetails: { name: 'test guild', type: 'guild', privacy: 'public', }, - }).then((res) => { - leader = res.leader; - createdGroup = res.group; - return generateUser(); - }).then((user) => { - nonMember = user; }); + + leader = groupData.leader; + createdGroup = groupData.group; + nonMember = await generateUser(); }); it('returns the group object for a non-member', async () => { - return nonMember.get(`/groups/${createdGroup._id}`) - .then((group) => { - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); + let group = await nonMember.get(`/groups/${createdGroup._id}`); + + expect(group._id).to.eql(createdGroup._id); + expect(group.name).to.eql(createdGroup.name); + expect(group.type).to.eql(createdGroup.type); + expect(group.privacy).to.eql(createdGroup.privacy); }); it('does not include user in members list', async () => { - return nonMember.get(`/groups/${createdGroup._id}`).then((group) => { - let userInGroup = find(group.members, (user) => { - return nonMember._id === user._id; - }); - expect(userInGroup).to.not.be.ok; - }); + let group = await nonMember.get(`/groups/${createdGroup._id}`); + let userInGroup = find(group.members, '_id', nonMember._id); + + expect(userInGroup).to.not.exist; }); }); @@ -245,24 +236,22 @@ describe('GET /groups/:id', () => { let leader, nonMember, createdGroup; before(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 1, groupDetails: { name: 'test guild', type: 'guild', privacy: 'private', }, - }).then((res) => { - leader = res.leader; - createdGroup = res.group; - return generateUser(); - }).then((user) => { - nonMember = user; }); + + leader = groupData.leader; + createdGroup = groupData.group; + nonMember = await generateUser(); }); it('does not return the group object for a non-member', async () => { - return expect(nonMember.get(`/groups/${createdGroup._id}`)) + await expect(nonMember.get(`/groups/${createdGroup._id}`)) .to.eventually.be.rejected.and.eql({ code: 404, text: t('messageGroupNotFound'), @@ -274,24 +263,22 @@ describe('GET /groups/:id', () => { let leader, nonMember, createdGroup; before(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 1, groupDetails: { name: 'test party', type: 'party', privacy: 'private', }, - }).then((res) => { - leader = res.leader; - createdGroup = res.group; - return generateUser(); - }).then((user) => { - nonMember = user; }); + + leader = groupData.leader; + createdGroup = groupData.group; + nonMember = await generateUser(); }); it('does not return the group object for a non-member', async () => { - return expect(nonMember.get(`/groups/${createdGroup._id}`)) + await expect(nonMember.get(`/groups/${createdGroup._id}`)) .to.eventually.be.rejected.and.eql({ code: 404, text: t('messageGroupNotFound'), @@ -303,28 +290,27 @@ describe('GET /groups/:id', () => { let leader, member, createdGroup; before(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 1, groupDetails: { name: 'test party', type: 'party', privacy: 'private', }, - }).then((res) => { - leader = res.leader; - createdGroup = res.group; - member = res.members[0]; }); + + leader = groupData.leader; + createdGroup = groupData.group; + member = groupData.members[0]; }); it('returns the user\'s party if an id of "party" is passed in', async () => { - return member.get('/groups/party') - .then((group) => { - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); + let group = await member.get('/groups/party') + + expect(group._id).to.eql(createdGroup._id); + expect(group.name).to.eql(createdGroup.name); + expect(group.type).to.eql(createdGroup.type); + expect(group.privacy).to.eql(createdGroup.privacy); }); }); @@ -336,7 +322,7 @@ describe('GET /groups/:id', () => { }); it('returns error if group does not exist', async () => { - return expect(user.get('/groups/group-that-does-not-exist')) + await expect(user.get('/groups/group-that-does-not-exist')) .to.eventually.be.rejected.and.eql({ code: 404, text: t('messageGroupNotFound'), From 66572ad9d5b60476500295c022a2e4107cced06b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 1 Jan 2016 19:37:14 -0600 Subject: [PATCH 09/14] tests(api): Update PUT user test to use await --- test/api/v2/user/PUT-user.test.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index dfe955af22..17a6e27400 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -14,15 +14,15 @@ describe('PUT /user', () => { context('allowed operations', () => { it('updates the user', async () => { - return user.put('/user', { + let updatedUser = await user.put('/user', { 'profile.name' : 'Frodo', 'preferences.costume': true, 'stats.hp': 14, - }).then((updatedUser) => { - expect(updatedUser.profile.name).to.eql('Frodo'); - expect(updatedUser.preferences.costume).to.eql(true); - expect(updatedUser.stats.hp).to.eql(14); }); + + expect(updatedUser.profile.name).to.eql('Frodo'); + expect(updatedUser.preferences.costume).to.eql(true); + expect(updatedUser.stats.hp).to.eql(14); }); }); @@ -43,7 +43,8 @@ describe('PUT /user', () => { each(data, (value, operation) => { errorText.push(t('messageUserOperationProtected', { operation: operation })); }); - return expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ + + await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ code: 401, text: errorText, }); @@ -62,7 +63,8 @@ describe('PUT /user', () => { each(data, (value, operation) => { errorText.push(t('messageUserOperationProtected', { operation: operation })); }); - return expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ + + await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ code: 401, text: errorText, }); From c06d87b98b81901a2fd38dd665b58d88fb0840c5 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 2 Jan 2016 18:25:30 -0600 Subject: [PATCH 10/14] lint: Add babel rules to .eslintrc --- .eslintrc | 28 +++++++++++++++++----------- package.json | 4 +++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/.eslintrc b/.eslintrc index 585f456870..7613632120 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,8 @@ { + "parser": "babel-eslint", + "plugins": ["babel"], "rules": { - "indent": [2, 2], + "indent": [2, 2, {"SwitchCase": 1}], "quotes": [2, "single"], "linebreak-style": [2, "unix"], "semi": [2, "always"], @@ -43,13 +45,13 @@ "no-self-compare": 2, "no-return-assign": 2, "no-redeclare": 2, - "strict": [2, "global"], + "strict": [0, "global"], "no-delete-var": 2, "no-label-var": 2, "no-shadow-restricted-names": 2, "no-shadow": [2, { "builtinGlobals": true }], "no-undef-init": 2, - "no-undef": [2, { typeof: true }], + "no-undef": [2, { "typeof": true }], "no-unused-vars": 2, "no-use-before-define": 2, "global-require": 2, @@ -64,7 +66,7 @@ "no-dupe-class-members": 2, "no-this-before-super": 2, "no-var": 2, - "object-shorthand": 2, + "object-shorthand": 0, "prefer-const": 0, "prefer-spread": 2, "prefer-template": 2, @@ -75,15 +77,15 @@ "comma-style": [2, "last"], "comma-dangle": [2, "always-multiline"], "computed-property-spacing": [2, "never"], - "consistent-this": [2, "self"], + "consistent-this": [0, "self"], "func-names": 2, "func-style": [2, "declaration", { "allowArrowFunctions": true }], "block-spacing": [2, "always"], "key-spacing": [2, {"beforeColon": false, "afterColon": true}], "max-nested-callbacks": [2, 3], - "new-cap": 2, + "new-cap": 0, "new-parens": 2, - "newline-after-var": 2, + "newline-after-var": 0, "no-array-constructor": 2, "no-continue": 2, "no-lonely-if": 2, @@ -104,17 +106,21 @@ "space-infix-ops": 2, "space-return-throw-case": 2, "space-unary-ops": 2, - "spaced-comment": [2, "always", { exceptions: ["-"]}], + "spaced-comment": [2, "always", { "exceptions": ["-"]}], "padded-blocks": [2, "never"], - "no-multiple-empty-lines": [2, {max: 2}] + "no-multiple-empty-lines": [2, {"max": 2}], + "generator-star-spacing": 0, + "babel/new-cap": 2, + "babel/object-shorthand": 2, + "babel/no-await-in-loop": 2 }, "env": { "es6": true, "mocha": true, "node": true }, - ecmaFeatures : { - modules: true + "ecmaFeatures" : { + "modules": true }, "extends": "eslint:recommended" } diff --git a/package.json b/package.json index d8e4ac2478..73e723954e 100644 --- a/package.json +++ b/package.json @@ -91,17 +91,18 @@ "coverage": "COVERAGE=true mocha --require register-handlers.js --reporter html-cov > coverage.html; open coverage.html" }, "devDependencies": { + "babel-eslint": "^4.1.6", "chai": "^3.4.0", "chai-as-promised": "^5.1.0", "coveralls": "^2.11.2", "csv": "~0.3.6", "deep-diff": "~0.1.4", "eslint": "^1.9.0", + "eslint-plugin-babel": "^3.0.0", "eslint-plugin-mocha": "^1.1.0", "event-stream": "^3.2.2", "expect.js": "~0.2.0", "istanbul": "^0.3.14", - "phantomjs": "^1.9", "karma": "~0.13.15", "karma-babel-preprocessor": "^5.0.0", "karma-chai-plugins": "~0.6.0", @@ -113,6 +114,7 @@ "mocha": "^2.3.3", "mongodb": "^2.0.46", "mongoskin": "~0.6.1", + "phantomjs": "^1.9", "protractor": "~2.5.1", "rewire": "^2.3.3", "rimraf": "^2.4.3", From 262d04e14c04b112b6635209b41a246b4cbf3dbd Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 2 Jan 2016 18:27:27 -0600 Subject: [PATCH 11/14] lint(tests): Re-enable inting for api tests --- tasks/gulp-eslint.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tasks/gulp-eslint.js b/tasks/gulp-eslint.js index f559c4433c..13fe2281e1 100644 --- a/tasks/gulp-eslint.js +++ b/tasks/gulp-eslint.js @@ -19,7 +19,6 @@ const TEST_FILES = [ './test/**/*.js', // @TODO remove these negations as the test files are cleaned up. '!./test/api-legacy/**/*', - '!./test/api/**/*', '!./test/common/simulations/**/*', '!./test/content/**/*', '!./test/e2e/**/*', From ff1e5ef221adecd3cb24d780d2a80f7900023114 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 2 Jan 2016 18:28:06 -0600 Subject: [PATCH 12/14] lint: Use eslint --fix to automatically fix some issues in api v2 tests --- test/api/v2/groups/GET-groups_id.test.js | 2 +- test/api/v2/groups/POST-groups.test.js | 2 +- test/api/v2/user/DELETE-user.test.js | 12 ++++++------ test/api/v2/user/GET-user.test.js | 6 +++--- .../user/batch-update/POST-user_batch-update.test.js | 12 ++++++------ test/api/v2/user/tasks/DELETE-tasks_id.test.js | 4 ++-- test/api/v2/user/tasks/GET-tasks_id.test.js | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js index 7ecc9dc319..531c050bde 100644 --- a/test/api/v2/groups/GET-groups_id.test.js +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -305,7 +305,7 @@ describe('GET /groups/:id', () => { }); it('returns the user\'s party if an id of "party" is passed in', async () => { - let group = await member.get('/groups/party') + let group = await member.get('/groups/party'); expect(group._id).to.eql(createdGroup._id); expect(group.name).to.eql(createdGroup.name); diff --git a/test/api/v2/groups/POST-groups.test.js b/test/api/v2/groups/POST-groups.test.js index 4d1dfb2d23..75c4128921 100644 --- a/test/api/v2/groups/POST-groups.test.js +++ b/test/api/v2/groups/POST-groups.test.js @@ -113,7 +113,7 @@ describe('POST /groups', () => { let guild = await leader.post('/groups', { type: 'guild', privacy: 'public', - }) + }); expect(guild.leader).to.eql(leader._id); }); diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js index 245a175cfd..fca6d81b6e 100644 --- a/test/api/v2/user/DELETE-user.test.js +++ b/test/api/v2/user/DELETE-user.test.js @@ -37,9 +37,9 @@ describe('DELETE /user', () => { }); it('deletes party when user is the only member', async () => { - return expect(user.del('/user').then((result) => { - return checkExistence('groups', party._id); - })).to.eventually.eql(false); + return expect(user.del('/user').then((result) => { + return checkExistence('groups', party._id); + })).to.eventually.eql(false); }); }); @@ -56,9 +56,9 @@ describe('DELETE /user', () => { }); it('deletes guild when user is the only member', async () => { - return expect(user.del('/user').then((result) => { - return checkExistence('groups', guild._id); - })).to.eventually.eql(false); + return expect(user.del('/user').then((result) => { + return checkExistence('groups', guild._id); + })).to.eventually.eql(false); }); }); diff --git a/test/api/v2/user/GET-user.test.js b/test/api/v2/user/GET-user.test.js index 681997408c..b2aaf7d066 100644 --- a/test/api/v2/user/GET-user.test.js +++ b/test/api/v2/user/GET-user.test.js @@ -18,11 +18,11 @@ describe('GET /user', () => { }); it('does not include password information', async () => { - expect(user.auth.local.hashed_password).to.not.exist - expect(user.auth.local.salt).to.not.exist + expect(user.auth.local.hashed_password).to.not.exist; + expect(user.auth.local.salt).to.not.exist; }); it('does not include api token', async () => { - expect(user.apiToken).to.not.exist + expect(user.apiToken).to.not.exist; }); }); diff --git a/test/api/v2/user/batch-update/POST-user_batch-update.test.js b/test/api/v2/user/batch-update/POST-user_batch-update.test.js index 9d8072c0ba..19c1f7b64b 100644 --- a/test/api/v2/user/batch-update/POST-user_batch-update.test.js +++ b/test/api/v2/user/batch-update/POST-user_batch-update.test.js @@ -47,9 +47,9 @@ describe('POST /user/batch-update', () => { return expect(user.post('/user/batch-update', [ { op: operation }, ])).to.eventually.be.rejected.and.eql({ - code: 500, - text: t('messageUserOperationNotFound', { operation }), - }); + code: 500, + text: t('messageUserOperationNotFound', { operation }), + }); }); }); }); @@ -59,9 +59,9 @@ describe('POST /user/batch-update', () => { return expect(user.post('/user/batch-update', [ {op: 'aNotRealOperation'}, ])).to.eventually.be.rejected.and.eql({ - code: 500, - text: t('messageUserOperationNotFound', { operation: 'aNotRealOperation' }), - }); + code: 500, + text: t('messageUserOperationNotFound', { operation: 'aNotRealOperation' }), + }); }); }); }); diff --git a/test/api/v2/user/tasks/DELETE-tasks_id.test.js b/test/api/v2/user/tasks/DELETE-tasks_id.test.js index 2df05d894c..9c734c2e83 100644 --- a/test/api/v2/user/tasks/DELETE-tasks_id.test.js +++ b/test/api/v2/user/tasks/DELETE-tasks_id.test.js @@ -18,7 +18,7 @@ describe('DELETE /user/tasks/:id', () => { })).to.eventually.be.rejected.and.eql({ code: 404, text: t('messageTaskNotFound'), - }); + }); }); it('returns an error if the task does not exist', async () => { @@ -26,7 +26,7 @@ describe('DELETE /user/tasks/:id', () => { .to.eventually.be.rejected.and.eql({ code: 404, text: t('messageTaskNotFound'), - }); + }); }); it('does not delete another user\'s task', async () => { diff --git a/test/api/v2/user/tasks/GET-tasks_id.test.js b/test/api/v2/user/tasks/GET-tasks_id.test.js index 9f092c1693..c57f9c0038 100644 --- a/test/api/v2/user/tasks/GET-tasks_id.test.js +++ b/test/api/v2/user/tasks/GET-tasks_id.test.js @@ -26,7 +26,7 @@ describe('GET /user/tasks/:id', () => { .to.eventually.be.rejected.and.eql({ code: 404, text: t('messageTaskNotFound'), - }); + }); }); it('does not get another user\'s task', async () => { From 116fffaf4ff05fad4e54b883633c5fd0daea03c6 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 2 Jan 2016 22:19:47 -0600 Subject: [PATCH 13/14] lint: Fix linting errors in api v2 tests --- test/api/v2/groups/GET-groups.test.js | 16 +-- test/api/v2/groups/GET-groups_id.test.js | 28 ++--- test/api/v2/groups/POST-groups.test.js | 3 +- test/api/v2/groups/POST-groups_id.test.js | 31 +++-- .../api/v2/groups/POST-groups_id_join.test.js | 94 ++++++--------- .../v2/groups/POST-groups_id_leave.test.js | 107 ++++++++---------- .../POST-groups_id_removeMember.test.js | 5 +- .../groups/chat/DELETE-groups_id_chat.test.js | 5 +- .../v2/groups/chat/GET-groups_id_chat.test.js | 41 +++---- .../groups/chat/POST-groups_id_chat.test.js | 2 - .../POST-groups_id_chat_id_clearflags.test.js | 17 ++- .../chat/POST-groups_id_chat_id_flag.test.js | 30 +++-- .../chat/POST-groups_id_chat_id_like.test.js | 26 ++--- test/api/v2/register/POST-register.test.js | 107 +++++++++--------- test/api/v2/user/DELETE-user.test.js | 30 +++-- test/api/v2/user/GET-user_tags_id.test.js | 2 +- test/api/v2/user/PUT-user.test.js | 16 +-- .../anonymized/GET-user_anonymized.test.js | 103 ++++++++--------- .../POST-user_batch-update.test.js | 27 ++--- .../api/v2/user/tasks/DELETE-tasks_id.test.js | 13 +-- test/api/v2/user/tasks/GET-tasks.test.js | 1 - test/api/v2/user/tasks/POST-tasks.test.js | 1 - test/api/v2/user/tasks/PUT-tasks_id.test.js | 5 +- 23 files changed, 307 insertions(+), 403 deletions(-) diff --git a/test/api/v2/groups/GET-groups.test.js b/test/api/v2/groups/GET-groups.test.js index 81f16c5a82..0bf191acfb 100644 --- a/test/api/v2/groups/GET-groups.test.js +++ b/test/api/v2/groups/GET-groups.test.js @@ -18,41 +18,41 @@ describe('GET /groups', () => { user = await generateUser(); let leader = await generateUser({ balance: 10 }); - let publicGuildWithUserAsMember = await generateGroup(leader, { + await generateGroup(leader, { name: 'public guild - is member', type: 'guild', privacy: 'public', members: [leader._id, user._id], }); - let publicGuildWithoutUserAsMember = await generateGroup(leader, { + await generateGroup(leader, { name: 'public guild - is not member', type: 'guild', privacy: 'public', }); - let privateGuildWithUserAsMember = await generateGroup(leader, { + await generateGroup(leader, { name: 'private guild - is member', type: 'guild', privacy: 'private', members: [leader._id, user._id], }); - let privateGuildWithoutUserAsMember = await generateGroup(leader, { + await generateGroup(leader, { name: 'private guild - is not member', type: 'guild', privacy: 'private', }); - let partyWithoutUserAsMember = await generateGroup(leader, { - name: 'party name', + await generateGroup(leader, { + name: 'party - is not member', type: 'party', privacy: 'private', }); - let usersParty = await user.post('/groups', { + await user.post('/groups', { + name: 'party - is member', type: 'party', - name: 'user\'s party', privacy: 'private', }); }); diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js index 531c050bde..54ce590222 100644 --- a/test/api/v2/groups/GET-groups_id.test.js +++ b/test/api/v2/groups/GET-groups_id.test.js @@ -5,28 +5,23 @@ import { } from '../../../helpers/api-integration.helper'; import { find, - each + each, } from 'lodash'; describe('GET /groups/:id', () => { - let typesOfGroups = {}; typesOfGroups['public guild'] = { type: 'guild', privacy: 'public' }; typesOfGroups['private guild'] = { type: 'guild', privacy: 'private' }; - typesOfGroups['party'] = { type: 'party', privacy: 'private' }; + typesOfGroups.party = { type: 'party', privacy: 'private' }; - each(typesOfGroups, (groupData, groupType) => { + each(typesOfGroups, (groupDetails, groupType) => { context(`Member of a ${groupType}`, () => { let leader, member, createdGroup; before(async () => { let groupData = await createAndPopulateGroup({ members: 30, - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - }, + groupDetails, }); leader = groupData.leader; @@ -67,10 +62,9 @@ describe('GET /groups/:id', () => { it('includes the user in the members list', async () => { let group = await member.get(`/groups/${createdGroup._id}`); - let members = group.members; let userInGroup = find(group.members, '_id', member._id); - expect(userInGroup).to.be.exist; + expect(userInGroup).to.exist; }); }); }); @@ -198,7 +192,7 @@ describe('GET /groups/:id', () => { }); context('Non-member of a public guild', () => { - let leader, nonMember, createdGroup; + let nonMember, createdGroup; before(async () => { let groupData = await createAndPopulateGroup({ @@ -210,7 +204,6 @@ describe('GET /groups/:id', () => { }, }); - leader = groupData.leader; createdGroup = groupData.group; nonMember = await generateUser(); }); @@ -233,7 +226,7 @@ describe('GET /groups/:id', () => { }); context('Private Guilds', () => { - let leader, nonMember, createdGroup; + let nonMember, createdGroup; before(async () => { let groupData = await createAndPopulateGroup({ @@ -245,7 +238,6 @@ describe('GET /groups/:id', () => { }, }); - leader = groupData.leader; createdGroup = groupData.group; nonMember = await generateUser(); }); @@ -260,7 +252,7 @@ describe('GET /groups/:id', () => { }); context('Non-member of a party', () => { - let leader, nonMember, createdGroup; + let nonMember, createdGroup; before(async () => { let groupData = await createAndPopulateGroup({ @@ -272,7 +264,6 @@ describe('GET /groups/:id', () => { }, }); - leader = groupData.leader; createdGroup = groupData.group; nonMember = await generateUser(); }); @@ -287,7 +278,7 @@ describe('GET /groups/:id', () => { }); context('Member of a party', () => { - let leader, member, createdGroup; + let member, createdGroup; before(async () => { let groupData = await createAndPopulateGroup({ @@ -299,7 +290,6 @@ describe('GET /groups/:id', () => { }, }); - leader = groupData.leader; createdGroup = groupData.group; member = groupData.members[0]; }); diff --git a/test/api/v2/groups/POST-groups.test.js b/test/api/v2/groups/POST-groups.test.js index 75c4128921..d14ea1bee4 100644 --- a/test/api/v2/groups/POST-groups.test.js +++ b/test/api/v2/groups/POST-groups.test.js @@ -68,7 +68,8 @@ describe('POST /groups', () => { }); it('prevents party creation if user is already in party', async () => { - let party = await generateGroup(leader, { + await generateGroup(leader, { + name: 'first party that user attempts to create', type: 'party', }); diff --git a/test/api/v2/groups/POST-groups_id.test.js b/test/api/v2/groups/POST-groups_id.test.js index fd628505d1..eabf3e58c6 100644 --- a/test/api/v2/groups/POST-groups_id.test.js +++ b/test/api/v2/groups/POST-groups_id.test.js @@ -5,7 +5,6 @@ import { } from '../../../helpers/api-integration.helper'; describe('POST /groups/:id', () => { - context('user is not the leader of the group', () => { let user, otherUser, groupUserDoesNotOwn; @@ -30,7 +29,7 @@ describe('POST /groups/:id', () => { it('does not allow user to update group', async () => { return expect(user.post(`/groups/${groupUserDoesNotOwn._id}`, { - name: 'Change' + name: 'Change', })).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageGroupOnlyLeaderCanUpdate'), @@ -42,31 +41,27 @@ describe('POST /groups/:id', () => { let user, usersGroup; beforeEach(async () => { - return generateUser({ + user = await generateUser({ balance: 10, - }).then((_user) => { - user = _user; + }); - return generateGroup(user, { - name: 'Original Group Title', - type: 'guild', - privacy: 'public', - }); - }).then((group) => { - usersGroup = group; + usersGroup = await generateGroup(user, { + name: 'Original Group Title', + type: 'guild', + privacy: 'public', }); }); it('allows user to update group', async () => { - return user.post(`/groups/${usersGroup._id}`, { + await user.post(`/groups/${usersGroup._id}`, { name: 'New Group Title', description: 'New group description', - }).then((group) => { - return user.get(`/groups/${usersGroup._id}`); - }).then((group) => { - expect(group.name).to.eql('New Group Title'); - expect(group.description).to.eql('New group description'); }); + + let group = await user.get(`/groups/${usersGroup._id}`); + + expect(group.name).to.eql('New Group Title'); + expect(group.description).to.eql('New group description'); }); }); }); diff --git a/test/api/v2/groups/POST-groups_id_join.test.js b/test/api/v2/groups/POST-groups_id_join.test.js index 4016ea1853..1c21fe8a58 100644 --- a/test/api/v2/groups/POST-groups_id_join.test.js +++ b/test/api/v2/groups/POST-groups_id_join.test.js @@ -6,7 +6,6 @@ import { import { each, find } from 'lodash'; describe('POST /groups/:id/join', () => { - context('user is already a member of the group', () => { it('returns an error'); }); @@ -14,64 +13,48 @@ describe('POST /groups/:id/join', () => { each({ 'public guild': {type: 'guild', privacy: 'public'}, 'private guild': {type: 'guild', privacy: 'private'}, - 'party': {type: 'party', privacy: 'private'}, - }, (data, groupType) => { + party: {type: 'party', privacy: 'private'}, + }, (groupDetails, groupType) => { context(`user has invitation to a ${groupType}`, () => { let group, invitee; beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: data.type, - privacy: data.privacy, - }, + let groupData = await createAndPopulateGroup({ + groupDetails, invites: 1, - }).then((res) => { - group = res.group; - invitee = res.invitees[0]; }); + group = groupData.group; + invitee = groupData.invitees[0]; }); it(`allows user to join a ${groupType}`, async () => { - return invitee.post(`/groups/${group._id}/join`).then((res) => { - return invitee.get(`/groups/${group._id}`); - }).then((_group) => { - let members = _group.members; - let userInGroup = find(members, (user) => { - return user._id === invitee._id; - }); + await invitee.post(`/groups/${group._id}/join`); - expect(userInGroup).to.exist; - }); + let members = (await invitee.get(`/groups/${group._id}`)).members; + let userInGroup = find(members, '_id', invitee._id); + + expect(userInGroup).to.exist; }); }); }); each({ 'private guild': {type: 'guild', privacy: 'private'}, - 'party': {type: 'party', privacy: 'private'}, - }, (data, groupType) => { + party: {type: 'party', privacy: 'private'}, + }, (groupDetails, groupType) => { context(`user does not have an invitation to a ${groupType}`, () => { let group, user; beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: data.type, - privacy: data.privacy, - }, - }).then((res) => { - group = res.group; - return generateUser(); - }).then((generatedUser) => { - user = generatedUser; + let groupData = await createAndPopulateGroup({ + groupDetails, }); + group = groupData.group; + user = await generateUser(); }); it(`does not allow user to join a ${groupType}`, async () => { - return expect(user.post(`/groups/${group._id}/join`).then((res) => { - return user.get(`/groups/${group._id}`); - })).to.eventually.be.rejected.and.eql({ + await expect(user.post(`/groups/${group._id}/join`)).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageGroupRequiresInvite'), }); @@ -83,30 +66,23 @@ describe('POST /groups/:id/join', () => { let group, user; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { type: 'guild', privacy: 'public', }, - }).then((res) => { - group = res.group; - return generateUser(); - }).then((generatedUser) => { - user = generatedUser; }); + group = groupData.group; + user = await generateUser(); }); it('allows user to join a public guild', async () => { - return user.post(`/groups/${group._id}/join`).then((res) => { - return user.get(`/groups/${group._id}`); - }).then((_group) => { - let members = _group.members; - let userInGroup = find(members, (member) => { - return user._id === user._id; - }); + await user.post(`/groups/${group._id}/join`); - expect(userInGroup).to.exist; - }); + let members = (await user.get(`/groups/${group._id}`)).members; + let userInGroup = find(members, '_id', user._id); + + expect(userInGroup).to.exist; }); }); @@ -114,26 +90,22 @@ describe('POST /groups/:id/join', () => { let user, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { name: 'test guild', type: 'guild', privacy: 'public', }, - }).then((res) => { - group = res.group; - return res.leader.post(`/groups/${group._id}/leave`); - }).then((res) => { - return generateUser(); - }).then((generatedUser) => { - user = generatedUser; }); + group = groupData.group; + await groupData.leader.post(`/groups/${group._id}/leave`); + user = await generateUser(); }); it('makes the joining user the leader', async () => { - return expect(user.post(`/groups/${group._id}/join`).then((result) => { - return user.get(`/groups/${group._id}`); - })).to.eventually.have.deep.property('leader._id', user._id); + await user.post(`/groups/${group._id}/join`); + + await expect(user.get(`/groups/${group._id}`)).to.eventually.have.deep.property('leader._id', user._id); }); }); }); diff --git a/test/api/v2/groups/POST-groups_id_leave.test.js b/test/api/v2/groups/POST-groups_id_leave.test.js index 31bdbf2c8b..dcfa3077f1 100644 --- a/test/api/v2/groups/POST-groups_id_leave.test.js +++ b/test/api/v2/groups/POST-groups_id_leave.test.js @@ -1,13 +1,10 @@ import { checkExistence, createAndPopulateGroup, - generateUser, - translate as t, } from '../../../helpers/api-integration.helper'; import { find } from 'lodash'; describe('POST /groups/:id/leave', () => { - context('user is not member of the group', () => { it('returns an error'); }); @@ -16,28 +13,26 @@ describe('POST /groups/:id/leave', () => { let user, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ members: 3, groupDetails: { name: 'test guild', type: 'guild', privacy: 'public', }, - }).then((res) => { - user = res.members[0]; - group = res.group; }); + + user = groupData.members[0]; + group = groupData.group; }); it('leaves the group', async () => { - return user.post(`/groups/${group._id}/leave`).then((result) => { - return user.get(`/groups/${group._id}`); - }).then((group) => { - let userInGroup = find(group.members, (member) => { - return member._id === user._id; - }); - expect(userInGroup).to.not.be.ok; - }); + await user.post(`/groups/${group._id}/leave`); + + let members = (await user.get(`/groups/${group._id}`)).members; + let userInGroup = find(members, '_id', user._id); + + expect(userInGroup).to.not.be.ok; }); }); @@ -45,22 +40,22 @@ describe('POST /groups/:id/leave', () => { let user, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { name: 'test guild', type: 'guild', privacy: 'public', }, - }).then((res) => { - user = res.leader; - group = res.group; }); + + user = groupData.leader; + group = groupData.group; }); it('leaves the group accessible', async () => { - return expect(user.post(`/groups/${group._id}/leave`).then((result) => { - return user.get(`/groups/${group._id}`); - })).to.eventually.have.property('_id', group._id); + await user.post(`/groups/${group._id}/leave`); + + await expect(user.get(`/groups/${group._id}`)).to.eventually.have.property('_id', group._id); }); }); @@ -68,22 +63,22 @@ describe('POST /groups/:id/leave', () => { let user, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { name: 'test guild', type: 'guild', privacy: 'private', }, - }).then((res) => { - user = res.leader; - group = res.group; }); + + user = groupData.leader; + group = groupData.group; }); it('group is deleted', async () => { - return expect(user.post(`/groups/${group._id}/leave`).then((result) => { - return checkExistence('groups', group._id); - })).to.eventually.eql(false); + await user.post(`/groups/${group._id}/leave`); + + await expect(checkExistence('groups', group._id)).to.eventually.eql(false); }); }); @@ -91,32 +86,26 @@ describe('POST /groups/:id/leave', () => { let user, invitee1, invitee2, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ invites: 2, groupDetails: { name: 'test guild', type: 'guild', privacy: 'private', }, - }).then((res) => { - user = res.leader; - invitee1 = res.invitees[0]; - invitee2 = res.invitees[1]; - group = res.group; }); + + user = groupData.leader; + group = groupData.group; + invitee1 = groupData.invitees[0]; + invitee2 = groupData.invitees[1]; }); it('deletes the group invitations from users', async () => { - return user.post(`/groups/${group._id}/leave`).then((result) => { - return Promise.all([ - expect(invitee1.get(`/user`)) - .to.eventually.have.deep.property('invitations.guilds') - .and.to.be.empty, - expect(invitee2.get(`/user`)) - .to.eventually.have.deep.property('invitations.guilds') - .and.to.be.empty, - ]); - }); + await user.post(`/groups/${group._id}/leave`); + + await expect(invitee1.get(`/user`)).to.eventually.have.deep.property('invitations.guilds').and.to.be.empty; + await expect(invitee2.get(`/user`)).to.eventually.have.deep.property('invitations.guilds').and.to.be.empty; }); }); @@ -124,32 +113,26 @@ describe('POST /groups/:id/leave', () => { let user, invitee1, invitee2, group; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ invites: 2, groupDetails: { - name: 'test party', + name: 'test guild', type: 'party', privacy: 'private', }, - }).then((res) => { - user = res.leader; - invitee1 = res.invitees[0]; - invitee2 = res.invitees[1]; - group = res.group; }); + + user = groupData.leader; + group = groupData.group; + invitee1 = groupData.invitees[0]; + invitee2 = groupData.invitees[1]; }); it('deletes the group invitations from users', async () => { - return user.post(`/groups/${group._id}/leave`).then((result) => { - return Promise.all([ - expect(invitee1.get(`/user`)) - .to.eventually.have.deep.property('invitations.party') - .and.to.be.empty, - expect(invitee2.get(`/user`)) - .to.eventually.have.deep.property('invitations.party') - .and.to.be.empty, - ]); - }); + await user.post(`/groups/${group._id}/leave`); + + await expect(invitee1.get(`/user`)).to.eventually.have.deep.property('invitations.party').and.to.be.empty; + await expect(invitee2.get(`/user`)).to.eventually.have.deep.property('invitations.party').and.to.be.empty; }); }); }); diff --git a/test/api/v2/groups/POST-groups_id_removeMember.test.js b/test/api/v2/groups/POST-groups_id_removeMember.test.js index 9cbd090222..757ac6bcba 100644 --- a/test/api/v2/groups/POST-groups_id_removeMember.test.js +++ b/test/api/v2/groups/POST-groups_id_removeMember.test.js @@ -1,12 +1,9 @@ import { createAndPopulateGroup, - generateGroup, - generateUser, translate as t, } from '../../../helpers/api-integration.helper'; describe('POST /groups/:id/removeMember', () => { - context('user is not member of the group', () => { it('returns an error'); }); @@ -45,7 +42,7 @@ describe('POST /groups/:id/removeMember', () => { it('can remove other members of guild', async () => { return leader.post(`/groups/${group._id}/removeMember`, null, { uuid: member._id, - }).then((res) => { + }).then(() => { return leader.get(`/groups/${group._id}`); }).then((guild) => { expect(guild.members).to.have.a.lengthOf(1); diff --git a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js index 964159c1bf..cf9f519032 100644 --- a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js @@ -1,6 +1,5 @@ import { createAndPopulateGroup, - generateUser, translate as t, } from '../../../../helpers/api-integration.helper'; @@ -17,14 +16,14 @@ describe('DELETE /groups/:id/chat', () => { group = res.group; user = res.leader; - return user.post(`/groups/${group._id}/chat`, null, { message: 'Some message', }); + return user.post(`/groups/${group._id}/chat`, null, { message: 'Some message' }); }).then((res) => { message = res.message; }); }); it('deletes a message', async () => { - return user.del(`/groups/${group._id}/chat/${message.id}`).then((res) => { + return user.del(`/groups/${group._id}/chat/${message.id}`).then(() => { return user.get(`/groups/${group._id}/chat/`); }).then((messages) => { expect(messages).to.have.length(0); diff --git a/test/api/v2/groups/chat/GET-groups_id_chat.test.js b/test/api/v2/groups/chat/GET-groups_id_chat.test.js index fac510bb03..2095d16987 100644 --- a/test/api/v2/groups/chat/GET-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/GET-groups_id_chat.test.js @@ -1,45 +1,38 @@ import { createAndPopulateGroup, - generateUser, - translate as t, } from '../../../../helpers/api-integration.helper'; describe('GET /groups/:id/chat', () => { - context('group with multiple messages', () => { - let group, member, message1, message2, user; + let group, member, user; beforeEach(async () => { - return createAndPopulateGroup({ + let groupData = await createAndPopulateGroup({ groupDetails: { type: 'guild', privacy: 'public', }, members: 1, - }).then((res) => { - group = res.group; - user = res.leader; - member = res.members[0]; - - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); - }).then((res) => { - message1 = res.message; - - return user.post(`/groups/${group._id}/chat`, null, { message: 'User message' }); - }).then((res) => { - message2 = res.message; }); + + group = groupData.group; + user = groupData.leader; + member = groupData.members[0]; + + await member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); + await user.post(`/groups/${group._id}/chat`, null, { message: 'User message' }); }); it('gets messages', async () => { - return user.get(`/groups/${group._id}/chat`).then((messages) => { - expect(messages).to.have.length(2); + let messages = await user.get(`/groups/${group._id}/chat`); - let message = messages[0]; - expect(message.id).to.exist; - expect(message.text).to.exist; - expect(message.uuid).to.exist; - }); + expect(messages).to.have.length(2); + + let message = messages[0]; + + expect(message.id).to.exist; + expect(message.text).to.exist; + expect(message.uuid).to.exist; }); }); }); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat.test.js b/test/api/v2/groups/chat/POST-groups_id_chat.test.js index 781d5e7bc4..4cb2c21dfa 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat.test.js @@ -1,11 +1,9 @@ import { createAndPopulateGroup, - generateUser, translate as t, } from '../../../../helpers/api-integration.helper'; describe('POST /groups/:id/chat', () => { - let group, user; beforeEach(async () => { diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js index 10aa6b9d83..8a84fa300c 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js @@ -53,7 +53,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); it('clears flags', async () => { - return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { + return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then(() => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { expect(messages[0].flagCount).to.eql(0); @@ -61,7 +61,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); it('leaves old flags on the flag object', async () => { - return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then((res) => { + return admin.post(`/groups/${group._id}/chat/message-to-clear/clearflags`).then(() => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { expect(messages[0].flags).to.have.property('some-id', true); @@ -78,7 +78,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { }); context('admin user, group with multiple messages', () => { - let admin, author, group, member; + let admin, author, groupWithMessages; beforeEach(async () => { author = await generateUser(); @@ -92,21 +92,20 @@ describe('POST /groups/:id/chat/:id/clearflags', () => { privacy: 'public', chat: [ { id: 'message-to-unflag', uuid: author._id, flagCount: 1, flags: {'some-user': true} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { id1: true } }, + { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, ], }, members: 1, }); - group = groupData.group; - member = groupData.members[0]; + groupWithMessages = groupData.group; }); it('changes only the message that is flagged', async () => { - return admin.post(`/groups/${group._id}/chat/message-to-unflag/clearflags`).then((messages) => { - return admin.get(`/groups/${group._id}/chat`); + return admin.post(`/groups/${groupWithMessages._id}/chat/message-to-unflag/clearflags`).then(() => { + return admin.get(`/groups/${groupWithMessages._id}/chat`); }).then((messages) => { expect(messages).to.have.lengthOf(4); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js index eff1be3c32..0f064ba6b3 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js @@ -5,7 +5,6 @@ import { } from '../../../../helpers/api-integration.helper'; describe('POST /groups/:id/chat/:id/flag', () => { - context('another member\'s message', () => { let group, member, message, user; @@ -21,23 +20,22 @@ describe('POST /groups/:id/chat/:id/flag', () => { user = res.leader; member = res.members[0]; - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); }).then((res) => { message = res.message; }); }); it('flags message', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { return user.get(`/groups/${group._id}/chat`); }).then((messages) => { - let message = messages[0]; - expect(message.flagCount).to.eql(1); + expect(messages[0].flagCount).to.eql(1); }); }); it('cannot flag the same message twice', async () => { - return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { return user.post(`/groups/${group._id}/chat/${message.id}/flag`); })).to.eventually.be.rejected.and.eql({ code: 401, @@ -60,7 +58,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { group = res.group; user = res.leader; - return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message', }); + return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message' }); }).then((res) => { message = res.message; }); @@ -76,7 +74,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); context('nonexistant message', () => { - let group, message, user; + let group, user; beforeEach(async () => { return createAndPopulateGroup({ @@ -100,7 +98,7 @@ describe('POST /groups/:id/chat/:id/flag', () => { }); context('group with multiple messages', () => { - let admin, author, group, member, message, user; + let admin, author, group, user; beforeEach(async () => { author = await generateUser(); @@ -114,8 +112,8 @@ describe('POST /groups/:id/chat/:id/flag', () => { privacy: 'public', chat: [ { id: 'message-to-be-flagged', uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { id1: true } }, + { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, ], }, @@ -124,11 +122,10 @@ describe('POST /groups/:id/chat/:id/flag', () => { group = groupData.group; user = groupData.leader; - member = groupData.members[0]; }); it('changes only the message that is flagged', async () => { - return user.post(`/groups/${group._id}/chat/message-to-be-flagged/flag`).then((messages) => { + return user.post(`/groups/${group._id}/chat/message-to-be-flagged/flag`).then(() => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { expect(messages).to.have.lengthOf(4); @@ -172,18 +169,17 @@ describe('POST /groups/:id/chat/:id/flag', () => { user = res.leader; member = res.members[0]; - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); }).then((res) => { message = res.message; }); }); it('sets flagCount to 5', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then((messages) => { + return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { return user.get(`/groups/${group._id}/chat`); }).then((messages) => { - let message = messages[0]; - expect(message.flagCount).to.eql(5); + expect(messages[0].flagCount).to.eql(5); }); }); }); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js index d1736e3f7e..cf0e5aae75 100644 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js +++ b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js @@ -5,7 +5,6 @@ import { } from '../../../../helpers/api-integration.helper'; describe('POST /groups/:id/chat/:id/like', () => { - context('another member\'s message', () => { let group, member, message, user; @@ -21,7 +20,7 @@ describe('POST /groups/:id/chat/:id/like', () => { user = res.leader; member = res.members[0]; - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message', }); + return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); }).then((res) => { message = res.message; }); @@ -29,17 +28,15 @@ describe('POST /groups/:id/chat/:id/like', () => { it('likes message', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { - let message = messages[0]; - expect(message.likes[user._id]).to.eql(true); + expect(messages[0].likes[user._id]).to.eql(true); }); }); it('returns the message object', async () => { return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { - let message = messages[0]; - expect(message.text).to.eql('Group member message'); - expect(message.uuid).to.eql(member._id); - expect(message.user).to.eql(member.profile.name); + expect(messages[0].text).to.eql('Group member message'); + expect(messages[0].uuid).to.eql(member._id); + expect(messages[0].user).to.eql(member.profile.name); }); }); }); @@ -58,7 +55,7 @@ describe('POST /groups/:id/chat/:id/like', () => { group = res.group; user = res.leader; - return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message', }); + return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message' }); }).then((res) => { message = res.message; }); @@ -74,7 +71,7 @@ describe('POST /groups/:id/chat/:id/like', () => { }); context('group with multiple messages', () => { - let admin, author, group, member, message, user; + let admin, author, group, user; beforeEach(async () => { author = await generateUser(); @@ -88,8 +85,8 @@ describe('POST /groups/:id/chat/:id/like', () => { privacy: 'public', chat: [ { id: 'message-to-be-liked', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-like-message', likes: { 'id': true }, uuid: author._id, flagCount: 1, flags: { 'id1': true } }, - { id: '2-like-message', likes: { 'id': true, 'id2': true }, uuid: author._id, flagCount: 2, flags: { 'id1': true, 'id2': true } }, + { id: '1-like-message', likes: { id: true }, uuid: author._id, flagCount: 1, flags: { id1: true } }, + { id: '2-like-message', likes: { id: true, id2: true }, uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, { id: 'no-likes', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, ], }, @@ -98,11 +95,10 @@ describe('POST /groups/:id/chat/:id/like', () => { group = groupData.group; user = groupData.leader; - member = groupData.members[0]; }); it('changes only the message that is liked', async () => { - return user.post(`/groups/${group._id}/chat/message-to-be-liked/like`).then((messages) => { + return user.post(`/groups/${group._id}/chat/message-to-be-liked/like`).then(() => { return admin.get(`/groups/${group._id}/chat`); }).then((messages) => { expect(messages).to.have.lengthOf(4); @@ -128,7 +124,7 @@ describe('POST /groups/:id/chat/:id/like', () => { }); context('nonexistant message', () => { - let group, message, user; + let group, user; beforeEach(async () => { return createAndPopulateGroup({ diff --git a/test/api/v2/register/POST-register.test.js b/test/api/v2/register/POST-register.test.js index a49d4aa67d..d62e15787f 100644 --- a/test/api/v2/register/POST-register.test.js +++ b/test/api/v2/register/POST-register.test.js @@ -7,7 +7,6 @@ import { v4 as generateRandomUserName } from 'uuid'; import { each } from 'lodash'; describe('POST /register', () => { - context('username and email are free', () => { it('registers a new user', async () => { let api = requester(); @@ -16,9 +15,9 @@ describe('POST /register', () => { let password = 'password'; return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user._id).to.exist; @@ -35,10 +34,10 @@ describe('POST /register', () => { let confirmPassword = 'not password'; return expect(api.post('/register', { - username: username, - email: email, - password: password, - confirmPassword: confirmPassword, + username, + email, + password, + confirmPassword, })).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageAuthPasswordMustMatch'), @@ -52,9 +51,9 @@ describe('POST /register', () => { let confirmPassword = 'password'; return expect(api.post('/register', { - email: email, - password: password, - confirmPassword: confirmPassword, + email, + password, + confirmPassword, })).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageAuthCredentialsRequired'), @@ -68,9 +67,9 @@ describe('POST /register', () => { let confirmPassword = 'password'; return expect(api.post('/register', { - username: username, - password: password, - confirmPassword: confirmPassword, + username, + password, + confirmPassword, })).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageAuthCredentialsRequired'), @@ -84,9 +83,9 @@ describe('POST /register', () => { let confirmPassword = 'password'; return expect(api.post('/register', { - username: username, - email: email, - confirmPassword: confirmPassword, + username, + email, + confirmPassword, })).to.eventually.be.rejected.and.eql({ code: 401, text: t('messageAuthCredentialsRequired'), @@ -102,7 +101,7 @@ describe('POST /register', () => { return generateUser({ 'auth.local.username': username, 'auth.local.lowerCaseUsername': username, - 'auth.local.email': email + 'auth.local.email': email, }); }); @@ -112,9 +111,9 @@ describe('POST /register', () => { let password = 'password'; return expect(api.post('/register', { - username: username, - email: uniqueEmail, - password: password, + username, + email: uniqueEmail, + password, confirmPassword: password, })).to.eventually.be.rejected.and.eql({ code: 401, @@ -128,9 +127,9 @@ describe('POST /register', () => { let password = 'password'; return expect(api.post('/register', { - username: uniqueUsername, - email: email, - password: password, + username: uniqueUsername, + email, + password, confirmPassword: password, })).to.eventually.be.rejected.and.eql({ code: 401, @@ -151,14 +150,14 @@ describe('POST /register', () => { it('sets all site tour values to -2 (already seen)', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.flags.tour).to.not.be.empty; - each(user.flags.tour, (value, attribute) => { + each(user.flags.tour, (value) => { expect(value).to.eql(-2); }); }); @@ -166,9 +165,9 @@ describe('POST /register', () => { it('populates user with default todos, not no other task types', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.todos).to.not.be.empty; @@ -180,9 +179,9 @@ describe('POST /register', () => { it('populates user with default tags', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.tags).to.not.be.empty; @@ -202,14 +201,14 @@ describe('POST /register', () => { it('sets all common tutorial flags to true', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.flags.tour).to.not.be.empty; - each(user.flags.tutorial.common, (value, attribute) => { + each(user.flags.tutorial.common, (value) => { expect(value).to.eql(true); }); }); @@ -217,9 +216,9 @@ describe('POST /register', () => { it('populates user with default todos, habits, and rewards', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.todos).to.not.be.empty; @@ -231,9 +230,9 @@ describe('POST /register', () => { it('populates user with default tags', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.tags).to.not.be.empty; @@ -253,14 +252,14 @@ describe('POST /register', () => { it('sets all common tutorial flags to true', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.flags.tour).to.not.be.empty; - each(user.flags.tutorial.common, (value, attribute) => { + each(user.flags.tutorial.common, (value) => { expect(value).to.eql(true); }); }); @@ -268,9 +267,9 @@ describe('POST /register', () => { it('populates user with default todos, habits, and rewards', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.todos).to.not.be.empty; @@ -282,9 +281,9 @@ describe('POST /register', () => { it('populates user with default tags', async () => { return api.post('/register', { - username: username, - email: email, - password: password, + username, + email, + password, confirmPassword: password, }).then((user) => { expect(user.tags).to.not.be.empty; diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js index fca6d81b6e..416bdcbfee 100644 --- a/test/api/v2/user/DELETE-user.test.js +++ b/test/api/v2/user/DELETE-user.test.js @@ -3,7 +3,6 @@ import { createAndPopulateGroup, generateGroup, generateUser, - translate as t, } from '../../../helpers/api-integration.helper'; import { find } from 'lodash'; @@ -15,7 +14,7 @@ describe('DELETE /user', () => { }); it('deletes the user', async () => { - return expect(user.del('/user').then((fetchedUser) => { + return expect(user.del('/user').then(() => { return checkExistence('users', user._id); })).to.eventually.eql(false); }); @@ -30,16 +29,16 @@ describe('DELETE /user', () => { beforeEach(async () => { return generateGroup(user, { type: 'party', - privacy: 'private' + privacy: 'private', }).then((group) => { party = group; }); }); it('deletes party when user is the only member', async () => { - return expect(user.del('/user').then((result) => { - return checkExistence('groups', party._id); - })).to.eventually.eql(false); + return expect(user.del('/user').then(() => { + return checkExistence('groups', party._id); + })).to.eventually.eql(false); }); }); @@ -49,16 +48,16 @@ describe('DELETE /user', () => { beforeEach(async () => { return generateGroup(user, { type: 'guild', - privacy: 'private' + privacy: 'private', }).then((group) => { guild = group; }); }); it('deletes guild when user is the only member', async () => { - return expect(user.del('/user').then((result) => { - return checkExistence('groups', guild._id); - })).to.eventually.eql(false); + return expect(user.del('/user').then(() => { + return checkExistence('groups', guild._id); + })).to.eventually.eql(false); }); }); @@ -80,7 +79,7 @@ describe('DELETE /user', () => { }); it('chooses new group leader for any group user was the leader of', async () => { - return oldLeader.del('/user').then((res) => { + return oldLeader.del('/user').then(() => { return newLeader.get(`/groups/${group._id}`); }).then((guild) => { expect(guild.leader).to.exist; @@ -95,8 +94,8 @@ describe('DELETE /user', () => { beforeEach(async () => { return generateUser({ balance: 10, - }).then((user) => { - userToDelete = user; + }).then((_user) => { + userToDelete = _user; return generateGroup(userToDelete, { type: 'guild', @@ -121,7 +120,7 @@ describe('DELETE /user', () => { }); it('removes user from all groups user was a part of', async () => { - return userToDelete.del('/user').then((res) => { + return userToDelete.del('/user').then(() => { return otherUser.get(`/groups/${group1._id}`); }).then((fetchedGroup1) => { expect(fetchedGroup1.members).to.be.empty; @@ -137,7 +136,6 @@ describe('DELETE /user', () => { expect(userInGroup).to.not.be.ok; }); }); - }); context('pending invitation to group', () => { @@ -159,7 +157,7 @@ describe('DELETE /user', () => { }); it('removes invitations from groups', async () => { - return userToDelete.del('/user').then((res) => { + return userToDelete.del('/user').then(() => { return otherUser.get(`/groups/${group._id}`); }).then((fetchedGroup) => { expect(fetchedGroup.invites).to.have.a.lengthOf(1); diff --git a/test/api/v2/user/GET-user_tags_id.test.js b/test/api/v2/user/GET-user_tags_id.test.js index 1c6f76ded1..0ea13437a7 100644 --- a/test/api/v2/user/GET-user_tags_id.test.js +++ b/test/api/v2/user/GET-user_tags_id.test.js @@ -11,7 +11,7 @@ describe('GET /user/tags/id', () => { }); it('gets a user\'s tag by id', async () => { - return expect(user.get('/user/tags/' + user.tags[0].id)) + return expect(user.get(`/user/tags/${user.tags[0].id}`)) .to.eventually.eql(user.tags[0]); }); diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index 17a6e27400..2e50a37650 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -15,7 +15,7 @@ describe('PUT /user', () => { context('allowed operations', () => { it('updates the user', async () => { let updatedUser = await user.put('/user', { - 'profile.name' : 'Frodo', + 'profile.name': 'Frodo', 'preferences.costume': true, 'stats.hp': 14, }); @@ -29,19 +29,19 @@ 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}, + 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}, - 'tasks': {todos: [], habits: [], dailys: [], rewards: []}, + tasks: {todos: [], habits: [], dailys: [], rewards: []}, }; each(protectedOperations, (data, testName) => { it(`does not allow updating ${testName}`, async () => { let errorText = []; each(data, (value, operation) => { - errorText.push(t('messageUserOperationProtected', { operation: operation })); + errorText.push(t('messageUserOperationProtected', { operation })); }); await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ @@ -61,7 +61,7 @@ describe('PUT /user', () => { it(`does not allow updating ${testName}`, async () => { let errorText = []; each(data, (value, operation) => { - errorText.push(t('messageUserOperationProtected', { operation: operation })); + errorText.push(t('messageUserOperationProtected', { operation })); }); await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ diff --git a/test/api/v2/user/anonymized/GET-user_anonymized.test.js b/test/api/v2/user/anonymized/GET-user_anonymized.test.js index 9a4a4aa0cc..6933074046 100644 --- a/test/api/v2/user/anonymized/GET-user_anonymized.test.js +++ b/test/api/v2/user/anonymized/GET-user_anonymized.test.js @@ -4,80 +4,77 @@ import { import { each } from 'lodash'; describe('GET /user/anonymized', () => { - let user; + let user, anonymizedUser; before(async () => { - return generateUser({ - 'inbox.messages' : { - 'the-message-id' : { - sort : 214, - user : 'Some user', - backer : {}, - contributor : { - text : 'Blacksmith', - level : 2, - contributions : 'Made some contributions', - admin : false + user = await generateUser({ + 'inbox.messages': { + 'the-message-id': { + sort: 214, + user: 'Some user', + backer: {}, + contributor: { + text: 'Blacksmith', + level: 2, + contributions: 'Made some contributions', + admin: false, }, - uuid : 'some-users-uuid', - flagCount : 0, - flags : {}, - likes : {}, - timestamp : 1444154258699.0000000000000000, - text : 'Lorem ipsum', - id : 'the-messages-id', - sent : true - } - } - }).then((usr) => { - user = usr; - return user.post('/user/tasks', { - text: 'some private text', - notes: 'some private notes', - checklist: [ - {text: 'a private checklist'}, - {text: 'another private checklist'}, - ], - type: 'daily', - }); - }).then((result) => { - return user.get('/user/anonymized'); - }).then((anonymizedUser) => { - user = anonymizedUser; + uuid: 'some-users-uuid', + flagCount: 0, + flags: {}, + likes: {}, + timestamp: 1444154258699.0000000000000000, + text: 'Lorem ipsum', + id: 'the-messages-id', + sent: true, + }, + }, }); + + await user.post('/user/tasks', { + text: 'some private text', + notes: 'some private notes', + checklist: [ + {text: 'a private checklist'}, + {text: 'another private checklist'}, + ], + type: 'daily', + }); + + anonymizedUser = await user.get('/user/anonymized'); }); it('retains user id', async () => { - expect(user._id).to.exist; + expect(anonymizedUser._id).to.eql(user._id); }); it('removes credentials and financial information', async () => { - expect(user.apiToken).to.not.exist; - expect(user.auth.local).to.not.exist; - expect(user.auth.facebook).to.not.exist; - expect(user.purchased.plan).to.not.exist; + expect(anonymizedUser.apiToken).to.not.exist; + expect(anonymizedUser.auth.local).to.not.exist; + expect(anonymizedUser.auth.facebook).to.not.exist; + expect(anonymizedUser.purchased.plan).to.not.exist; }); it('removes profile information', async () => { - expect(user.profile).to.not.exist; - expect(user.contributor).to.not.exist; - expect(user.achievements.challenges).to.not.exist; + expect(anonymizedUser.profile).to.not.exist; + expect(anonymizedUser.contributor).to.not.exist; + expect(anonymizedUser.achievements.challenges).to.not.exist; }); it('removes social information', async () => { - expect(user.newMessages).to.not.exist; - expect(user.invitations).to.not.exist; - expect(user.items.special.nyeReceived).to.not.exist; - expect(user.items.special.valentineReceived).to.not.exist; + expect(anonymizedUser.newMessages).to.not.exist; + expect(anonymizedUser.invitations).to.not.exist; + expect(anonymizedUser.items.special.nyeReceived).to.not.exist; + expect(anonymizedUser.items.special.valentineReceived).to.not.exist; - each(user.inbox.messages, (msg) => { + each(anonymizedUser.inbox.messages, (msg) => { expect(msg.text).to.eql('inbox message text'); }); }); it('anonymizes task info', async () => { each(['habits', 'todos', 'dailys', 'rewards'], (tasks) => { - each(user[tasks], (task) => { + each(anonymizedUser[tasks], (task) => { expect(task.text).to.eql('task text'); expect(task.notes).to.eql('task notes'); @@ -89,13 +86,13 @@ describe('GET /user/anonymized', () => { }); it('anonymizes tags', async () => { - each(user.tags, (tag) => { + each(anonymizedUser.tags, (tag) => { expect(tag.name).to.eql('tag'); expect(tag.challenge).to.eql('challenge'); }); }); it('removes webhooks', async () => { - expect(user.webhooks).to.not.exist; + expect(anonymizedUser.webhooks).to.not.exist; }); }); diff --git a/test/api/v2/user/batch-update/POST-user_batch-update.test.js b/test/api/v2/user/batch-update/POST-user_batch-update.test.js index 19c1f7b64b..7e7d9954f6 100644 --- a/test/api/v2/user/batch-update/POST-user_batch-update.test.js +++ b/test/api/v2/user/batch-update/POST-user_batch-update.test.js @@ -14,24 +14,20 @@ describe('POST /user/batch-update', () => { context('allowed operations', () => { it('makes batch operations', async () => { - let task; + let task = (await user.get('/user/tasks'))[0]; - return user.get('/user/tasks').then((tasks) => { - task = tasks[0]; + let updatedUser = await user.post('/user/batch-update', [ + {op: 'update', body: {'stats.hp': 30}}, + {op: 'update', body: {'profile.name': 'Samwise'}}, + {op: 'score', params: { direction: 'up', id: task.id }}, + ]); - return user.post('/user/batch-update', [ - {op: 'update', body: {'stats.hp': 30}}, - {op: 'update', body: {'profile.name': 'Samwise'}}, - {op: 'score', params: { direction: 'up', id: task.id }}, - ]); - }).then((updatedUser) => { - expect(updatedUser.stats.hp).to.eql(30); - expect(updatedUser.profile.name).to.eql('Samwise'); + expect(updatedUser.stats.hp).to.eql(30); + expect(updatedUser.profile.name).to.eql('Samwise'); - return user.get(`/user/tasks/${task.id}`); - }).then((task) => { - expect(task.value).to.be.greaterThan(0); - }); + let fetchedTask = await user.get(`/user/tasks/${task.id}`); + + expect(fetchedTask.value).to.be.greaterThan(task.value); }); }); @@ -42,7 +38,6 @@ describe('POST /user/batch-update', () => { }; each(protectedOperations, (operation, description) => { - it(`it sends back a 500 error for ${description} operation`, async () => { return expect(user.post('/user/batch-update', [ { op: operation }, diff --git a/test/api/v2/user/tasks/DELETE-tasks_id.test.js b/test/api/v2/user/tasks/DELETE-tasks_id.test.js index 9c734c2e83..2d0a1615d2 100644 --- a/test/api/v2/user/tasks/DELETE-tasks_id.test.js +++ b/test/api/v2/user/tasks/DELETE-tasks_id.test.js @@ -12,13 +12,12 @@ describe('DELETE /user/tasks/:id', () => { }); it('deletes a task', async () => { - return expect(user.del(`/user/tasks/${task.id}`) - .then((res) => { - return user.get(`/user/tasks/${task.id}`); - })).to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTaskNotFound'), - }); + await user.del(`/user/tasks/${task.id}`); + + await expect(user.get(`/user/tasks/${task.id}`)).to.eventually.be.rejected.and.eql({ + code: 404, + text: t('messageTaskNotFound'), + }); }); it('returns an error if the task does not exist', async () => { diff --git a/test/api/v2/user/tasks/GET-tasks.test.js b/test/api/v2/user/tasks/GET-tasks.test.js index 5ff1ff3192..3d750cab8c 100644 --- a/test/api/v2/user/tasks/GET-tasks.test.js +++ b/test/api/v2/user/tasks/GET-tasks.test.js @@ -1,6 +1,5 @@ import { generateUser, - translate as t, } from '../../../../helpers/api-integration.helper'; describe('GET /user/tasks/', () => { diff --git a/test/api/v2/user/tasks/POST-tasks.test.js b/test/api/v2/user/tasks/POST-tasks.test.js index 096c48678e..6ddc1d33fd 100644 --- a/test/api/v2/user/tasks/POST-tasks.test.js +++ b/test/api/v2/user/tasks/POST-tasks.test.js @@ -4,7 +4,6 @@ import { } from '../../../../helpers/api-integration.helper'; describe('POST /user/tasks', () => { - let user; beforeEach(async () => { diff --git a/test/api/v2/user/tasks/PUT-tasks_id.test.js b/test/api/v2/user/tasks/PUT-tasks_id.test.js index 7d63168d8e..90a5065db4 100644 --- a/test/api/v2/user/tasks/PUT-tasks_id.test.js +++ b/test/api/v2/user/tasks/PUT-tasks_id.test.js @@ -1,6 +1,5 @@ import { generateUser, - translate as t, } from '../../../../helpers/api-integration.helper'; describe('PUT /user/tasks/:id', () => { @@ -34,13 +33,13 @@ describe('PUT /user/tasks/:id', () => { text: 'new text', notes: 'new notes', value: 10000, - priority: .5, + priority: 0.5, attribute: 'str', }).then((updatedTask) => { expect(updatedTask.text).to.eql('new text'); expect(updatedTask.notes).to.eql('new notes'); expect(updatedTask.value).to.eql(10000); - expect(updatedTask.priority).to.eql(.5); + expect(updatedTask.priority).to.eql(0.5); expect(updatedTask.attribute).to.eql('str'); }); }); From dfa2228dccdae6406c99e589e09773443d48be33 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 2 Jan 2016 22:23:53 -0600 Subject: [PATCH 14/14] tests(api): Convert v2 status test to use await syntax --- test/api/v2/status/GET-status.test.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/api/v2/status/GET-status.test.js b/test/api/v2/status/GET-status.test.js index 6e9974537c..681da16499 100644 --- a/test/api/v2/status/GET-status.test.js +++ b/test/api/v2/status/GET-status.test.js @@ -4,7 +4,6 @@ describe('Status', () => { it('returns a status of up when server is up', async () => { let api = requester(); - return expect(api.get('/status')) - .to.eventually.eql({status: 'up'}); + await expect(api.get('/status')).to.eventually.eql({status: 'up'}); }); });