linagora-rse
Version:
172 lines (146 loc) • 6.22 kB
JavaScript
;
const request = require('supertest'),
expect = require('chai').expect;
describe('PUT api/users/:uuid/states route', function() {
let app;
let user1Domain1Manager, user2Domain1Member;
let user1Domain2Manager;
let domain1;
const password = 'secret';
let helpers;
beforeEach(function(done) {
helpers = this.helpers;
const self = this;
self.mongoose = require('mongoose');
self.testEnv.initCore(function() {
app = helpers.requireBackend('webserver/application');
helpers.api.applyDomainDeployment('linagora_test_domain', function(err, models) {
expect(err).to.not.exist;
user1Domain1Manager = models.users[0];
user2Domain1Member = models.users[1];
domain1 = models.domain;
helpers.api.applyDomainDeployment('linagora_test_domain2', function(err, models2) {
expect(err).to.not.exist;
user1Domain2Manager = models2.users[0];
helpers.elasticsearch.saveTestConfiguration(helpers.callbacks.noError(done));
});
});
});
});
afterEach(function(done) {
this.helpers.mongo.dropDatabase(done);
});
it('should return 401 if not authenticated', function(done) {
helpers.api.requireLogin(app, 'put', `/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`, done);
});
it('should return 400 if the states is missing', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`));
req.send().expect(400).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('body should be an array');
done();
});
});
});
it('should return 400 if the states is not an array', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = { name: 'login', value: 'disabled' };
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(400).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('body should be an array');
done();
});
});
});
it('should return 400 if the state name is not valid', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{ name: 'login', value: 'notvalid' }];
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(400).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('States is not valid');
done();
});
});
});
it('should return 400 if the state value is not valid', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{ name: 'notvalid', value: 'enabled' }];
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(400).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('States is not valid');
done();
});
});
});
it('should return 400 if the domain_id query is missing', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{ name: 'login', value: 'enabled' }];
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states`));
req.send(states).expect(400).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('The domain_id parameter is mandatory');
done();
});
});
});
it('should return 403 if the request user is not domain manager', function(done) {
helpers.api.loginAsUser(app, user2Domain1Member.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{ name: 'login', value: 'enabled' }];
const req = loggedInAsUser(request(app).put(`/api/users/${user1Domain1Manager._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(403).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.error.details).to.equal('User is not the domain manager');
done();
});
});
});
it('should return 403 if domain manager trying to modify states of user that is not the domain member', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{name: 'login', value: 'enabled'}];
const req = loggedInAsUser(request(app).put(`/api/users/${user1Domain2Manager._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(403).end((err, res) => {
expect(err).to.not.exist;
expect(res.body.details).to.equal('User does not belongs to the domain');
done();
});
});
});
it('should return 204 if update user states successfully', function(done) {
helpers.api.loginAsUser(app, user1Domain1Manager.emails[0], password, function(err, loggedInAsUser) {
if (err) {
return done(err);
}
const states = [{name: 'login', value: 'enabled'}];
const req = loggedInAsUser(request(app).put(`/api/users/${user2Domain1Member._id}/states?domain_id=${domain1._id}`));
req.send(states).expect(204).end(err => {
expect(err).to.not.exist;
done();
});
});
});
});