From 6287ae67769e71b6af11bd8471a844ae4e5ce722 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 16 Jan 2016 14:33:53 -0600 Subject: [PATCH] tests(api): Outsource mongo updates to mongo module in api helper --- test/helpers/api-integration/api-classes.js | 36 +++------ test/helpers/api-integration/mongo.js | 84 +++++++++++++-------- 2 files changed, 66 insertions(+), 54 deletions(-) diff --git a/test/helpers/api-integration/api-classes.js b/test/helpers/api-integration/api-classes.js index 2657a2088d..e87ec6de6a 100644 --- a/test/helpers/api-integration/api-classes.js +++ b/test/helpers/api-integration/api-classes.js @@ -1,6 +1,7 @@ /* eslint-disable no-use-before-define */ import { requester } from './requester'; +import { updateDocument as updateDocumentInMongo } from './mongo'; import { assign, each, @@ -14,10 +15,16 @@ class ApiObject { assign(this, options); } - update (options) { - return new Promise((resolve) => { - _updateDocument(this._docType, this, options, resolve); - }); + async update (options) { + if (isEmpty(options)) { + return; + } + + await updateDocumentInMongo(this._docType, this, options); + + _updateLocalParameters (this, options); + + return this; } } @@ -44,26 +51,7 @@ export class ApiGroup extends ApiObject { } } -function _updateDocument (collectionName, doc, update, cb) { - if (isEmpty(update)) { - return cb(); - } - - mongo.connect('mongodb://localhost/habitrpg_test', (connectErr, db) => { - if (connectErr) throw new Error(`Error connecting to database when updating ${collectionName} collection: ${connectErr}`); - - let collection = db.collection(collectionName); - - collection.updateOne({ _id: doc._id }, { $set: update }, (updateErr) => { - if (updateErr) throw new Error(`Error updating ${collectionName}: ${updateErr}`); - _updateLocalDocument(doc, update); - db.close(); - cb(); - }); - }); -} - -function _updateLocalDocument (doc, update) { +function _updateLocalParameters (doc, update) { each(update, (value, param) => { set(doc, param, value); }); diff --git a/test/helpers/api-integration/mongo.js b/test/helpers/api-integration/mongo.js index 64560229e2..ba9f3e2cbd 100644 --- a/test/helpers/api-integration/mongo.js +++ b/test/helpers/api-integration/mongo.js @@ -1,52 +1,76 @@ import { MongoClient as mongo } from 'mongodb'; +const DB_URI = 'mongodb://localhost/habitrpg_test'; + // Useful for checking things that have been deleted, // but you no longer have access to, // like private parties or users -export function checkExistence (collectionName, id) { +export async function checkExistence (collectionName, id) { + let db = await connectToMongo(); + return new Promise((resolve, reject) => { - mongo.connect('mongodb://localhost/habitrpg_test', (connectionError, db) => { - if (connectionError) return reject(connectionError); - let collection = db.collection(collectionName); + let collection = db.collection(collectionName); - collection.find({_id: id}, {_id: 1}).limit(1).toArray((findError, docs) => { - if (findError) return reject(findError); + collection.find({_id: id}, {_id: 1}).limit(1).toArray((findError, docs) => { + if (findError) return reject(findError); - let exists = docs.length > 0; + let exists = docs.length > 0; - db.close(); - resolve(exists); - }); + db.close(); + resolve(exists); }); }); } // Specifically helpful for the GET /groups tests, // resets the db to an empty state and creates a tavern document -export function resetHabiticaDB () { +export async function resetHabiticaDB () { + let db = await connectToMongo(); + return new Promise((resolve, reject) => { - mongo.connect('mongodb://localhost/habitrpg_test', (err, db) => { - if (err) return reject(err); + db.dropDatabase((dbErr) => { + if (dbErr) return reject(dbErr); + let groups = db.collection('groups'); - db.dropDatabase((dbErr) => { - if (dbErr) return reject(dbErr); - let groups = db.collection('groups'); + groups.insertOne({ + _id: 'habitrpg', + chat: [], + leader: '9', + name: 'HabitRPG', + type: 'guild', + privacy: 'public', + members: [], + }, (insertErr) => { + if (insertErr) return reject(insertErr); - groups.insertOne({ - _id: 'habitrpg', - chat: [], - leader: '9', - name: 'HabitRPG', - type: 'guild', - privacy: 'public', - members: [], - }, (insertErr) => { - if (insertErr) return reject(insertErr); - - db.close(); - resolve(); - }); + db.close(); + resolve(); }); }); }); } + +export async function updateDocument (collectionName, doc, update) { + let db = await connectToMongo(); + + let collection = db.collection(collectionName); + + return new Promise((resolve) => { + collection.updateOne({ _id: doc._id }, { $set: update }, (updateErr) => { + if (updateErr) throw new Error(`Error updating ${collectionName}: ${updateErr}`); + db.close(); + resolve(); + }); + }); +} + +export function connectToMongo () { + return new Promise((resolve, reject) => { + mongo.connect(DB_URI, (err, db) => { + if (err) return reject(err); + + resolve(db); + }); + }); +} +