Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
e508a942e3 | |||
5b093c68e4 | |||
d1b0a65993 | |||
316030be7c | |||
411b0b1ae9 | |||
50a6a1a690 |
14
dist/smartdata.classes.dbcollection.d.ts
vendored
14
dist/smartdata.classes.dbcollection.d.ts
vendored
@ -1,3 +1,4 @@
|
|||||||
|
/// <reference types="q" />
|
||||||
import * as plugins from './smartdata.plugins';
|
import * as plugins from './smartdata.plugins';
|
||||||
import { DbConnection } from './smartdata.classes.dbconnection';
|
import { DbConnection } from './smartdata.classes.dbconnection';
|
||||||
export declare class DbCollection<T> {
|
export declare class DbCollection<T> {
|
||||||
@ -6,13 +7,18 @@ export declare class DbCollection<T> {
|
|||||||
/**
|
/**
|
||||||
* adds a validation function that all newly inserted and updated objects have to pass
|
* adds a validation function that all newly inserted and updated objects have to pass
|
||||||
*/
|
*/
|
||||||
addObjectValidation(): void;
|
addObjectValidation(funcArg: any): void;
|
||||||
/**
|
/**
|
||||||
* inserts am object into the DbCollection
|
* finds an object in the DbCollection
|
||||||
*/
|
*/
|
||||||
insert(objectArg: T): void;
|
find(docMatchArg: T): plugins.q.Promise<T[]>;
|
||||||
|
/**
|
||||||
|
* inserts object into the DbCollection
|
||||||
|
*/
|
||||||
|
insertOne(docArg: T): plugins.q.Promise<void>;
|
||||||
/**
|
/**
|
||||||
* inserts many objects at once into the DbCollection
|
* inserts many objects at once into the DbCollection
|
||||||
*/
|
*/
|
||||||
insertMany(objectArrayArg: T[]): void;
|
insertMany(docArrayArg: T[]): plugins.q.Promise<void>;
|
||||||
|
private checkDoc(doc);
|
||||||
}
|
}
|
||||||
|
47
dist/smartdata.classes.dbcollection.js
vendored
47
dist/smartdata.classes.dbcollection.js
vendored
@ -1,4 +1,5 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
const plugins = require('./smartdata.plugins');
|
||||||
class DbCollection {
|
class DbCollection {
|
||||||
constructor(nameArg, dbConnectionArg) {
|
constructor(nameArg, dbConnectionArg) {
|
||||||
this.collection = dbConnectionArg.db.collection(nameArg);
|
this.collection = dbConnectionArg.db.collection(nameArg);
|
||||||
@ -6,15 +7,51 @@ class DbCollection {
|
|||||||
/**
|
/**
|
||||||
* adds a validation function that all newly inserted and updated objects have to pass
|
* adds a validation function that all newly inserted and updated objects have to pass
|
||||||
*/
|
*/
|
||||||
addObjectValidation() { }
|
addObjectValidation(funcArg) { }
|
||||||
/**
|
/**
|
||||||
* inserts am object into the DbCollection
|
* finds an object in the DbCollection
|
||||||
*/
|
*/
|
||||||
insert(objectArg) { }
|
find(docMatchArg) {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
this.collection.find(docMatchArg).toArray((err, docs) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
done.resolve(docs);
|
||||||
|
});
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* inserts object into the DbCollection
|
||||||
|
*/
|
||||||
|
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
|
* inserts many objects at once into the DbCollection
|
||||||
*/
|
*/
|
||||||
insertMany(objectArrayArg) { }
|
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)
|
||||||
|
.then(() => { done.resolve(); });
|
||||||
|
});
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
checkDoc(doc) {
|
||||||
|
let done = plugins.q.defer();
|
||||||
|
done.resolve();
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exports.DbCollection = DbCollection;
|
exports.DbCollection = DbCollection;
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFHQTtJQUVJLFlBQVksT0FBZSxFQUFFLGVBQTZCO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLEtBQUcsQ0FBQztJQUV2Qjs7T0FFRztJQUNILE1BQU0sQ0FBQyxTQUFZLElBQUcsQ0FBQztJQUV2Qjs7T0FFRztJQUNILFVBQVUsQ0FBQyxjQUFtQixJQUFHLENBQUM7QUFDdEMsQ0FBQztBQXBCWSxvQkFBWSxlQW9CeEIsQ0FBQSJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRkYXRhLmNsYXNzZXMuZGJjb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxxQkFDekIsQ0FBQyxDQUQ2QztBQUc5QztJQUVJLFlBQVksT0FBZSxFQUFFLGVBQTZCO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsT0FBTyxJQUFJLENBQUM7SUFFaEM7O09BRUc7SUFDSCxJQUFJLENBQUMsV0FBYztRQUNmLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFPLENBQUE7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUk7WUFDaEQsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLEdBQUcsQ0FBQTtZQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFTO1FBQ2YsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQVEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7aUJBQzVCLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFdBQWdCO1FBQ3ZCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFRLENBQUE7UUFDbEMsSUFBSSxvQkFBb0IsR0FBOEIsRUFBRSxDQUFBO1FBQ3hELEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7WUFDNUIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2lCQUNsQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QyxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxRQUFRLENBQUMsR0FBTTtRQUNuQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBUSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBeERZLG9CQUFZLGVBd0R4QixDQUFBIn0=
|
@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "smartdata",
|
"name": "smartdata",
|
||||||
"version": "1.0.5",
|
"version": "1.0.7",
|
||||||
"description": "do more with data",
|
"description": "do more with data",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "(npmts)"
|
"test": "(npm run prepareMongo && npmts)",
|
||||||
|
"prepareMongo": "(rm -rf ./test/data && mkdir ./test/data/)"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -30,6 +31,7 @@
|
|||||||
"@types/should": "^8.1.29",
|
"@types/should": "^8.1.29",
|
||||||
"shelljs": "^0.7.4",
|
"shelljs": "^0.7.4",
|
||||||
"should": "^11.1.0",
|
"should": "^11.1.0",
|
||||||
|
"smartstring": "^2.0.17",
|
||||||
"typings-test": "^1.0.3"
|
"typings-test": "^1.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
52
test/test.js
52
test/test.js
@ -1,15 +1,27 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
require('typings-test');
|
require('typings-test');
|
||||||
const shelljs = require('shelljs');
|
const shelljs = require('shelljs');
|
||||||
|
const should = require('should');
|
||||||
|
const smartstring = require('smartstring');
|
||||||
|
// the tested module
|
||||||
const smartdata = require('../dist/index');
|
const smartdata = require('../dist/index');
|
||||||
let mongoChildProcess;
|
let mongoChildProcess;
|
||||||
let testDbConnection;
|
let testDbConnection;
|
||||||
let testDbCollection;
|
let testDbCollection;
|
||||||
describe('mongodb', function () {
|
describe('mongodb', function () {
|
||||||
it('should start mongodb', function (done) {
|
it('should start mongodb', function (done) {
|
||||||
this.timeout(10000);
|
this.timeout(30000);
|
||||||
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017', { async: true });
|
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017', { async: true, silent: true });
|
||||||
setTimeout(() => { done(); }, 5000); // give mongodb it some time to complete startup
|
let doneCalled = false;
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('smartdata', function () {
|
describe('smartdata', function () {
|
||||||
@ -20,15 +32,43 @@ describe('smartdata', function () {
|
|||||||
it('should create a collection', function () {
|
it('should create a collection', function () {
|
||||||
testDbCollection = new smartdata.DbCollection('something', testDbConnection);
|
testDbCollection = new smartdata.DbCollection('something', testDbConnection);
|
||||||
});
|
});
|
||||||
|
it('should insert a doc into the collection', function (done) {
|
||||||
|
testDbCollection.insertOne({ hello: 'test' }).then(() => { done(); });
|
||||||
|
});
|
||||||
|
it('should find all docs of testDbCollection', function (done) {
|
||||||
|
testDbCollection.find({}).then((resultArray) => {
|
||||||
|
console.log(resultArray);
|
||||||
|
should(resultArray[0].hello).equal('test');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should insert many docs into the collection', function (done) {
|
||||||
|
testDbCollection.insertMany([
|
||||||
|
{ hello: 'test' },
|
||||||
|
{ wow: 'what is this', wow2: 3 }
|
||||||
|
]).then(() => { done(); });
|
||||||
|
});
|
||||||
|
it('should find a specified doc', function (done) {
|
||||||
|
testDbCollection.find({ 'wow2': { '$exists': true } }).then((resultArray) => {
|
||||||
|
console.log(resultArray);
|
||||||
|
should(resultArray[0].wow2).equal(3);
|
||||||
|
done();
|
||||||
|
}).catch(console.log);
|
||||||
|
});
|
||||||
it('should close the db Connection', function () {
|
it('should close the db Connection', function () {
|
||||||
testDbConnection.close();
|
testDbConnection.close();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('mongodb', function () {
|
describe('mongodb', function () {
|
||||||
it('should kill mongodb', function () {
|
it('should kill mongodb', function (done) {
|
||||||
this.timeout(10000);
|
this.timeout(30000);
|
||||||
|
mongoChildProcess.stdout.on('data', function (data) {
|
||||||
|
if (/dbexit: rc: 0/.test(data)) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
shelljs.exec('mongod --dbpath=./test/data --shutdown');
|
shelljs.exec('mongod --dbpath=./test/data --shutdown');
|
||||||
mongoChildProcess.kill('SIGTERM');
|
mongoChildProcess.kill('SIGTERM');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FDUCxDQUFDLENBRG9CO0FBQ3JCLE1BQVksT0FBTyxXQUFNLFNBQ3pCLENBQUMsQ0FEaUM7QUFFbEMsTUFBWSxTQUFTLFdBQU0sZUFHM0IsQ0FBQyxDQUh5QztBQUcxQyxJQUFJLGlCQUFpQixDQUFBO0FBQ3JCLElBQUksZ0JBQXdDLENBQUE7QUFDNUMsSUFBSSxnQkFBNkMsQ0FBQTtBQUdqRCxRQUFRLENBQUMsU0FBUyxFQUFDO0lBQ2YsRUFBRSxDQUFDLHNCQUFzQixFQUFDLFVBQVMsSUFBSTtRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMxRixVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQSxDQUFDLGdEQUFnRDtJQUN2RixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ0YsUUFBUSxDQUFDLFdBQVcsRUFBQztJQUNqQixFQUFFLENBQUMsMENBQTBDLEVBQUMsVUFBUyxJQUFJO1FBQ3ZELGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBQ3BGLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckQsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsNEJBQTRCLEVBQUM7UUFDNUIsZ0JBQWdCLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQy9FLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLGdDQUFnQyxFQUFDO1FBQ2hDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFBO0lBQzVCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUE7QUFFRixRQUFRLENBQUMsU0FBUyxFQUFDO0lBQ2YsRUFBRSxDQUFDLHFCQUFxQixFQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFBO1FBQ3RELGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FFUCxDQUFDLENBRm9CO0FBRXJCLE1BQVksT0FBTyxXQUFNLFNBQ3pCLENBQUMsQ0FEaUM7QUFDbEMsTUFBWSxNQUFNLFdBQU0sUUFDeEIsQ0FBQyxDQUQrQjtBQUNoQyxNQUFZLFdBQVcsV0FBTSxhQUc3QixDQUFDLENBSHlDO0FBRTFDLG9CQUFvQjtBQUNwQixNQUFZLFNBQVMsV0FBTSxlQUUzQixDQUFDLENBRnlDO0FBRTFDLElBQUksaUJBQWlCLENBQUE7QUFDckIsSUFBSSxnQkFBd0MsQ0FBQTtBQUM1QyxJQUFJLGdCQUE2QyxDQUFBO0FBRWpELFFBQVEsQ0FBQyxTQUFTLEVBQUU7SUFDaEIsRUFBRSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsSUFBSTtRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzNHLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUk7WUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7WUFDcEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNkLEVBQUUsQ0FBQyxDQUFDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFVBQVUsR0FBRyxJQUFJLENBQUE7b0JBQ2pCLElBQUksRUFBRSxD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
|
53
test/test.ts
53
test/test.ts
@ -1,19 +1,30 @@
|
|||||||
import 'typings-test'
|
import 'typings-test'
|
||||||
|
|
||||||
import * as shelljs from 'shelljs'
|
import * as shelljs from 'shelljs'
|
||||||
import * as should from 'should'
|
import * as should from 'should'
|
||||||
import * as smartdata from '../dist/index'
|
import * as smartstring from 'smartstring'
|
||||||
|
|
||||||
|
// the tested module
|
||||||
|
import * as smartdata from '../dist/index'
|
||||||
|
|
||||||
let mongoChildProcess
|
let mongoChildProcess
|
||||||
let testDbConnection: smartdata.DbConnection
|
let testDbConnection: smartdata.DbConnection
|
||||||
let testDbCollection: smartdata.DbCollection<any>
|
let testDbCollection: smartdata.DbCollection<any>
|
||||||
|
|
||||||
|
|
||||||
describe('mongodb', function () {
|
describe('mongodb', function () {
|
||||||
it('should start mongodb', function (done) {
|
it('should start mongodb', function (done) {
|
||||||
this.timeout(10000)
|
this.timeout(30000)
|
||||||
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017',{async: true})
|
mongoChildProcess = shelljs.exec('mongod --dbpath=./test/data --port 27017', { async: true, silent: true })
|
||||||
setTimeout(() => { done() }, 5000) // give mongodb it some time to complete startup
|
let doneCalled = false
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
describe('smartdata', function () {
|
describe('smartdata', function () {
|
||||||
@ -24,14 +35,42 @@ describe('smartdata',function(){
|
|||||||
it('should create a collection', function () {
|
it('should create a collection', function () {
|
||||||
testDbCollection = new smartdata.DbCollection('something', testDbConnection)
|
testDbCollection = new smartdata.DbCollection('something', testDbConnection)
|
||||||
})
|
})
|
||||||
|
it('should insert a doc into the collection', function (done) {
|
||||||
|
testDbCollection.insertOne({ hello: 'test' }).then(() => { done() })
|
||||||
|
})
|
||||||
|
it('should find all docs of testDbCollection', function (done) {
|
||||||
|
testDbCollection.find({}).then((resultArray) => {
|
||||||
|
console.log(resultArray)
|
||||||
|
should(resultArray[0].hello).equal('test')
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
it('should insert many docs into the collection', function (done) {
|
||||||
|
testDbCollection.insertMany([
|
||||||
|
{ hello: 'test' },
|
||||||
|
{ wow: 'what is this', wow2: 3}
|
||||||
|
]).then(() => { done() })
|
||||||
|
})
|
||||||
|
it('should find a specified doc', function (done) {
|
||||||
|
testDbCollection.find({'wow2': {'$exists': true}}).then((resultArray) => {
|
||||||
|
console.log(resultArray)
|
||||||
|
should(resultArray[0].wow2).equal(3)
|
||||||
|
done()
|
||||||
|
}).catch(console.log)
|
||||||
|
})
|
||||||
it('should close the db Connection', function () {
|
it('should close the db Connection', function () {
|
||||||
testDbConnection.close()
|
testDbConnection.close()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('mongodb', function () {
|
describe('mongodb', function () {
|
||||||
it('should kill mongodb',function(){
|
it('should kill mongodb', function (done) {
|
||||||
this.timeout(10000)
|
this.timeout(30000)
|
||||||
|
mongoChildProcess.stdout.on('data', function (data) {
|
||||||
|
if (/dbexit: rc: 0/.test(data)) {
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
})
|
||||||
shelljs.exec('mongod --dbpath=./test/data --shutdown')
|
shelljs.exec('mongod --dbpath=./test/data --shutdown')
|
||||||
mongoChildProcess.kill('SIGTERM')
|
mongoChildProcess.kill('SIGTERM')
|
||||||
})
|
})
|
||||||
|
@ -10,15 +10,51 @@ export class DbCollection<T> {
|
|||||||
/**
|
/**
|
||||||
* adds a validation function that all newly inserted and updated objects have to pass
|
* adds a validation function that all newly inserted and updated objects have to pass
|
||||||
*/
|
*/
|
||||||
addObjectValidation(){}
|
addObjectValidation(funcArg) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts am object into the DbCollection
|
* finds an object in the DbCollection
|
||||||
*/
|
*/
|
||||||
insert(objectArg: T) {}
|
find(docMatchArg: T): plugins.q.Promise<T[]> {
|
||||||
|
let done = plugins.q.defer<T[]>()
|
||||||
|
this.collection.find(docMatchArg).toArray((err, docs) => {
|
||||||
|
if (err) { throw err }
|
||||||
|
done.resolve(docs)
|
||||||
|
})
|
||||||
|
return done.promise
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* inserts object into the DbCollection
|
||||||
|
*/
|
||||||
|
insertOne(docArg: T): plugins.q.Promise<void> {
|
||||||
|
let done = plugins.q.defer<void>()
|
||||||
|
this.checkDoc(docArg).then(() => {
|
||||||
|
this.collection.insertOne(docArg)
|
||||||
|
.then(() => { done.resolve() })
|
||||||
|
})
|
||||||
|
return done.promise
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inserts many objects at once into the DbCollection
|
* inserts many objects at once into the DbCollection
|
||||||
*/
|
*/
|
||||||
insertMany(objectArrayArg: T[]) {}
|
insertMany(docArrayArg: T[]): plugins.q.Promise<void> {
|
||||||
|
let done = plugins.q.defer<void>()
|
||||||
|
let checkDocPromiseArray: plugins.q.Promise<void>[] = []
|
||||||
|
for (let docArg of docArrayArg){
|
||||||
|
checkDocPromiseArray.push(this.checkDoc(docArg))
|
||||||
|
}
|
||||||
|
plugins.q.all(checkDocPromiseArray).then(() => {
|
||||||
|
this.collection.insertMany(docArrayArg)
|
||||||
|
.then(() => { done.resolve() })
|
||||||
|
})
|
||||||
|
return done.promise
|
||||||
|
}
|
||||||
|
|
||||||
|
private checkDoc(doc: T): plugins.q.Promise<void> {
|
||||||
|
let done = plugins.q.defer<void>()
|
||||||
|
done.resolve()
|
||||||
|
return done.promise
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user