shared-code-private-messages

This commit is contained in:
Victor Piousbox
2016-04-09 16:56:03 +00:00
parent f4d2184f34
commit 1f4a0680ea
12 changed files with 235 additions and 24 deletions

View File

@@ -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.",

View File

@@ -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,
};

View File

@@ -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;
return user.inbox.blocks;
};

View File

@@ -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;
return user.inbox.messages;
};

View File

@@ -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;
};

View File

@@ -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',

View 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({});
});
});

View 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);
});
});

View 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([]);
});
});

View 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({});
});
});

View 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' });
});
});

View File

@@ -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