mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Add tests for group.invite
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
var sinon = require('sinon');
|
var sinon = require('sinon');
|
||||||
var chai = require("chai");
|
var chai = require("chai");
|
||||||
chai.use(require('chai-as-promised'));
|
|
||||||
chai.use(require("sinon-chai"));
|
chai.use(require("sinon-chai"));
|
||||||
var expect = chai.expect;
|
var expect = chai.expect;
|
||||||
|
|
||||||
@@ -9,6 +8,137 @@ var Group = require('../../../website/src/models/group').model;
|
|||||||
var groupsController = require('../../../website/src/controllers/groups');
|
var groupsController = require('../../../website/src/controllers/groups');
|
||||||
|
|
||||||
describe('Groups Controller', function() {
|
describe('Groups Controller', function() {
|
||||||
|
var utils = require('../../../website/src/utils');
|
||||||
|
|
||||||
|
describe('#invite', function() {
|
||||||
|
var res, req, user, group;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
group = {
|
||||||
|
_id: 'group-id',
|
||||||
|
name: 'group-name',
|
||||||
|
type: 'party',
|
||||||
|
members: [
|
||||||
|
'user-id',
|
||||||
|
'another-user'
|
||||||
|
],
|
||||||
|
save: sinon.stub().yields(),
|
||||||
|
markModified: sinon.spy()
|
||||||
|
};
|
||||||
|
|
||||||
|
user = {
|
||||||
|
_id: 'user-id',
|
||||||
|
name: 'inviter',
|
||||||
|
email: 'inviter@example.com',
|
||||||
|
save: sinon.stub().yields(),
|
||||||
|
markModified: sinon.spy()
|
||||||
|
};
|
||||||
|
|
||||||
|
res = {
|
||||||
|
locals: {
|
||||||
|
group: group,
|
||||||
|
user: user
|
||||||
|
},
|
||||||
|
json: sinon.stub(),
|
||||||
|
send: sinon.stub()
|
||||||
|
};
|
||||||
|
|
||||||
|
req = {
|
||||||
|
body: {}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
context('uuids', function() {
|
||||||
|
beforeEach(function() {
|
||||||
|
req.body.uuids = ['invited-user'];
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns 400 if user not found');
|
||||||
|
|
||||||
|
it('returns a 400 if user is already in the group');
|
||||||
|
|
||||||
|
it('retuns 400 if user was already invited to that group');
|
||||||
|
|
||||||
|
it('returns 400 if user is already pending an invitation');
|
||||||
|
|
||||||
|
it('returns 400 is user is already in another party');
|
||||||
|
|
||||||
|
it('emails invited user');
|
||||||
|
|
||||||
|
it('does not email invited user if email preference is set to false');
|
||||||
|
});
|
||||||
|
|
||||||
|
context('emails', function() {
|
||||||
|
var EmailUnsubscription = require('../../../website/src/models/emailUnsubscription').model;
|
||||||
|
var execStub, selectStub;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
sinon.stub(utils, 'encrypt').returns('http://link.com');
|
||||||
|
sinon.stub(utils, 'getUserInfo').returns({
|
||||||
|
name: user.name,
|
||||||
|
email: user.email
|
||||||
|
});
|
||||||
|
execStub = sinon.stub();
|
||||||
|
selectStub = sinon.stub().returns({
|
||||||
|
exec: execStub
|
||||||
|
});
|
||||||
|
sinon.stub(User, 'findOne').returns({
|
||||||
|
select: selectStub
|
||||||
|
});
|
||||||
|
sinon.stub(EmailUnsubscription, 'findOne');
|
||||||
|
sinon.stub(utils, 'txnEmail');
|
||||||
|
|
||||||
|
req.body.emails = [{email: 'user@example.com', name: 'user'}];
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function() {
|
||||||
|
User.findOne.restore();
|
||||||
|
EmailUnsubscription.findOne.restore();
|
||||||
|
utils.encrypt.restore();
|
||||||
|
utils.getUserInfo.restore();
|
||||||
|
utils.txnEmail.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('emails user with invite', function() {
|
||||||
|
execStub.yields(null, null);
|
||||||
|
EmailUnsubscription.findOne.yields(null, null);
|
||||||
|
|
||||||
|
groupsController.invite(req, res);
|
||||||
|
|
||||||
|
expect(utils.txnEmail).to.be.calledOnce;
|
||||||
|
expect(utils.txnEmail).to.be.calledWith(
|
||||||
|
{ email: 'user@example.com', name: 'user' },
|
||||||
|
'invite-friend',
|
||||||
|
[
|
||||||
|
{ name: 'LINK', content: '?partyInvite=http://link.com' },
|
||||||
|
{ name: 'INVITER', content: 'inviter' },
|
||||||
|
{ name: 'REPLY_TO_ADDRESS', content: 'inviter@example.com' }
|
||||||
|
]
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not email user if user is on unsubscribe list', function() {
|
||||||
|
EmailUnsubscription.findOne.yields(null, {_id: 'on-list'});
|
||||||
|
|
||||||
|
expect(utils.txnEmail).to.not.be.called;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checks if a user with provided email already exists');
|
||||||
|
});
|
||||||
|
|
||||||
|
context('others', function() {
|
||||||
|
it ('returns a 400 error', function() {
|
||||||
|
groupsController.invite(req, res);
|
||||||
|
|
||||||
|
expect(res.json).to.be.calledOnce;
|
||||||
|
expect(res.json).to.be.calledWith(
|
||||||
|
400,
|
||||||
|
{ err: 'Can invite only by email or uuid' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('#leave', function() {
|
describe('#leave', function() {
|
||||||
var res, req, user, group;
|
var res, req, user, group;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user