|
|
|
@@ -12,6 +12,7 @@ import { model as Group } from '../../../../../../website/server/models/group';
|
|
|
|
|
import {
|
|
|
|
|
generateGroup,
|
|
|
|
|
} from '../../../../../helpers/api-unit.helper';
|
|
|
|
|
import i18n from '../../../../../../website/common/script/i18n';
|
|
|
|
|
|
|
|
|
|
describe('Purchasing a group plan for group', () => {
|
|
|
|
|
const EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_GOOGLE = 'Google_subscription';
|
|
|
|
@@ -33,11 +34,14 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
group = generateGroup({
|
|
|
|
|
name: groupName,
|
|
|
|
|
type: 'guild',
|
|
|
|
|
privacy: 'public',
|
|
|
|
|
privacy: 'private',
|
|
|
|
|
leader: user._id,
|
|
|
|
|
});
|
|
|
|
|
await group.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
user,
|
|
|
|
|
sub: {
|
|
|
|
@@ -112,6 +116,30 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
expect(updatedGroup.purchased.plan.dateCreated).to.exist;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('does not create a group plan for a public guild', async () => {
|
|
|
|
|
const publicGroup = generateGroup({
|
|
|
|
|
name: groupName,
|
|
|
|
|
type: 'guild',
|
|
|
|
|
privacy: 'public',
|
|
|
|
|
leader: user._id,
|
|
|
|
|
});
|
|
|
|
|
await publicGroup.save();
|
|
|
|
|
|
|
|
|
|
expect(publicGroup.purchased.plan.planId).to.not.exist;
|
|
|
|
|
data.groupId = publicGroup._id;
|
|
|
|
|
|
|
|
|
|
await expect(api.createSubscription(data))
|
|
|
|
|
.to.eventually.be.rejected.and.to.eql({
|
|
|
|
|
httpCode: 401,
|
|
|
|
|
name: 'NotAuthorized',
|
|
|
|
|
message: i18n.t('onlyPrivateGuildsCanUpgrade'),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const updatedGroup = await Group.findById(publicGroup._id).exec();
|
|
|
|
|
|
|
|
|
|
expect(updatedGroup.purchased.plan.planId).to.not.exist;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('sends an email', async () => {
|
|
|
|
|
expect(group.purchased.plan.planId).to.not.exist;
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
@@ -148,8 +176,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('grants all members of a group a subscription', async () => {
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
expect(group.purchased.plan.planId).to.not.exist;
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
@@ -179,17 +205,28 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
|
expect(sender.sendTxn).to.be.calledTwice;
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[2]).to.eql([
|
|
|
|
|
expect(sender.sendTxn).to.be.calledThrice;
|
|
|
|
|
const recipientCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isRecipient = call.args[0]._id === recipient._id;
|
|
|
|
|
const isJoin = call.args[1] === 'group-member-join';
|
|
|
|
|
return isRecipient && isJoin;
|
|
|
|
|
});
|
|
|
|
|
expect(recipientCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(recipientCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(recipientCall.args[2]).to.eql([
|
|
|
|
|
{ name: 'LEADER', content: user.profile.name },
|
|
|
|
|
{ name: 'GROUP_NAME', content: group.name },
|
|
|
|
|
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NONE },
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// confirm that the other email sent is appropriate:
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
const leaderCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isLeader = call.args[0]._id === group.leader;
|
|
|
|
|
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
|
|
|
|
|
return isLeader && isSubscriptionBegin;
|
|
|
|
|
});
|
|
|
|
|
expect(leaderCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('sends one email to subscribed member of group, stating subscription is cancelled (Stripe)', async () => {
|
|
|
|
@@ -205,17 +242,28 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
|
expect(sender.sendTxn).to.be.calledTwice;
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[2]).to.eql([
|
|
|
|
|
expect(sender.sendTxn).to.be.calledThrice;
|
|
|
|
|
const recipientCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isRecipient = call.args[0]._id === recipient._id;
|
|
|
|
|
const isJoin = call.args[1] === 'group-member-join';
|
|
|
|
|
return isRecipient && isJoin;
|
|
|
|
|
});
|
|
|
|
|
expect(recipientCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(recipientCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(recipientCall.args[2]).to.eql([
|
|
|
|
|
{ name: 'LEADER', content: user.profile.name },
|
|
|
|
|
{ name: 'GROUP_NAME', content: group.name },
|
|
|
|
|
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// confirm that the other email sent is not a cancel-subscription email:
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
const leaderCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isLeader = call.args[0]._id === group.leader;
|
|
|
|
|
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
|
|
|
|
|
return isLeader && isSubscriptionBegin;
|
|
|
|
|
});
|
|
|
|
|
expect(leaderCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('sends one email to subscribed member of group, stating subscription is cancelled (Amazon)', async () => {
|
|
|
|
@@ -238,17 +286,28 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
|
expect(sender.sendTxn).to.be.calledTwice;
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[2]).to.eql([
|
|
|
|
|
expect(sender.sendTxn).to.be.calledThrice;
|
|
|
|
|
const recipientCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isRecipient = call.args[0]._id === recipient._id;
|
|
|
|
|
const isJoin = call.args[1] === 'group-member-join';
|
|
|
|
|
return isRecipient && isJoin;
|
|
|
|
|
});
|
|
|
|
|
expect(recipientCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(recipientCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(recipientCall.args[2]).to.eql([
|
|
|
|
|
{ name: 'LEADER', content: user.profile.name },
|
|
|
|
|
{ name: 'GROUP_NAME', content: group.name },
|
|
|
|
|
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// confirm that the other email sent is not a cancel-subscription email:
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
const leaderCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isLeader = call.args[0]._id === group.leader;
|
|
|
|
|
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
|
|
|
|
|
return isLeader && isSubscriptionBegin;
|
|
|
|
|
});
|
|
|
|
|
expect(leaderCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
|
|
|
|
|
amzLib.getBillingAgreementDetails.restore();
|
|
|
|
|
});
|
|
|
|
@@ -275,17 +334,28 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
|
expect(sender.sendTxn).to.be.calledTwice;
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(sender.sendTxn.firstCall.args[2]).to.eql([
|
|
|
|
|
expect(sender.sendTxn).to.be.calledThrice;
|
|
|
|
|
const recipientCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isRecipient = call.args[0]._id === recipient._id;
|
|
|
|
|
const isJoin = call.args[1] === 'group-member-join';
|
|
|
|
|
return isRecipient && isJoin;
|
|
|
|
|
});
|
|
|
|
|
expect(recipientCall.args[0]._id).to.equal(recipient._id);
|
|
|
|
|
expect(recipientCall.args[1]).to.equal('group-member-join');
|
|
|
|
|
expect(recipientCall.args[2]).to.eql([
|
|
|
|
|
{ name: 'LEADER', content: user.profile.name },
|
|
|
|
|
{ name: 'GROUP_NAME', content: group.name },
|
|
|
|
|
{ name: 'PREVIOUS_SUBSCRIPTION_TYPE', content: EMAIL_TEMPLATE_SUBSCRIPTION_TYPE_NORMAL },
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// confirm that the other email sent is not a cancel-subscription email:
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(sender.sendTxn.secondCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
const leaderCall = sender.sendTxn.getCalls().find(call => {
|
|
|
|
|
const isLeader = call.args[0]._id === group.leader;
|
|
|
|
|
const isSubscriptionBegin = call.args[1] === 'group-subscription-begins';
|
|
|
|
|
return isLeader && isSubscriptionBegin;
|
|
|
|
|
});
|
|
|
|
|
expect(leaderCall.args[0]._id).to.equal(group.leader);
|
|
|
|
|
expect(leaderCall.args[1]).to.equal('group-subscription-begins');
|
|
|
|
|
|
|
|
|
|
paypalPayments.paypalBillingAgreementGet.restore();
|
|
|
|
|
paypalPayments.paypalBillingAgreementCancel.restore();
|
|
|
|
@@ -302,8 +372,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -356,8 +424,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -419,8 +485,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
data.gift = undefined;
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -455,8 +519,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
data.gift = undefined;
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -483,8 +545,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -511,8 +571,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -541,8 +599,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -566,8 +622,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await recipient.cancelSubscription();
|
|
|
|
@@ -589,8 +643,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await recipient.cancelSubscription();
|
|
|
|
@@ -611,8 +663,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -632,8 +682,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -653,8 +701,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -688,8 +734,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -713,8 +757,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -726,13 +768,15 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
const group2 = generateGroup({
|
|
|
|
|
name: 'test group2',
|
|
|
|
|
type: 'guild',
|
|
|
|
|
privacy: 'public',
|
|
|
|
|
privacy: 'private',
|
|
|
|
|
leader: user._id,
|
|
|
|
|
});
|
|
|
|
|
data.groupId = group2._id;
|
|
|
|
|
await group2.save();
|
|
|
|
|
recipient.guilds.push(group2._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
user.guilds.push(group2._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
@@ -757,8 +801,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -770,17 +812,22 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
const group2 = generateGroup({
|
|
|
|
|
name: 'test group2',
|
|
|
|
|
type: 'guild',
|
|
|
|
|
privacy: 'public',
|
|
|
|
|
privacy: 'private',
|
|
|
|
|
leader: user._id,
|
|
|
|
|
});
|
|
|
|
|
data.groupId = group2._id;
|
|
|
|
|
await group2.save();
|
|
|
|
|
recipient.guilds.push(group2._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
user.guilds.push(group2._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|
|
|
|
|
|
const updatedGroup = await Group.findById(group._id).exec();
|
|
|
|
|
updatedGroup.memberCount = 2;
|
|
|
|
|
await updatedGroup.save();
|
|
|
|
|
|
|
|
|
|
await updatedGroup.leave(recipient);
|
|
|
|
|
|
|
|
|
|
updatedUser = await User.findById(recipient._id).exec();
|
|
|
|
@@ -806,8 +853,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -835,8 +880,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -864,8 +907,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
@@ -894,8 +935,6 @@ describe('Purchasing a group plan for group', () => {
|
|
|
|
|
recipient.guilds.push(group._id);
|
|
|
|
|
await recipient.save();
|
|
|
|
|
|
|
|
|
|
user.guilds.push(group._id);
|
|
|
|
|
await user.save();
|
|
|
|
|
data.groupId = group._id;
|
|
|
|
|
|
|
|
|
|
await api.createSubscription(data);
|
|
|
|
|