diff --git a/dist/smartdata.classes.dbcollection.d.ts b/dist/smartdata.classes.dbcollection.d.ts
index d42775a..f6a13a2 100644
--- a/dist/smartdata.classes.dbcollection.d.ts
+++ b/dist/smartdata.classes.dbcollection.d.ts
@@ -1,3 +1,4 @@
+///
import * as plugins from './smartdata.plugins';
import { DbConnection } from './smartdata.classes.dbconnection';
export declare class DbCollection {
@@ -10,13 +11,14 @@ export declare class DbCollection {
/**
* finds an object in the DbCollection
*/
- find(docMatchArg: T): T[];
+ find(docMatchArg: T): plugins.q.Promise;
/**
* inserts object into the DbCollection
*/
- insertOne(docArg: T): PromiseLike;
+ insertOne(docArg: T): plugins.q.Promise;
/**
* inserts many objects at once into the DbCollection
*/
- insertMany(docArrayArg: T[]): void;
+ insertMany(docArrayArg: T[]): plugins.q.Promise;
+ private checkDoc(doc);
}
diff --git a/dist/smartdata.classes.dbcollection.js b/dist/smartdata.classes.dbcollection.js
index d0879b7..f2cd771 100644
--- a/dist/smartdata.classes.dbcollection.js
+++ b/dist/smartdata.classes.dbcollection.js
@@ -1,4 +1,5 @@
"use strict";
+const plugins = require('./smartdata.plugins');
class DbCollection {
constructor(nameArg, dbConnectionArg) {
this.collection = dbConnectionArg.db.collection(nameArg);
@@ -11,19 +12,45 @@ class DbCollection {
* finds an object in the DbCollection
*/
find(docMatchArg) {
- return this.collection.find().toArray();
+ let done = plugins.q.defer();
+ this.collection.find().toArray((err, docs) => {
+ if (err) {
+ throw err;
+ }
+ done.resolve(docs);
+ });
+ return done.promise;
}
/**
* inserts object into the DbCollection
*/
insertOne(docArg) {
- return this.collection.insertOne(docArg);
+ let done = plugins.q.defer();
+ this.checkDoc(docArg).then(() => {
+ this.collection.insertOne(docArg)
+ .then(() => { done.resolve(); });
+ });
+ return done.promise;
}
/**
* inserts many objects at once into the DbCollection
*/
insertMany(docArrayArg) {
+ let done = plugins.q.defer();
+ let checkDocPromiseArray = [];
+ for (let docArg of docArrayArg) {
+ checkDocPromiseArray.push(this.checkDoc(docArg));
+ }
+ plugins.q.all(checkDocPromiseArray).then(() => {
+ this.collection.insertMany(docArrayArg);
+ });
+ return done.promise;
+ }
+ checkDoc(doc) {
+ let done = plugins.q.defer();
+ done.resolve();
+ return done.promise;
}
}
exports.DbCollection = DbCollection;
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFHQTtJQUVJLFlBQVksT0FBZSxFQUFFLGVBQTZCO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsT0FBTyxJQUFFLENBQUM7SUFFOUI7O09BRUc7SUFDSCxJQUFJLENBQUMsV0FBYztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFTO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxXQUFnQjtJQUUzQixDQUFDO0FBQ0wsQ0FBQztBQS9CWSxvQkFBWSxlQStCeEIsQ0FBQSJ9
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxxQkFDekIsQ0FBQyxDQUQ2QztBQUc5QztJQUVJLFlBQVksT0FBZSxFQUFFLGVBQTZCO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsT0FBTyxJQUFJLENBQUM7SUFFaEM7O09BRUc7SUFDSCxJQUFJLENBQUMsV0FBYztRQUNmLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFPLENBQUE7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSTtZQUNyQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sR0FBRyxDQUFBO1lBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLE1BQVM7UUFDZixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBUSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDNUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsV0FBZ0I7UUFDdkIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQVEsQ0FBQTtRQUNsQyxJQUFJLG9CQUFvQixHQUE4QixFQUFFLENBQUE7UUFDeEQsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLENBQUEsQ0FBQztZQUM1QixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMzQyxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBTTtRQUNuQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBUSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBdkRZLG9CQUFZLGVBdUR4QixDQUFBIn0=
\ No newline at end of file
diff --git a/test/test.js b/test/test.js
index 87b0440..f984159 100644
--- a/test/test.js
+++ b/test/test.js
@@ -1,6 +1,7 @@
"use strict";
require('typings-test');
const shelljs = require('shelljs');
+const should = require('should');
const smartstring = require('smartstring');
// the tested module
const smartdata = require('../dist/index');
@@ -9,7 +10,7 @@ let testDbConnection;
let testDbCollection;
describe('mongodb', function () {
it('should start mongodb', function (done) {
- this.timeout(10000);
+ this.timeout(30000);
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017', { async: true, silent: true });
let doneCalled = false;
mongoChildProcess.stdout.on('data', function (data) {
@@ -31,18 +32,30 @@ describe('smartdata', function () {
it('should create a collection', function () {
testDbCollection = new smartdata.DbCollection('something', testDbConnection);
});
- it('should insert something into the collection', function () {
- testDbCollection.insertOne({ hello: 'test' });
+ it('should insert something into the collection', function (done) {
+ testDbCollection.insertOne({ hello: 'test' }).then(() => { done(); });
+ });
+ it('should find all instances of test', function (done) {
+ testDbCollection.find({}).then((resultArray) => {
+ console.log(resultArray);
+ should(resultArray[0].hello).equal('test');
+ done();
+ });
});
it('should close the db Connection', function () {
testDbConnection.close();
});
});
describe('mongodb', function () {
- it('should kill mongodb', function () {
- this.timeout(10000);
+ it('should kill mongodb', function (done) {
+ this.timeout(30000);
+ mongoChildProcess.stdout.on('data', function (data) {
+ if (/dbexit: rc: 0/.test(data)) {
+ done();
+ }
+ });
shelljs.exec('mongod --dbpath=./test/data --shutdown');
mongoChildProcess.kill('SIGTERM');
});
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FFUCxDQUFDLENBRm9CO0FBRXJCLE1BQVksT0FBTyxXQUFNLFNBQ3pCLENBQUMsQ0FEaUM7QUFFbEMsTUFBWSxXQUFXLFdBQU0sYUFHN0IsQ0FBQyxDQUh5QztBQUUxQyxvQkFBb0I7QUFDcEIsTUFBWSxTQUFTLFdBQU0sZUFFM0IsQ0FBQyxDQUZ5QztBQUUxQyxJQUFJLGlCQUFpQixDQUFBO0FBQ3JCLElBQUksZ0JBQXdDLENBQUE7QUFDNUMsSUFBSSxnQkFBNkMsQ0FBQTtBQUVqRCxRQUFRLENBQUMsU0FBUyxFQUFFO0lBQ2hCLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVLElBQUk7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQixpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMzRyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFDdEIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBUyxJQUFJO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFBO1lBQ25GLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxVQUFVLEdBQUcsSUFBSSxDQUFBO29CQUNqQixJQUFJLEVBQUUsQ0FBQTtnQkFDVixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQTtBQUNGLFFBQVEsQ0FBQyxXQUFXLEVBQUU7SUFDbEIsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLFVBQVUsSUFBSTtRQUN6RCxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMscUNBQXFDLENBQUMsQ0FBQTtRQUNwRixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLDRCQUE0QixFQUFFO1FBQzdCLGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUNoRixDQUFDLENBQUMsQ0FBQTtJQUNGLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBQztRQUM3QyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUMvQyxDQUFDLENBQUMsQ0FBQTtJQUNGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRTtRQUNqQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM1QixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBRUYsUUFBUSxDQUFDLFNBQVMsRUFBRTtJQUNoQixFQUFFLENBQUMscUJBQXFCLEVBQUU7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUE7UUFDdEQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JDLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUEifQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FFUCxDQUFDLENBRm9CO0FBRXJCLE1BQVksT0FBTyxXQUFNLFNBQ3pCLENBQUMsQ0FEaUM7QUFDbEMsTUFBWSxNQUFNLFdBQU0sUUFDeEIsQ0FBQyxDQUQrQjtBQUNoQyxNQUFZLFdBQVcsV0FBTSxhQUc3QixDQUFDLENBSHlDO0FBRTFDLG9CQUFvQjtBQUNwQixNQUFZLFNBQVMsV0FBTSxlQUUzQixDQUFDLENBRnlDO0FBRTFDLElBQUksaUJBQWlCLENBQUE7QUFDckIsSUFBSSxnQkFBd0MsQ0FBQTtBQUM1QyxJQUFJLGdCQUE2QyxDQUFBO0FBRWpELFFBQVEsQ0FBQyxTQUFTLEVBQUU7SUFDaEIsRUFBRSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsSUFBSTtRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNHLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUk7WUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7WUFDcEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNkLEVBQUUsQ0FBQyxDQUFDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFVBQVUsR0FBRyxJQUFJLENBQUE7b0JBQ2pCLElBQUksRUFBRSxDQUFBO2dCQUNWLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ0YsUUFBUSxDQUFDLFdBQVcsRUFBRTtJQUNsQixFQUFFLENBQUMsMENBQTBDLEVBQUUsVUFBVSxJQUFJO1FBQ3pELGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBQ3BGLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckQsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsNEJBQTRCLEVBQUU7UUFDN0IsZ0JBQWdCLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ2hGLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLFVBQVUsSUFBSTtRQUM1RCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLFVBQVUsSUFBSTtRQUNsRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzFDLElBQUksRUFBRSxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtJQUNGLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRTtRQUNqQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM1QixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBRUYsUUFBUSxDQUFDLFNBQVMsRUFBRTtJQUNoQixFQUFFLENBQUMscUJBQXFCLEVBQUUsVUFBVSxJQUFJO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO1lBQzlDLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksRUFBRSxDQUFBO1lBQ1YsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFBO1FBQ3RELGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=
\ No newline at end of file
diff --git a/test/test.ts b/test/test.ts
index ac680e3..96f2241 100644
--- a/test/test.ts
+++ b/test/test.ts
@@ -13,12 +13,12 @@ let testDbCollection: smartdata.DbCollection
describe('mongodb', function () {
it('should start mongodb', function (done) {
- this.timeout(10000)
+ this.timeout(30000)
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017', { async: true, silent: true })
let doneCalled = false
- mongoChildProcess.stdout.on('data', function(data) {
- console.log(smartstring.indent.indentWithPrefix(data,"*** MongoDB Process *** : "))
- if (!doneCalled){
+ mongoChildProcess.stdout.on('data', function (data) {
+ console.log(smartstring.indent.indentWithPrefix(data, "*** MongoDB Process *** : "))
+ if (!doneCalled) {
if (/waiting for connections on port 27017/.test(data)) {
doneCalled = true
done()
@@ -35,18 +35,29 @@ describe('smartdata', function () {
it('should create a collection', function () {
testDbCollection = new smartdata.DbCollection('something', testDbConnection)
})
- it('should insert something into the collection',function(done){
- testDbCollection.insertOne({hello: 'test'}).then(() => { done() })
+ it('should insert something into the collection', function (done) {
+ testDbCollection.insertOne({ hello: 'test' }).then(() => { done() })
+ })
+ it('should find all instances of test', function (done) {
+ testDbCollection.find({}).then((resultArray) => {
+ console.log(resultArray)
+ should(resultArray[0].hello).equal('test')
+ done()
+ })
})
- it('should find all instances of test')
it('should close the db Connection', function () {
testDbConnection.close()
})
})
describe('mongodb', function () {
- it('should kill mongodb', function () {
- this.timeout(10000)
+ it('should kill mongodb', function (done) {
+ this.timeout(30000)
+ mongoChildProcess.stdout.on('data', function (data) {
+ if (/dbexit: rc: 0/.test(data)) {
+ done()
+ }
+ })
shelljs.exec('mongod --dbpath=./test/data --shutdown')
mongoChildProcess.kill('SIGTERM')
})
diff --git a/ts/smartdata.classes.dbcollection.ts b/ts/smartdata.classes.dbcollection.ts
index 3115cb4..53d250e 100644
--- a/ts/smartdata.classes.dbcollection.ts
+++ b/ts/smartdata.classes.dbcollection.ts
@@ -10,26 +10,50 @@ export class DbCollection {
/**
* adds a validation function that all newly inserted and updated objects have to pass
*/
- addObjectValidation(funcArg){}
+ addObjectValidation(funcArg) { }
/**
* finds an object in the DbCollection
*/
- find(docMatchArg: T): T[] {
- return this.collection.find().toArray()
+ find(docMatchArg: T): plugins.q.Promise {
+ let done = plugins.q.defer()
+ this.collection.find().toArray((err, docs) => {
+ if (err) { throw err }
+ done.resolve(docs)
+ })
+ return done.promise
}
/**
* inserts object into the DbCollection
*/
- insertOne(docArg: T): PromiseLike {
- return this.collection.insertOne(docArg)
+ insertOne(docArg: T): plugins.q.Promise {
+ let done = plugins.q.defer()
+ this.checkDoc(docArg).then(() => {
+ this.collection.insertOne(docArg)
+ .then(() => { done.resolve() })
+ })
+ return done.promise
}
/**
* inserts many objects at once into the DbCollection
*/
- insertMany(docArrayArg: T[]): void {
+ insertMany(docArrayArg: T[]): plugins.q.Promise {
+ let done = plugins.q.defer()
+ let checkDocPromiseArray: plugins.q.Promise[] = []
+ for (let docArg of docArrayArg){
+ checkDocPromiseArray.push(this.checkDoc(docArg))
+ }
+ plugins.q.all(checkDocPromiseArray).then(() => {
+ this.collection.insertMany(docArrayArg)
+ })
+ return done.promise
+ }
+ private checkDoc(doc: T): plugins.q.Promise {
+ let done = plugins.q.defer()
+ done.resolve()
+ return done.promise
}
}