mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
shared-code-private-messages
This commit is contained in:
@@ -104,6 +104,7 @@
|
||||
"spellNotFound": "Spell \"<%= spellId %>\" not found.",
|
||||
"partyNotFound": "Party not found",
|
||||
"targetIdUUID": "\"targetId\" must be a valid UUID.",
|
||||
"invalidUUID": "UUID must be valid",
|
||||
"challengeTasksNoCast": "Casting a spell on challenge tasks is not supported.",
|
||||
"spellNotOwned": "You don't own this spell.",
|
||||
"spellLevelTooHigh": "You must be level <%= level %> to use this spell.",
|
||||
|
||||
@@ -115,6 +115,9 @@ import sell from './ops/sell';
|
||||
import unlock from './ops/unlock';
|
||||
import revive from './ops/revive';
|
||||
import rebirth from './ops/rebirth';
|
||||
import blockUser from './ops/blockUser';
|
||||
import clearPMs from './ops/clearPMs';
|
||||
import deletePM from './ops/deletePM';
|
||||
import reroll from './ops/reroll';
|
||||
|
||||
api.ops = {
|
||||
@@ -147,6 +150,9 @@ api.ops = {
|
||||
unlock,
|
||||
revive,
|
||||
rebirth,
|
||||
blockUser,
|
||||
clearPMs,
|
||||
deletePM,
|
||||
reroll,
|
||||
};
|
||||
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
module.exports = function(user, req, cb) {
|
||||
var i;
|
||||
i = user.inbox.blocks.indexOf(req.params.uuid);
|
||||
if (~i) {
|
||||
user.inbox.blocks.splice(i, 1);
|
||||
} else {
|
||||
import validator from 'validator';
|
||||
import i18n from '../../../common/script/i18n';
|
||||
import {
|
||||
BadRequest,
|
||||
} from '../libs/errors';
|
||||
|
||||
module.exports = function blockUser (user, req = {}) {
|
||||
if (!validator.isUUID(req.params.uuid)) throw new BadRequest(i18n.t('invalidUUID', req.language));
|
||||
|
||||
let i = user.inbox.blocks.indexOf(req.params.uuid);
|
||||
if (i === -1) {
|
||||
user.inbox.blocks.push(req.params.uuid);
|
||||
} else {
|
||||
user.inbox.blocks.splice(i, 1);
|
||||
}
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('inbox.blocks');
|
||||
}
|
||||
return typeof cb === "function" ? cb(null, user.inbox.blocks) : void 0;
|
||||
|
||||
user.markModified('inbox.blocks');
|
||||
return user.inbox.blocks;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
module.exports = function(user, req, cb) {
|
||||
|
||||
module.exports = function clearPMs (user) {
|
||||
user.inbox.messages = {};
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('inbox.messages');
|
||||
}
|
||||
return typeof cb === "function" ? cb(null, user.inbox.messages) : void 0;
|
||||
user.markModified('inbox.messages');
|
||||
return user.inbox.messages;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module.exports = function(user, req, cb) {
|
||||
delete user.inbox.messages[req.params.id];
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('inbox.messages.' + req.params.id);
|
||||
}
|
||||
return typeof cb === "function" ? cb(null, user.inbox.messages) : void 0;
|
||||
import _ from 'lodash';
|
||||
|
||||
module.exports = function deletePM (user, req = {}) {
|
||||
delete user.inbox.messages[_.get(req, 'params.id')];
|
||||
user.markModified(`inbox.messages.${req.params.id}`);
|
||||
return user.inbox.messages;
|
||||
};
|
||||
|
||||
@@ -11,9 +11,6 @@ const COMMON_FILES = [
|
||||
// @TODO remove these negations as the files are converted over.
|
||||
'!./common/script/content/index.js',
|
||||
'!./common/script/ops/addPushDevice.js',
|
||||
'!./common/script/ops/blockUser.js',
|
||||
'!./common/script/ops/clearPMs.js',
|
||||
'!./common/script/ops/deletePM.js',
|
||||
'!./common/script/ops/reset.js',
|
||||
'!./common/script/fns/crit.js',
|
||||
'!./common/script/fns/randomDrop.js',
|
||||
|
||||
27
test/api/v3/integration/user/DELETE-user_messages.test.js
Normal file
27
test/api/v3/integration/user/DELETE-user_messages.test.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../../../helpers/api-integration/v3';
|
||||
|
||||
describe('DELETE user message', () => {
|
||||
let user;
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await generateUser({ inbox: { messages: { first: 'message', second: 'message' } } });
|
||||
expect(user.inbox.messages.first).to.eql('message');
|
||||
expect(user.inbox.messages.second).to.eql('message');
|
||||
});
|
||||
|
||||
it('one message', async () => {
|
||||
let result = await user.del('/user/messages/first');
|
||||
await user.sync();
|
||||
expect(result).to.eql({ second: 'message' });
|
||||
expect(user.inbox.messages).to.eql({ second: 'message' });
|
||||
});
|
||||
|
||||
it('clear all', async () => {
|
||||
let result = await user.del('/user/messages');
|
||||
await user.sync();
|
||||
expect(user.inbox.messages).to.eql({});
|
||||
expect(result).to.eql({});
|
||||
});
|
||||
});
|
||||
34
test/api/v3/integration/user/POST-user_block.test.js
Normal file
34
test/api/v3/integration/user/POST-user_block.test.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
generateUser,
|
||||
translate as t,
|
||||
} from '../../../../helpers/api-integration/v3';
|
||||
|
||||
describe('block user', () => {
|
||||
let user;
|
||||
let blockedUser;
|
||||
let blockedUser2;
|
||||
|
||||
beforeEach(async () => {
|
||||
blockedUser = await generateUser();
|
||||
blockedUser2 = await generateUser();
|
||||
user = await generateUser({ inbox: { blocks: [blockedUser._id] } });
|
||||
expect(user.inbox.blocks.length).to.eql(1);
|
||||
expect(user.inbox.blocks).to.eql([blockedUser._id]);
|
||||
});
|
||||
|
||||
it('validates uuid', async () => {
|
||||
await expect(user.post('/user/block/1')).to.eventually.be.rejected.and.eql({
|
||||
code: 400,
|
||||
error: 'BadRequest',
|
||||
message: t('invalidUUID'),
|
||||
});
|
||||
});
|
||||
|
||||
it('successfully', async () => {
|
||||
let response = await user.post(`/user/block/${blockedUser2._id}`);
|
||||
await user.sync();
|
||||
expect(response).to.eql([blockedUser._id, blockedUser2._id]);
|
||||
expect(user.inbox.blocks.length).to.eql(2);
|
||||
expect(user.inbox.blocks).to.include(blockedUser2._id);
|
||||
});
|
||||
});
|
||||
44
test/common/ops/blockUser.test.js
Normal file
44
test/common/ops/blockUser.test.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import blockUser from '../../../common/script/ops/blockUser';
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../helpers/common.helper';
|
||||
import i18n from '../../../common/script/i18n';
|
||||
|
||||
describe('shared.ops.blockUser', () => {
|
||||
let user;
|
||||
let blockedUser;
|
||||
let blockedUser2;
|
||||
|
||||
beforeEach(() => {
|
||||
blockedUser = generateUser();
|
||||
blockedUser2 = generateUser();
|
||||
user = generateUser();
|
||||
expect(user.inbox.blocks).to.eql([]);
|
||||
});
|
||||
|
||||
it('validates uuid', (done) => {
|
||||
try {
|
||||
blockUser(user, { params: { uuid: 1 } });
|
||||
} catch (error) {
|
||||
expect(error.message).to.eql(i18n.t('invalidUUID'));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
it('blocks user', () => {
|
||||
let result = blockUser(user, { params: { uuid: blockedUser._id } });
|
||||
expect(user.inbox.blocks).to.eql([blockedUser._id]);
|
||||
expect(result).to.eql([blockedUser._id]);
|
||||
result = blockUser(user, { params: { uuid: blockedUser2._id } });
|
||||
expect(user.inbox.blocks).to.eql([blockedUser._id, blockedUser2._id]);
|
||||
expect(result).to.eql([blockedUser._id, blockedUser2._id]);
|
||||
});
|
||||
|
||||
it('blocks, then unblocks user', () => {
|
||||
blockUser(user, { params: { uuid: blockedUser._id } });
|
||||
expect(user.inbox.blocks).to.eql([blockedUser._id]);
|
||||
let result = blockUser(user, { params: { uuid: blockedUser._id } });
|
||||
expect(user.inbox.blocks).to.eql([]);
|
||||
expect(result).to.eql([]);
|
||||
});
|
||||
});
|
||||
20
test/common/ops/clearPMs.test.js
Normal file
20
test/common/ops/clearPMs.test.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import clearPMs from '../../../common/script/ops/clearPMs';
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../helpers/common.helper';
|
||||
|
||||
describe('shared.ops.clearPMs', () => {
|
||||
let user;
|
||||
|
||||
beforeEach(() => {
|
||||
user = generateUser();
|
||||
user.inbox.messages = { first: 'message', second: 'message' };
|
||||
});
|
||||
|
||||
it('clears messages', () => {
|
||||
expect(user.inbox.messages).to.not.eql({});
|
||||
let result = clearPMs(user);
|
||||
expect(user.inbox.messages).to.eql({});
|
||||
expect(result).to.eql({});
|
||||
});
|
||||
});
|
||||
20
test/common/ops/deletePM.test.js
Normal file
20
test/common/ops/deletePM.test.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import deletePM from '../../../common/script/ops/deletePM';
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../helpers/common.helper';
|
||||
|
||||
describe('shared.ops.clearPMs', () => {
|
||||
let user;
|
||||
|
||||
beforeEach(() => {
|
||||
user = generateUser();
|
||||
user.inbox.messages = { first: 'message', second: 'message' };
|
||||
});
|
||||
|
||||
it('delete message', () => {
|
||||
expect(user.inbox.messages).to.not.eql({ second: 'message' });
|
||||
let response = deletePM(user, { params: { id: 'first' } });
|
||||
expect(user.inbox.messages).to.eql({ second: 'message' });
|
||||
expect(response).to.eql({ second: 'message' });
|
||||
});
|
||||
});
|
||||
@@ -974,6 +974,63 @@ api.userRebirth = {
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* @api {post} /user/block/:uuid blocks and unblocks a user
|
||||
* @apiVersion 3.0.0
|
||||
* @apiName BlockUser
|
||||
* @apiGroup User
|
||||
* @apiSuccess {}
|
||||
**/
|
||||
api.blockUser = {
|
||||
method: 'POST',
|
||||
middlewares: [authWithHeaders()],
|
||||
url: '/user/block/:uuid',
|
||||
async handler (req, res) {
|
||||
let user = res.locals.user;
|
||||
let blocks = common.ops.blockUser(user, req);
|
||||
await user.save();
|
||||
res.respond(200, blocks);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* @api {delete} /user/messages/:id delete this message
|
||||
* @apiVersion 3.0.0
|
||||
* @apiName deleteMessage
|
||||
* @apiGroup User
|
||||
* @apiSuccess {}
|
||||
**/
|
||||
api.deleteMessage = {
|
||||
method: 'DELETE',
|
||||
middlewares: [authWithHeaders(), cron],
|
||||
url: '/user/messages/:id',
|
||||
async handler (req, res) {
|
||||
let user = res.locals.user;
|
||||
let messages = common.ops.deletePM(user, req);
|
||||
await user.save();
|
||||
res.respond(200, messages);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* @api {delete} /user/messages delete all messages
|
||||
* @apiVersion 3.0.0
|
||||
* @apiName clearMessages
|
||||
* @apiGroup User
|
||||
* @apiSuccess {}
|
||||
**/
|
||||
api.clearMessages = {
|
||||
method: 'DELETE',
|
||||
middlewares: [authWithHeaders(), cron],
|
||||
url: '/user/messages',
|
||||
async handler (req, res) {
|
||||
let user = res.locals.user;
|
||||
let PMs = common.ops.clearPMs(user, req);
|
||||
await user.save();
|
||||
res.respond(200, PMs);
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* @api {post} /user/reroll Rerolls a user.
|
||||
* @apiVersion 3.0.0
|
||||
|
||||
Reference in New Issue
Block a user