angoose
Version:
Angoose is a Remote Method Invocation module that comes with built-in mongoose/angular support. Now you can call server side module in browser just like you're in the server side!
186 lines (165 loc) • 6.33 kB
JavaScript
var ROOT = process.cwd();
var assert = require("assert");
var path= require("path");
var http = require("http");
var fs = require("fs");
var express = require("express");
var request = require('request');
var logging = require("log4js");
var async = require("../lib/util/toolbox").async;
var _ = require("underscore");
var util = require("./test-util");
var Actual = util.Actual;
var MyError = function(message, value){
this.name = 'My Error';
this.message = message;
this.value = value;
};
var donedone = false;
var mongoose = require("mongoose")
var angoose = util.initAngoose();
xdescribe("Context with Mongoose parallel hooks", function(){
// this cannot be run with other tests for now
var testSchema = mongoose.Schema({
name:String
});
testSchema.pre('save', true, function( next, done){
next();
angoose.getContext()
console.log("CONTEXT 2 OK");
angoose('TestUser').findOne({x:1}, function(err, re){
angoose.getContext()
console.log("CONTEXT 2.1 OK");
done();
});
});
testSchema.pre('save', true, function(next, done){
next();
angoose.getContext()
console.log("CONTEXT 3 OK" );
angoose('TestUser').findOne({x:2}, angoose.inContext( function(err, re){
angoose.getContext()
console.log("CONTEXT 3.1 OK");
done();
}));
});
angoose.module('TestUser', mongoose.model('TestUser', testSchema));
it("Parallel hooks", function(done){
var TestUser = angoose.client(true).module("TestUser");
var su = new TestUser({ name: 'Gaelyn' });
su.save(function(err, data){
assert(!err);
console.log("Got Result", err, data, su)
done();
// TestUser.remove({}, {multi:true}, function(){
// done();
// })
});
});
});
xdescribe("Context with simple Mongoose hooks", function(){
var testSchema = mongoose.Schema({
name:String
});
testSchema.pre('save', function( next){
angoose.getContext();
console.log("CONTEXT 1 OK");
angoose('TestUser2').findOne({x:11}, function(err, re){
angoose.getContext();
console.log("CONTEXT 1.1 OK");
next();
});
});
angoose.module('TestUser2', mongoose.model('TestUser2', testSchema));
it("Simple Mongoose hooks", function(done){
var TestUser = angoose.client(true).module("TestUser2");
var su = new TestUser({ name: 'Gaelyn' });
su.save(function(err, data){
assert(!err);
console.log("Got Result", err, data, su)
done();
// TestUser.remove({}, {multi:true}, function(){
// done();
// })
});
});
});
describe("Context with nested mongoose callback", function(){
it("Nested callback test", function(done){
var TestUser = angoose.client(true).module("SampleUser");
TestUser.findOne({x:100}, function(err, u){
angoose.testContext("Callback 1")
mongoose.model("SampleUser").findOne({x:200}, function(err, u){
angoose.testContext("Callback 2")
angoose.getContext();
assert(!err);
mongoose.model("SampleUser").findOne({x:300}, function(err, u){
angoose.testContext("Callback 3")
angoose.getContext();
assert(!err);
done();
})
})
})
});
});
describe("Angoose Context Tests", function(){
var SampleUser = mongoose.model('SampleUser');
var user = null;
beforeEach(function(done){
util.addUser(SampleUser, function(err, u){
user = u;
done();
});
});
xit("MongoDB callback domain bind test", function(done){
//console.log("MyService", angoose.module('MyService'));
var invocation = {
seqnumber: 1001,
method:'findOne',
static:true,
clazz: 'SampleUser',
args: [ ]
};
var ctx = new angoose.Context({request:{value:123}, res:{}});
angoose.execute(ctx, invocation, function(data){
var count = 0; var completed = 0;
function CB(name){
console.log("in funciton callback",name, ++completed, " of ", count);
assert.equal(name, true);
if(completed == count){
assert.equal(completed, count, "FF32")
done();
}
};
GLOBAL.CB= CB;
GLOBAL.angoose = angoose;
function wrapper(name ){
var fn = "console.log(err,result); angoose.getContext();CB('"+name+"') "
return new Function('err', 'result', name, fn);
}
var statics = 'find,findOne,findById,update,count,geoNear,geoSearch'.split(',');
_.each(statics, function(method){
console.log("Calling method", method, ++count);
SampleUser[method]({_id: user._id}, wrapper(method ));
});
//'find findOne update remove count distict findAndModify aggregate';
user.email=new Date().getTime() +"dd@demo.com";
++count;SampleUser.findOneAndUpdate({_id: user._id}, {email:user.email}, wrapper('findOneAndUpdate'));
++count;user.save( wrapper('save'));
++count;SampleUser.remove({_id: user._id}, wrapper('remove'));
++count;SampleUser.aggregate([{$match:{}}], wrapper("aggregate"));
++count;SampleUser.geoNear([20,20], wrapper("geoNear"));
});
});
it("Execution Context", function(done){
console.log("Execution context test");
var SampleService = angoose.client().module("SampleService");
SampleService.testExecutionContext().done(function(data){
console.log("Got context path", data)
assert.equal( data, 'testExecutionContext');
done();
}, function(err){
});
});
});