mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 07:12:58 -05:00
163 lines
6.6 KiB
TypeScript
163 lines
6.6 KiB
TypeScript
import { init, settings } from '../../../src/static/js/utils/settings/member';
|
|
|
|
const memberConfig = (user?: any, features?: any) => {
|
|
init(user, features);
|
|
return settings();
|
|
};
|
|
|
|
describe('utils/settings', () => {
|
|
describe('member', () => {
|
|
// @todo: Revisit this behavior
|
|
test('Returns anonymous defaults when user not provided', () => {
|
|
const cfg = memberConfig();
|
|
|
|
expect(cfg).toStrictEqual({
|
|
name: null,
|
|
username: null,
|
|
thumbnail: null,
|
|
is: { admin: false, anonymous: true },
|
|
can: {
|
|
login: true,
|
|
register: true,
|
|
addMedia: false,
|
|
editProfile: false,
|
|
canSeeMembersPage: true,
|
|
usersNeedsToBeApproved: true,
|
|
changePassword: true,
|
|
deleteProfile: false,
|
|
readComment: true,
|
|
addComment: false,
|
|
mentionComment: false,
|
|
deleteComment: false,
|
|
editMedia: false,
|
|
deleteMedia: false,
|
|
editSubtitle: false,
|
|
manageMedia: false,
|
|
manageUsers: false,
|
|
manageComments: false,
|
|
reportMedia: false,
|
|
downloadMedia: false,
|
|
saveMedia: false,
|
|
likeMedia: true,
|
|
dislikeMedia: true,
|
|
shareMedia: true,
|
|
contactUser: false,
|
|
},
|
|
pages: { home: null, about: null, media: null, playlists: null },
|
|
});
|
|
});
|
|
|
|
test('Trims user strings and applies user capability booleans when authenticated', () => {
|
|
const cfg = memberConfig({
|
|
is: { anonymous: false, admin: true },
|
|
name: ' John Doe ',
|
|
username: ' johnd ',
|
|
thumbnail: ' /img/j.png ',
|
|
can: {
|
|
changePassword: true,
|
|
deleteProfile: true,
|
|
addComment: true,
|
|
mentionComment: true,
|
|
deleteComment: true,
|
|
editMedia: true,
|
|
deleteMedia: true,
|
|
editSubtitle: true,
|
|
manageMedia: true,
|
|
manageUsers: true,
|
|
manageComments: true,
|
|
contactUser: true,
|
|
addMedia: true,
|
|
editProfile: true,
|
|
readComment: true,
|
|
canSeeMembersPage: true,
|
|
usersNeedsToBeApproved: false,
|
|
},
|
|
pages: { about: ' /u/john/about ', media: ' /u/john ', playlists: ' /u/john/playlists ' },
|
|
});
|
|
|
|
expect(cfg).toStrictEqual({
|
|
name: 'John Doe',
|
|
username: 'johnd',
|
|
thumbnail: '/img/j.png',
|
|
is: { admin: true, anonymous: false },
|
|
can: {
|
|
login: true,
|
|
register: true,
|
|
addMedia: true,
|
|
editProfile: true,
|
|
canSeeMembersPage: true,
|
|
usersNeedsToBeApproved: false,
|
|
changePassword: true,
|
|
deleteProfile: true,
|
|
readComment: true,
|
|
addComment: true,
|
|
mentionComment: true,
|
|
deleteComment: true,
|
|
editMedia: true,
|
|
deleteMedia: true,
|
|
editSubtitle: true,
|
|
manageMedia: true,
|
|
manageUsers: true,
|
|
manageComments: true,
|
|
reportMedia: false,
|
|
downloadMedia: false,
|
|
saveMedia: false,
|
|
likeMedia: true,
|
|
dislikeMedia: true,
|
|
shareMedia: true,
|
|
contactUser: true,
|
|
},
|
|
pages: { home: null, about: '/u/john/about', media: '/u/john', playlists: '/u/john/playlists' },
|
|
});
|
|
});
|
|
|
|
test('Comment capabilities require both user.can and features.media.actions', () => {
|
|
const cfg1 = memberConfig(
|
|
{ is: { anonymous: false }, can: { addComment: true, mentionComment: true } },
|
|
{ media: { actions: { comment: false, comment_mention: true } } }
|
|
);
|
|
expect(cfg1.can.addComment).toBe(false);
|
|
expect(cfg1.can.mentionComment).toBe(true);
|
|
|
|
const cfg2 = memberConfig(
|
|
{ is: { anonymous: false }, can: { addComment: true, mentionComment: true } },
|
|
{ media: { actions: { comment: true, comment_mention: true } } }
|
|
);
|
|
expect(cfg2.can.addComment).toBe(true);
|
|
expect(cfg2.can.mentionComment).toBe(true);
|
|
});
|
|
|
|
test('Header login/register reflect headerBar feature flags', () => {
|
|
expect(memberConfig(undefined, { headerBar: { hideLogin: true } }).can.login).toBe(false);
|
|
expect(memberConfig(undefined, { headerBar: { hideRegister: true } }).can.register).toBe(false);
|
|
expect(memberConfig(undefined, { headerBar: { hideLogin: false, hideRegister: false } }).can).toMatchObject(
|
|
{ login: true, register: true }
|
|
);
|
|
});
|
|
|
|
test('Media actions flags set like/dislike/share/report/download/save with correct defaults', () => {
|
|
const cfg1 = memberConfig(undefined, {
|
|
media: {
|
|
actions: { like: false, dislike: false, share: false, report: true, download: true, save: true },
|
|
},
|
|
});
|
|
expect(cfg1.can.likeMedia).toBe(false);
|
|
expect(cfg1.can.dislikeMedia).toBe(false);
|
|
expect(cfg1.can.shareMedia).toBe(false);
|
|
expect(cfg1.can.reportMedia).toBe(true);
|
|
expect(cfg1.can.downloadMedia).toBe(true);
|
|
expect(cfg1.can.saveMedia).toBe(true);
|
|
});
|
|
|
|
test('User flags canSeeMembersPage/usersNeedsToBeApproved/readComment default handling', () => {
|
|
const cfg1 = memberConfig({
|
|
is: { anonymous: false },
|
|
can: { canSeeMembersPage: false, usersNeedsToBeApproved: false, readComment: false },
|
|
});
|
|
expect(cfg1.can.canSeeMembersPage).toBe(false);
|
|
expect(cfg1.can.usersNeedsToBeApproved).toBe(false);
|
|
expect(cfg1.can.readComment).toBe(false);
|
|
});
|
|
});
|
|
});
|