feat: frontend unit tests

This commit is contained in:
Yiannis Stergiou
2026-01-07 19:47:54 +02:00
committed by GitHub
parent ed5cfa1a84
commit 1c15880ae3
74 changed files with 6000 additions and 877 deletions

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