mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 07:12:58 -05:00
feat: frontend unit tests
This commit is contained in:
162
frontend/tests/utils/settings/member.test.ts
Normal file
162
frontend/tests/utils/settings/member.test.ts
Normal file
@@ -0,0 +1,162 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user