From 96f6bbfb0c7dabc91ea73f74293e564ae3c82896 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 16 Jan 2016 21:50:54 -0600 Subject: [PATCH] tests(api): Add sync method to api objects --- test/api/v2/groups/POST-groups_id.test.js | 6 +++--- test/api/v2/groups/POST-groups_id_join.test.js | 16 ++++++++-------- test/api/v2/groups/POST-groups_id_leave.test.js | 6 ++---- test/api/v2/user/PUT-user.test.js | 10 ++++++---- test/helpers/api-integration/api-classes.js | 13 ++++++++++++- test/helpers/api-integration/mongo.js | 14 ++++++++++++++ 6 files changed, 45 insertions(+), 20 deletions(-) diff --git a/test/api/v2/groups/POST-groups_id.test.js b/test/api/v2/groups/POST-groups_id.test.js index a12f3d0274..9799ecff4e 100644 --- a/test/api/v2/groups/POST-groups_id.test.js +++ b/test/api/v2/groups/POST-groups_id.test.js @@ -58,10 +58,10 @@ describe('POST /groups/:id', () => { description: 'New group description', }); - let group = await user.get(`/groups/${usersGroup._id}`); + await usersGroup.sync(); - expect(group.name).to.eql('New Group Title'); - expect(group.description).to.eql('New group description'); + expect(usersGroup.name).to.eql('New Group Title'); + expect(usersGroup.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 bc53ac80af..250fd4bbf2 100644 --- a/test/api/v2/groups/POST-groups_id_join.test.js +++ b/test/api/v2/groups/POST-groups_id_join.test.js @@ -3,7 +3,7 @@ import { generateUser, translate as t, } from '../../../helpers/api-integration/v2'; -import { each, find } from 'lodash'; +import { each } from 'lodash'; describe('POST /groups/:id/join', () => { context('user is already a member of the group', () => { @@ -30,10 +30,9 @@ describe('POST /groups/:id/join', () => { it(`allows user to join a ${groupType}`, async () => { await invitee.post(`/groups/${group._id}/join`); - let members = (await invitee.get(`/groups/${group._id}`)).members; - let userInGroup = find(members, '_id', invitee._id); + await group.sync(); - expect(userInGroup).to.exist; + expect(group.members).to.include(invitee._id); }); }); }); @@ -79,10 +78,9 @@ describe('POST /groups/:id/join', () => { it('allows user to join a public guild', async () => { await user.post(`/groups/${group._id}/join`); - let members = (await user.get(`/groups/${group._id}`)).members; - let userInGroup = find(members, '_id', user._id); + await group.sync(); - expect(userInGroup).to.exist; + expect(group.members).to.include(user._id); }); }); @@ -105,7 +103,9 @@ describe('POST /groups/:id/join', () => { it('makes the joining user the leader', async () => { await user.post(`/groups/${group._id}/join`); - await expect(user.get(`/groups/${group._id}`)).to.eventually.have.deep.property('leader._id', user._id); + await group.sync(); + + await expect(group.leader).to.eql(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 f381142560..f7e3e0e9e6 100644 --- a/test/api/v2/groups/POST-groups_id_leave.test.js +++ b/test/api/v2/groups/POST-groups_id_leave.test.js @@ -2,7 +2,6 @@ import { checkExistence, createAndPopulateGroup, } from '../../../helpers/api-integration/v2'; -import { find } from 'lodash'; describe('POST /groups/:id/leave', () => { context('user is not member of the group', () => { @@ -29,10 +28,9 @@ describe('POST /groups/:id/leave', () => { it('leaves the group', async () => { await user.post(`/groups/${group._id}/leave`); - let members = (await user.get(`/groups/${group._id}`)).members; - let userInGroup = find(members, '_id', user._id); + await group.sync(); - expect(userInGroup).to.not.be.ok; + expect(group.members).to.not.include(user._id); }); }); diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index 556fbfee91..033a278646 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -14,15 +14,17 @@ describe('PUT /user', () => { context('Allowed Operations', () => { it('updates the user', async () => { - let updatedUser = await user.put('/user', { + await user.put('/user', { 'profile.name': 'Frodo', 'preferences.costume': true, 'stats.hp': 14, }); - expect(updatedUser.profile.name).to.eql('Frodo'); - expect(updatedUser.preferences.costume).to.eql(true); - expect(updatedUser.stats.hp).to.eql(14); + await user.sync(); + + expect(user.profile.name).to.eql('Frodo'); + expect(user.preferences.costume).to.eql(true); + expect(user.stats.hp).to.eql(14); }); }); diff --git a/test/helpers/api-integration/api-classes.js b/test/helpers/api-integration/api-classes.js index 8940422fd8..995a738283 100644 --- a/test/helpers/api-integration/api-classes.js +++ b/test/helpers/api-integration/api-classes.js @@ -1,7 +1,10 @@ /* eslint-disable no-use-before-define */ import { requester } from './requester'; -import { updateDocument as updateDocumentInMongo } from './mongo'; +import { + getDocument as getDocumentFromMongo, + updateDocument as updateDocumentInMongo, +} from './mongo'; import { assign, each, @@ -25,6 +28,14 @@ class ApiObject { return this; } + + async sync () { + let updatedDoc = await getDocumentFromMongo(this._docType, this); + + assign(this, updatedDoc); + + return this; + } } export class ApiUser extends ApiObject { diff --git a/test/helpers/api-integration/mongo.js b/test/helpers/api-integration/mongo.js index bc7c125608..52be5263b4 100644 --- a/test/helpers/api-integration/mongo.js +++ b/test/helpers/api-integration/mongo.js @@ -66,6 +66,20 @@ export async function updateDocument (collectionName, doc, update) { }); } +export async function getDocument (collectionName, doc) { + let db = await connectToMongo(); + + let collection = db.collection(collectionName); + + return new Promise((resolve) => { + collection.findOne({ _id: doc._id }, (lookupErr, found) => { + if (lookupErr) throw new Error(`Error looking up ${collectionName}: ${lookupErr}`); + db.close(); + resolve(found); + }); + }); +} + export function connectToMongo () { return new Promise((resolve, reject) => { mongo.connect(DB_URI, (err, db) => {