happner
Version:
distributed application engine with evented storage and mesh services
510 lines (347 loc) • 12.2 kB
JavaScript
module.exports = TestMesh;
var DONE = false;
function TestMesh() {
}
TestMesh.prototype.method1 = function ($happn, options, callback) {
options.methodName = 'method1';
callback(null, options);
}
if (global.TESTING_D2) return; // When 'requiring' the module above,
// don't run the tests below
//.............
describe('d2-update-own-user', function () {
this.timeout(120000);
require('benchmarket').start();
after(require('benchmarket').store());
var expect = require('expect.js');
var should = require('chai').should();
var mesh;
var Mesh = require('../');
var adminClient = new Mesh.MeshClient({secure: true, port: 8003});
var test_id = Date.now() + '_' + require('shortid').generate();
var async = require('async');
before(function (done) {
global.TESTING_D2 = true; //.............
mesh = this.mesh = new Mesh();
mesh.initialize({
name: 'd2-update-own-user',
datalayer: {
secure: true,
adminPassword: test_id,
port: 8003
},
modules: {
'TestMesh': {
path: __filename
}
},
components: {
'TestMesh': {
moduleName: 'TestMesh',
schema: {
exclusive: false,
methods: {}
}
}
}
}, function (err) {
if (err) return done(err);
mesh.start(function (err) {
if (err) {
return done(err);
}
// Credentials for the login method
var credentials = {
username: '_ADMIN', // pending
password: test_id
}
adminClient.login(credentials).then(function () {
done();
}).catch(done);
});
});
});
after(function (done) {
delete global.TESTING_D2; //.............
mesh.stop({reconnect: false}, done);
})
it('adds a test user, modifies the users password with the admin user, logs in with the test user', function (done) {
var testGroup = {
name: 'TESTGROUP1' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER1' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUser.password = 'NEW PWD';
testUser.custom_data = {changedCustom: 'changedCustom'};
adminClient.exchange.security.updateUser(testUser, function (e, result) {
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
return testUserClient.login(testUser).then(done).catch(done);
});
});
});
});
});
it('adds a test user, logs in with the test user - modifies the users password successfully', function (done) {
var testGroup = {
name: 'TESTGROUP2' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER2' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
testUserClient.login(testUser).then(function () {
testUser.oldPassword = 'TEST PWD';
testUser.password = 'NEW PWD';
testUser.custom_data = {changedCustom: 'changedCustom'};
testUserClient.exchange.security.updateOwnUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.custom_data.changedCustom).to.be('changedCustom');
testUserClient.login(testUser).then(done).catch(done);
});
}).catch(function (e) {
done(e);
});
});
});
});
});
it('adds a test user, logs in with the test user - fails to modify the user using updateUser on another user', function (done) {
var testGroup = {
name: 'TESTGROUP3' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER3' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
testUserClient.login(testUser).then(function () {
testUser.oldPassword = 'TEST PWD';
testUser.password = 'NEW PWD';
testUser.custom_data = {changedCustom: 'changedCustom'};
testUserClient.exchange.security.updateUser(testUser, function (e, result) {
expect(e.toString()).to.be('AccessDenied: unauthorized');
done();
});
}).catch(function (e) {
done(e);
});
});
});
});
});
it('adds a test user, logs in with the test user - fails to modify the password, as old password was not included', function (done) {
var testGroup = {
name: 'TESTGROUP4' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER4' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
testUserClient.login(testUser).then(function () {
testUser.password = 'NEW PWD';
testUser.custom_data = {changedCustom: 'changedCustom'};
testUserClient.exchange.security.updateOwnUser(testUser, function (e, result) {
expect(e.toString()).to.be('Error: missing oldPassword parameter');
done();
});
}).catch(function (e) {
done(e);
});
});
});
});
});
it('adds a test user, logs in with the test user - fails to modify the password, as old password does not match the current one', function (done) {
var testGroup = {
name: 'TESTGROUP5' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER5' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
testUserClient.login(testUser).then(function () {
testUser.oldPassword = 'NEW PWD';
testUser.password = 'NEW PWD';
testUser.custom_data = {changedCustom: 'changedCustom'};
testUserClient.exchange.security.updateOwnUser(testUser, function (e, result) {
expect(e.toString()).to.be('Error: old password incorrect');
done();
});
}).catch(function (e) {
done(e);
});
});
});
});
});
it('adds a test user, logs in with the test user - modifies the user details without the users password changing', function (done) {
var testGroup = {
name: 'TESTGROUP6' + test_id,
custom_data: {
customString: 'custom1',
customNumber: 0
},
permissions: {
methods: {}
}
}
var testGroupSaved;
var testUserSaved;
var testUserClient;
adminClient.exchange.security.addGroup(testGroup, function (e, result) {
if (e) return done(e);
testGroupSaved = result;
var testUser = {
username: 'TESTUSER6' + test_id,
password: 'TEST PWD',
custom_data: {
something: 'useful'
}
}
adminClient.exchange.security.addUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.username).to.be(testUser.username);
testUserSaved = result;
adminClient.exchange.security.linkGroup(testGroupSaved, testUserSaved, function (e) {
//we'll need to fetch user groups, do that later
if (e) return done(e);
testUserClient = new Mesh.MeshClient({secure: true, port: 8003});
testUserClient.login(testUser).then(function () {
delete testUser.password;
testUser.custom_data = {changedCustom: 'changedCustom'};
//NB - we are using testUserSaved - so there is some _meta data - otherwise this wont work
testUserClient.exchange.security.updateOwnUser(testUser, function (e, result) {
if (e) return done(e);
expect(result.custom_data.changedCustom).to.be('changedCustom');
testUserClient.login({username: testUser.username, password: 'TEST PWD'}).then(done).catch(done);
});
}).catch(function (e) {
done(e);
});
});
});
});
});
require('benchmarket').stop();
});