linagora-rse
Version:
1,119 lines (1,043 loc) • 31.6 kB
JavaScript
;
var expect = require('chai').expect;
var mockery = require('mockery');
describe('The community middleware', function() {
describe('the canJoin fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canJoin;
var req = {
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canJoin;
var req = {
community: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 403 when community is !== open', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canJoin;
var req = {
community: {type: 'foo'},
user: {},
params: {
user_id: {}
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(403);
done();
}
);
middleware(req, res);
});
it('should call next if user can join community', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canJoin;
var req = {
community: {type: 'open'},
user: {},
params: {
user_id: {}
}
};
var res = {
json: function() {
done(new Error());
}
};
middleware(req, res, done);
});
});
describe('the canLeave fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canLeave;
var req = {
user: {},
params: {
user_id: {}
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canLeave;
var req = {
community: {},
params: {
user_id: {}
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.params.user_id is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canLeave;
var req = {
user: {},
community: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 403 when user is the community creator', function(done) {
var ObjectId = require('bson').ObjectId;
var id = new ObjectId();
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canLeave;
var req = {
community: {creator: id},
user: {_id: id},
params: {
user_id: id
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(403);
done();
}
);
middleware(req, res);
});
it('should call next if user can leave community', function(done) {
var ObjectId = require('bson').ObjectId;
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canLeave;
var req = {
community: {creator: new ObjectId()},
user: {_id: new ObjectId()},
params: {
user_id: new ObjectId()
}
};
var res = {
json: function() {
done(new Error());
}
};
middleware(req, res, done);
});
});
describe('requiresCommunityMember fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').requiresCommunityMember;
var req = {
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').requiresCommunityMember;
var req = {
community: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when service check fails', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(new Error());
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').requiresCommunityMember;
var req = {
community: {},
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 403 when user is not a community member', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(null, false);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').requiresCommunityMember;
var req = {
community: {},
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(403);
done();
}
);
middleware(req, res);
});
it('should call next if user is a community member', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(null, true);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').requiresCommunityMember;
var req = {
community: {},
user: {}
};
var res = {
json: function() {
done(new Error());
}
};
middleware(req, res, done);
});
});
describe('the isCreator fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').isCreator;
var req = {
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').isCreator;
var req = {
community: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when user is not the community creator', function(done) {
var ObjectId = require('bson').ObjectId;
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').isCreator;
var req = {
community: {creator: new ObjectId()},
user: {_id: new ObjectId()}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should call next if user is the community creator', function(done) {
var ObjectId = require('bson').ObjectId;
var id = new ObjectId();
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').isCreator;
var req = {
community: {creator: id},
user: {_id: id}
};
var res = {
json: function() {
done(new Error());
}
};
middleware(req, res, done);
});
});
describe('the checkUserIdParameterIsCurrentUser fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserIdParameterIsCurrentUser;
var req = {
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.param(user_id) is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserIdParameterIsCurrentUser;
var req = {
user: {},
params: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when user._id is not equal to the user_id parameter', function(done) {
var ObjectId = require('bson').ObjectId;
var id = new ObjectId();
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserIdParameterIsCurrentUser;
var req = {
user: {_id: id},
params: {
user_id: new ObjectId()
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should call next if user._id is equal to the user_id parameter', function(done) {
var ObjectId = require('bson').ObjectId;
var id = new ObjectId();
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserIdParameterIsCurrentUser;
var req = {
user: {_id: id},
params: {
user_id: '' + id
}
};
var res = this.helpers.express.jsonResponse(
function() {
done(new Error());
}
);
middleware(req, res, done);
});
});
describe('the checkUserParamIsNotMember fn', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserParamIsNotMember;
var req = {
param: function() {
return '123';
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.param(user_id) is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserParamIsNotMember;
var req = {
community: {},
params: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when service check fails', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(new Error());
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserParamIsNotMember;
var req = {
community: {},
params: {
user_id: '123'
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when user is already a community member', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(null, true);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserParamIsNotMember;
var req = {
community: {},
params: {
user_id: '123'
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should call next if user is not a community member', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function(com, user, callback) {
return callback(null, false);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').checkUserParamIsNotMember;
var req = {
community: {},
params: {
user_id: '123'
}
};
var res = {
json: function() {
done(new Error());
}
};
middleware(req, res, done);
});
});
describe('canRead() method', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should call next if the community type is "open"', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function() {
done(new Error('I should not be called'));
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canRead;
var req = {
community: { type: 'open' },
user: {_id: 'user1'}
};
var res = {};
middleware(req, res, done);
});
it('should call next if the community type is "restricted"', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function() {
done(new Error('I should not be called'));
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canRead;
var req = {
community: { type: 'restricted' },
user: {_id: 'user1'}
};
var res = {};
middleware(req, res, done);
});
it('should delegate to isMember middleware if the community type is "private"', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function() {
done();
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canRead;
var req = {
community: { type: 'private' },
user: {_id: 'user1'}
};
var res = {};
var err = function() { done(new Error('I should not be called')); };
middleware(req, res, err);
});
it('should delegate to isMember middleware if the community type is "confidential"', function(done) {
mockery.registerMock('../../core/community', {
member: {
isMember: function() {
done();
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').canRead;
var req = {
community: { type: 'confidential' },
user: {_id: 'user1'}
};
var res = {};
var err = function() { done(new Error('I should not be called')); };
middleware(req, res, err);
});
});
describe('flagCommunityManager() method', function() {
beforeEach(function() {
this.helpers.mock.models({
Community: {}
});
});
it('should send back 400 when req.community is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').flagCommunityManager;
var req = {
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 400 when req.user is not defined', function(done) {
mockery.registerMock('../../core/community', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').flagCommunityManager;
var req = {
community: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res);
});
it('should send back 500 when community.isManager() failed', function(done) {
mockery.registerMock('../../core/community', {
member: {
isManager: function(community, user, callback) {
return callback(new Error('Fail'));
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').flagCommunityManager;
var req = {
community: {},
user: {}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(500);
done();
}
);
middleware(req, res);
});
it('should call next with req.isCommunityManager initialized', function(done) {
mockery.registerMock('../../core/community', {
member: {
isManager: function(community, user, callback) {
return callback(null, true);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').flagCommunityManager;
var req = {
community: {},
user: {}
};
var res = {
json: function() {
done(new Error());
}
};
var next = function() {
expect(req.isCommunityManager).to.be.true;
done();
};
middleware(req, res, next);
});
});
describe('The filterWritableTargets fn', function() {
it('should call next if targets is not set', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(new Error());
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
body: {
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res, done);
});
it('should send back 400 if targets is empty', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(new Error());
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
body: {
targets: []
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res, done);
});
it('should send back 400 if targets is undefined', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(new Error());
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/activitystream').filterWritableTargets;
var req = {
body: {
targets: undefined
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(400);
done();
}
);
middleware(req, res, done);
});
it('should not filter valid and writable targets', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, {_id: uuid});
}
}
});
mockery.registerMock('../../core/activitystreams', {});
mockery.registerMock('../../core/community', {
permission: {
canWrite: function(community, user, callback) {
return callback(null, true);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
user: {},
body: {
targets: [
{
objectType: 'activitystream',
id: '1'
},
{
objectType: 'activitystream',
id: '2'
}
]
}
};
var res = this.helpers.express.jsonResponse(
function() {
}
);
var next = function() {
expect(req.body.targets.length).to.equal(2);
done();
};
middleware(req, res, next);
});
it('should filter invalid targets and keep writable targets', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
if (uuid === '1') {
return cb(null, {_id: uuid});
} else {
return cb();
}
}
}
});
mockery.registerMock('../../core/activitystreams', {});
mockery.registerMock('../../core/community', {
permission: {
canWrite: function(community, user, callback) {
return callback(null, true);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
user: {},
body: {
targets: [
{
objectType: 'activitystream',
id: '1'
},
{
objectType: 'activitystream',
id: '2'
}
]
}
};
var res = this.helpers.express.jsonResponse(
function() {
}
);
var next = function() {
expect(req.message_targets).to.exist;
expect(req.message_targets.length).to.equal(1);
expect(req.message_targets[0].id).to.equal('1');
done();
};
middleware(req, res, next);
});
it('should filter unwritable targets', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, {_id: uuid});
}
}
});
mockery.registerMock('../../core/activitystreams', {});
mockery.registerMock('../../core/community', {
permission: {
canWrite: function(community, user, callback) {
return callback(null, community._id > 10);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
user: {},
body: {
targets: [
{
objectType: 'activitystream',
id: 1
},
{
objectType: 'activitystream',
id: 2
},
{
objectType: 'activitystream',
id: 3
},
{
objectType: 'activitystream',
id: 11
},
{
objectType: 'activitystream',
id: 12
}
]
}
};
var res = this.helpers.express.jsonResponse(
function() {
done(new Error());
}
);
var next = function() {
expect(req.message_targets).to.exist;
expect(req.message_targets.length).to.equal(2);
done();
};
middleware(req, res, next);
});
it('should send back 403 if no valid streams are set', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
if (uuid === '1') {
return cb(null, {_id: uuid});
} else {
return cb();
}
}
}
});
mockery.registerMock('../../core/activitystreams', {});
mockery.registerMock('../../core/community', {
permission: {
canWrite: function(community, user, callback) {
return callback(null, false);
}
}
});
var middleware = this.helpers.requireBackend('webserver/middleware/community').filterWritableTargets;
var req = {
user: {},
body: {
targets: [
{
objectType: 'activitystream',
id: 1
},
{
objectType: 'activitystream',
id: 2
},
{
objectType: 'activitystream',
id: 3
},
{
objectType: 'activitystream',
id: 11
},
{
objectType: 'activitystream',
id: 12
}
]
}
};
var res = this.helpers.express.jsonResponse(
function(code) {
expect(code).to.equal(403);
return done();
}
);
middleware(req, res, done);
});
it('should be passthrough if inReplyTo is in the body', function(done) {
this.helpers.mock.models({
Community: {
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/activitystream').filterWritableTargets;
var req = {
body: {
targets: undefined,
inReplyTo: 'reply'
}
};
var next = function() {
done();
};
middleware(req, {}, next);
});
});
describe('The findStreamResource fn', function() {
it('should call next with error Communtity.getFromActivityStreamID send back error', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(new Error());
}
},
Domain: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, null);
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/activitystream').findStreamResource;
var req = {
params: {
uuid: 1
}
};
var res = this.helpers.express.jsonResponse(
function() {
done(new Error());
}
);
var next = function(err) {
expect(err).to.exist;
done();
};
middleware(req, res, next);
});
it('should call next when stream resource is found (Community)', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, {_id: 123});
}
},
Domain: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, null);
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/activitystream').findStreamResource;
var req = {
params: {
uuid: 1
}
};
var res = this.helpers.express.jsonResponse(
function() {
done(new Error('Should not be called'));
}
);
var next = function() {
done();
};
middleware(req, res, next);
});
it('should call next if Community is not found', function(done) {
this.helpers.mock.models({
Community: {
getFromActivityStreamID: function(uuid, cb) {
return cb(null, null);
}
}
});
mockery.registerMock('../../core/activitystreams', {});
var middleware = this.helpers.requireBackend('webserver/middleware/activitystream').findStreamResource;
var req = {
params: {
uuid: 1
}
};
var res = {
json: function() {
done(new Error());
}
};
var next = function(err) {
expect(err).to.not.exist;
done();
};
middleware(req, res, next);
});
});
});