decentralized-internet
Version:
An NPM library of programs to create decentralized web and distributed computing projects
1 lines • 4.08 kB
JavaScript
const Joi=require("@hapi/joi"),Lab=require("lab"),lab=exports.lab=Lab.script(),request=require("request"),Promise=require("bluebird"),_=require("underscore"),HapiJWTCouch=require("./index");var hapijwtcouch=new HapiJWTCouch,conf=require("./conf.test");lab.experiment("Test hapi-jwt-couch-lib auth jwt",function(){hapijwtcouch.setServer(conf.test.server);var e="",t={email:"hapi.jwt.couch@gmail.com",name:"Hapi jwt",password:"SomePassword90!"};lab.test("returns true when new user is created.",function(){return hapijwtcouch.createUser(t).then(function(e){Joi.assert(e.token,Joi.string().required())})}),lab.test("returns true if same user fails to be created.",function(){return hapijwtcouch.createUser(t).then(function(e){Joi.assert(e.token,Joi.object().keys({statusCode:Joi.number().valid(409),error:Joi.string(),message:Joi.string()}))})}),lab.test("returns true when recovery email is sent.",function(){return hapijwtcouch.resetPassword({email:t.email}).then(function(e){Joi.assert(e,Joi.string().valid("An email has been sent to recover your password."))})}),lab.test("returns true when user is logged in.",function(){return hapijwtcouch.userLogin({email:"hapi.jwt.couch@gmail.com",password:"SomePassword90!"}).then(function(t){Joi.assert(t.token,Joi.string().required()),e=t})}),lab.test("returns true when unauthorized user access api.",function(){return hapijwtcouch.getUsers().then(function(e){Joi.assert(e,Joi.object().keys({statusCode:Joi.number().valid(403),error:Joi.string(),message:Joi.string(),attributes:Joi.object()}))})}),lab.test("returns true when user information is retrieved, additional information is added and additional information is retrieved",function(){return hapijwtcouch.getUser().then(function(e){return e.projects=[{_id:"someprojectid"}],hapijwtcouch.updateUser(e)}).then(function(e){return hapijwtcouch.getUser()}).then(function(e){Joi.assert(e.projects,Joi.array().items(Joi.object()))})}),lab.test("returns true when user scope is updated manually to admin",function(){return hapijwtcouch.getUser().then(function(e){return new Promise(function(t,r){var i={uri:conf.test.userdb.hostname+"/"+conf.test.userdb.database+"/"+e._id,method:"GET"};request(i,function(e,i,s){var o=JSON.parse(s);o.scope.push("admin");var n={uri:conf.test.userdb.hostname+"/"+conf.test.userdb.database+"/_bulk_docs",method:"POST",json:{docs:[o]}};request(n,function(e,i,s){e?r(e):s.error?r(s.error):t(s)})})})})});var r="",i={email:"someemail@gmail.com",name:"Test user",password:"Some88Password!"};lab.test("returns true when a user is created, then all users are fetched by the admin, the scope of the new user is updated by the admin",function(){return hapijwtcouch.createUser(i).then(function(e){return hapijwtcouch.userLogin({email:"someemail@gmail.com",password:"Some88Password!"})}).then(function(t){return r=t,hapijwtcouch.setUserToken(e),hapijwtcouch.getUsers()}).then(function(e){var t=JSON.parse(e);Joi.assert(t,Joi.array().items(Joi.object()));var r=_.find(t,function(e){return e.email===i.email});return r.scope.push("clusterpost"),hapijwtcouch.updateUsers(r)}).then(function(e){Joi.assert(e,Joi.object().keys({ok:Joi.boolean(),id:Joi.string(),rev:Joi.string()}))})}),lab.test('Returns true if the "default" user fails to modify the admin user',function(){return hapijwtcouch.getUser().then(function(e){var t=e;return t.scope=["default"],hapijwtcouch.setUserToken(r),hapijwtcouch.updateUsers(t)}).then(function(e){Joi.assert(e.statusCode,403)})}),lab.test("Returns true if admin user deletes an user",function(){return hapijwtcouch.setUserToken(e),hapijwtcouch.getUsers().then(function(e){var t=JSON.parse(e);Joi.assert(t,Joi.array().items(Joi.object()));var r=_.find(t,function(e){return e.email===i.email});return hapijwtcouch.deleteUsers(r)}).then(function(e){Joi.assert(e,Joi.object().keys({ok:Joi.boolean(),id:Joi.string(),rev:Joi.string()}))})}),lab.test("returns true when valid user deletes itself.",function(){return hapijwtcouch.deleteUser().then(function(e){Joi.assert(e,Joi.object().keys({ok:Joi.boolean(),id:Joi.string(),rev:Joi.string()}))})})});