mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
* remove some unused dependencies * update mongoose version * make common tests pass * Make unit tests pass * make api v3 integration tests pass * fix lint issues * fix issue with package-lock * fix(lint): we don't need no .js * fix(lint): update to latest config-habitrpg * chore(npm): update package locks * fix(test): replace deprecated fn * chore(package): update eslint-habitrpg again * fix(lint): server linting * fix(lint): client linting * fix(client): correct mangled common imports * chore(npm): update package-locks * fix(lint): punctuation, module --------- Co-authored-by: SabreCat <sabrecat@gmail.com> Co-authored-by: SabreCat <sabe@habitica.com>
124 lines
3.3 KiB
JavaScript
124 lines
3.3 KiB
JavaScript
import {
|
|
generateUser,
|
|
createAndPopulateGroup,
|
|
translate as t,
|
|
} from '../../../../helpers/api-integration/v3';
|
|
|
|
describe('POST /user/purchase/:type/:key', () => {
|
|
let user;
|
|
const type = 'hatchingPotions';
|
|
const key = 'Base';
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser({
|
|
balance: 40,
|
|
});
|
|
});
|
|
|
|
// More tests in common code unit tests
|
|
|
|
it('returns an error when key is not provided', async () => {
|
|
await expect(user.post('/user/purchase/gems/gem'))
|
|
.to.eventually.be.rejected.and.eql({
|
|
code: 401,
|
|
error: 'NotAuthorized',
|
|
message: t('mustSubscribeToPurchaseGems'),
|
|
});
|
|
});
|
|
|
|
it('purchases a gem item', async () => {
|
|
await user.post(`/user/purchase/${type}/${key}`);
|
|
await user.sync();
|
|
|
|
expect(user.items[type][key]).to.equal(1);
|
|
});
|
|
|
|
it('can convert gold to gems if subscribed', async () => {
|
|
const oldBalance = user.balance;
|
|
await user.updateOne({
|
|
'purchased.plan.customerId': 'group-plan',
|
|
'stats.gp': 1000,
|
|
});
|
|
await user.post('/user/purchase/gems/gem');
|
|
await user.sync();
|
|
expect(user.balance).to.equal(oldBalance + 0.25);
|
|
});
|
|
|
|
it('leader can convert gold to gems even if the group plan prevents it', async () => {
|
|
const { group, groupLeader } = await createAndPopulateGroup({
|
|
groupDetails: {
|
|
name: 'test',
|
|
type: 'guild',
|
|
privacy: 'private',
|
|
},
|
|
upgradeToGroupPlan: true,
|
|
});
|
|
await group.updateOne({
|
|
'leaderOnly.getGems': true,
|
|
'purchased.plan.customerId': 123,
|
|
});
|
|
await groupLeader.sync();
|
|
const oldBalance = groupLeader.balance;
|
|
|
|
await groupLeader.updateOne({
|
|
'purchased.plan.customerId': 'group-plan',
|
|
'stats.gp': 1000,
|
|
});
|
|
await groupLeader.post('/user/purchase/gems/gem');
|
|
|
|
await groupLeader.sync();
|
|
expect(groupLeader.balance).to.equal(oldBalance + 0.25);
|
|
});
|
|
|
|
it('cannot convert gold to gems if the group plan prevents it', async () => {
|
|
const { group, members } = await createAndPopulateGroup({
|
|
groupDetails: {
|
|
name: 'test',
|
|
type: 'guild',
|
|
privacy: 'private',
|
|
},
|
|
members: 1,
|
|
upgradeToGroupPlan: true,
|
|
});
|
|
await group.updateOne({
|
|
'leaderOnly.getGems': true,
|
|
'purchased.plan.customerId': 123,
|
|
});
|
|
const oldBalance = members[0].balance;
|
|
|
|
await members[0].updateOne({
|
|
'purchased.plan.customerId': 'group-plan',
|
|
'stats.gp': 1000,
|
|
});
|
|
await expect(members[0].post('/user/purchase/gems/gem'))
|
|
.to.eventually.be.rejected.and.eql({
|
|
code: 401,
|
|
error: 'NotAuthorized',
|
|
message: t('groupPolicyCannotGetGems'),
|
|
});
|
|
|
|
await members[0].sync();
|
|
expect(members[0].balance).to.equal(oldBalance);
|
|
});
|
|
|
|
describe('bulk purchasing', () => {
|
|
it('purchases a gem item', async () => {
|
|
await user.post(`/user/purchase/${type}/${key}`, { quantity: 2 });
|
|
await user.sync();
|
|
|
|
expect(user.items[type][key]).to.equal(2);
|
|
});
|
|
|
|
it('can convert gold to gems if subscribed', async () => {
|
|
const oldBalance = user.balance;
|
|
await user.updateOne({
|
|
'purchased.plan.customerId': 'group-plan',
|
|
'stats.gp': 1000,
|
|
});
|
|
await user.post('/user/purchase/gems/gem', { quantity: 2 });
|
|
await user.sync();
|
|
expect(user.balance).to.equal(oldBalance + 0.50);
|
|
});
|
|
});
|
|
});
|