UNPKG

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!

147 lines (132 loc) 5.17 kB
var ROOT = process.cwd(); var assert = require("assert"); var util = require("./test-util"); function MyService(){}; MyService.allowedOp = function($callback){ console.log("In MyService.allowedOp") $callback(false,'OK'); } MyService.forbiddenOp = function($callback){ console.log("In forbiddenOp"); $callback(false, 'NotOK') } MyService.signin = function(userId, role, $callback){ $callback(false, { userId:userId, roles:role }); } MyService.signout = function(userId, $callback){ $callback(false, {userId:userId}); } // this cannot be run with the rest tests xdescribe("Angoose-Auth Tests", function(done){ var angoose = require("../lib/angoose"); angoose.module('MyService', MyService); var angoose = util.initAngoose(null, { extensions: [ '../extensions/angoose-authorization' ], 'angoose-authorization': { superuser: 'admin' } }); function preGen(next){ next(); } //angoose.module('MyService', MyService ) var myService = angoose.client().module('MyService'); setupPermission(); it("allowedOp should be denied to guest user", function(done){ myService.allowedOp(function(err, ret ){ console.log("allowedOp result", err, ret) assert.equal(err,'Access Denied'); done(); }); }); it("forbiddenOp should be allowed by super user admin ", function(done){ myService.signin('admin', 'xxx', function(err, user){ myService.forbiddenOp(function(err, ret ){ console.log("forbiddenOp result", err, ret) assert.equal( ret ,'NotOK'); done(); }); }) }); it("Forbidden operation should be allowed after login", function(done){ myService.signin('adminuser', 'admin', function(err, user){ myService.forbiddenOp(function(err, ret ){ console.log("forbiddenOp result", err, ret) assert.equal( ret ,'NotOK'); done(); }); }) }); it("Forbidden operation is not allowed by non-admin ", function(done){ myService.signin('someuser', 'other', function(err, user){ myService.forbiddenOp(function(err, ret ){ console.log("forbiddenOp 2 result", err, ret) assert.equal(err,'Access Denied'); done(); }); }) }); it("AloowedOp operation is allowed by non-admin ", function(done){ myService.signin('someuser', 'other', function(err, user){ myService.allowedOp(function(err, ret ){ console.log("forbiddenOp 2 result", err, ret) assert.equal( ret ,'OK'); done(); }); }) }); it("AloowedOp operation is not allowed after log out ", function(done){ myService.signin('someuser', 'other', function(err, user){ myService.signout('someuser', function(err, user){ myService.allowedOp(function(err, ret ){ console.log("after signing out ", err, ret) assert.equal(err,'Access Denied'); done(); }); }); }) }); it("Auth model schema should have all published methods", function(done){ angoose.module('MyService', MyService ) var authModel = angoose.client().module("PermissionModel"); //console.log("###########", authModel, authModel.schema) if(!authModel || !authModel.schema) { assert.fail("No model schema"); return done(); } //console.log("Permission model schema", authModel.schema.paths); assert( authModel.schema.paths['SampleUserGroup.View'], "permission model does not have SampleUserGroup.View"); assert( authModel.schema.paths['SampleService.testExecutionContext'] , "permission model does not have SampleService.testExecutionContext"); done(); } ); function setupPermission(){ it("Setup permission", function(done){ var Model = angoose.module("PermissionModel"); console.log("Setting up permission") var adminModel = new Model({ role:'admin', 'AllPermissions':true, 'MyService.forbiddenOp':true, 'MyService.allowedOp':true, }); var otherModel = new Model({ role:'other', 'MyService.forbiddenOp':false, 'MyService.allowedOp':true }); Model.remove({}, function(err){ console.log("Done removing", err); adminModel.save(function(err, r1){ console.log("admin model", err, r1) otherModel.save(function(err, r2){ console.log("Setup test permissions", r1, r2); done() ; }); }); }); }) ; } });