tests(api): Outsource mongo updates to mongo module in api helper

This commit is contained in:
Blade Barringer
2016-01-16 14:33:53 -06:00
parent 80224adafa
commit 6287ae6776
2 changed files with 66 additions and 54 deletions

View File

@@ -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);
});

View File

@@ -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);
});
});
}