mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-13 12:47:28 +01:00
* log armoire, quoest response and cron events to history * show user history in admin panel * allow stats to be edited from admin panel * Improve admin panel stats input * improve setting client in history * fix tests * fix lint * fix armoire buying issue * Improve hero saving * Formatting fix * Improve user history logging * allow class to be changed from admin panel * make terminating subscriptions easier * support decimal extraMonths * Fix editing some achievements in admin panel * log if a user invites party to quest * Log more quest events into user history * make userhistory length configurable * fix some numbered achievements * fix extraMonths field * Automatically set up group plan subs with admin panel * show party info nicer in admin panel * improve admin panel sub handling * add missing brace * display when there are unsaved changes * fix setting group plan * fix showing group id * Display group plan info in admin panel * fix setting hourglass promo date * Improve termination handling in admin panel * reload data after certain save events in admin panel * remove console * fix plan.extraMonths not being reset if terminating a sub * add more options when cancelling subs * reload data after group plan change * Add a way to remove users from a party * fix issue with removing user from party * pass party id correctly * correctly call async function * Improve sub display in admin panel * fix line length * fix line * shorter * plaid * fix(lint): vue code style --------- Co-authored-by: Kalista Payne <sabrecat@gmail.com>
81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
import { v4 as generateUUID } from 'uuid';
|
|
import {
|
|
generateUser,
|
|
translate as t,
|
|
} from '../../../../helpers/api-integration/v3';
|
|
|
|
describe('GET /heroes/:heroId', () => {
|
|
let user;
|
|
|
|
const heroFields = [
|
|
'_id', 'id', 'auth', 'balance', 'contributor', 'flags', 'items',
|
|
'lastCron', 'party', 'preferences', 'profile', 'purchased', 'secret', 'achievements',
|
|
'stats',
|
|
];
|
|
|
|
before(async () => {
|
|
user = await generateUser({
|
|
permissions: { userSupport: true },
|
|
});
|
|
});
|
|
|
|
it('requires the caller to be an admin', async () => {
|
|
const nonAdmin = await generateUser();
|
|
|
|
await expect(nonAdmin.get(`/hall/heroes/${user._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 401,
|
|
error: 'NotAuthorized',
|
|
message: t('noPrivAccess'),
|
|
});
|
|
});
|
|
|
|
it('validates req.params.heroId', async () => {
|
|
await expect(user.get('/hall/heroes/invalidUUID')).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('userWithIDNotFound', { userId: 'invalidUUID' }),
|
|
});
|
|
});
|
|
|
|
it('handles non-existing heroes', async () => {
|
|
const dummyId = generateUUID();
|
|
await expect(user.get(`/hall/heroes/${dummyId}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('userWithIDNotFound', { userId: dummyId }),
|
|
});
|
|
});
|
|
|
|
it('returns only necessary hero data given user id', async () => {
|
|
const hero = await generateUser({
|
|
contributor: { tier: 23 },
|
|
secret: {
|
|
text: 'Super Hero',
|
|
},
|
|
});
|
|
const heroRes = await user.get(`/hall/heroes/${hero._id}`);
|
|
|
|
expect(heroRes).to.have.all.keys(heroFields); // works as: object has all and only these keys
|
|
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
|
|
expect(heroRes.profile).to.have.all.keys(['name']);
|
|
expect(heroRes.secret.text).to.be.eq('Super Hero');
|
|
});
|
|
|
|
it('returns only necessary hero data given username', async () => {
|
|
const hero = await generateUser({
|
|
contributor: { tier: 23 },
|
|
});
|
|
const heroRes = await user.get(`/hall/heroes/${hero.auth.local.username}`);
|
|
|
|
expect(heroRes).to.have.all.keys(heroFields);
|
|
expect(heroRes.auth.local).not.to.have.keys(['salt', 'hashed_password']);
|
|
expect(heroRes.profile).to.have.all.keys(['name']);
|
|
});
|
|
|
|
it('returns correct hero using search with difference case', async () => {
|
|
await generateUser({}, { username: 'TestUpperCaseName123' });
|
|
const heroRes = await user.get('/hall/heroes/TestuPPerCasEName123');
|
|
expect(heroRes.auth.local.username).to.equal('TestUpperCaseName123');
|
|
});
|
|
});
|