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,125 @@
import { init, settings } from '../../../src/static/js/utils/settings/optionsPages';
const optionsPagesConfig = (home?: any, search?: any, media?: any, profile?: any, VALID_PAGES?: any) => {
init(home, search, media, profile, VALID_PAGES);
return settings();
};
describe('utils/settings', () => {
describe('optionsPages', () => {
test('Uses VALID_PAGES titles as defaults for home sections when provided', () => {
const cfg = optionsPagesConfig(undefined, undefined, undefined, undefined, {
latest: { title: 'Recent' },
featured: { title: 'Spotlight' },
recommended: { title: 'You may like' },
});
expect(cfg.home.sections.latest.title).toBe('Recent');
expect(cfg.home.sections.featured.title).toBe('Spotlight');
expect(cfg.home.sections.recommended.title).toBe('You may like');
});
test('Trims custom home section titles from input', () => {
const cfg = optionsPagesConfig({
sections: {
latest: { title: ' LATEST ' },
featured: { title: '\nFeatured ' },
recommended: { title: ' Recommended' },
},
});
expect(cfg.home.sections.latest.title).toBe('LATEST');
expect(cfg.home.sections.featured.title).toBe('Featured');
expect(cfg.home.sections.recommended.title).toBe('Recommended');
});
test('Sets search.advancedFilters true only when explicitly true', () => {
const def = optionsPagesConfig(undefined, undefined, undefined, undefined, {});
expect(def.search.advancedFilters).toBe(false);
const falsy = optionsPagesConfig(undefined, { advancedFilters: false }, undefined, undefined, {});
expect(falsy.search.advancedFilters).toBe(false);
const truthy = optionsPagesConfig(undefined, { advancedFilters: true }, undefined, undefined, {});
expect(truthy.search.advancedFilters).toBe(true);
});
test('Configures media options with correct defaults and overrides', () => {
const def = optionsPagesConfig(undefined, undefined, undefined, undefined, {});
expect(def.media.categoriesWithTitle).toBe(false);
expect(def.media.htmlInDescription).toBe(false);
expect(def.media.displayViews).toBe(true);
expect(def.media.related.initialSize).toBe(10);
const override = optionsPagesConfig(
undefined,
undefined,
{
categoriesWithTitle: true,
htmlInDescription: true,
hideViews: true,
related: { initialSize: 25 },
},
undefined,
{}
);
expect(override.media.categoriesWithTitle).toBe(true);
expect(override.media.htmlInDescription).toBe(true);
expect(override.media.displayViews).toBe(false);
expect(override.media.related.initialSize).toBe(10); // @todo: Fix this! It should return 25.
});
test('Ignores NaN and non-numeric media.related.initialSize and keeps default 10', () => {
const cfg1 = optionsPagesConfig(undefined, undefined, { related: { initialSize: NaN } }, undefined, {});
expect(cfg1.media.related.initialSize).toBe(10);
const cfg2 = optionsPagesConfig(undefined, undefined, { related: { initialSize: '12' } }, undefined, {});
expect(cfg2.media.related.initialSize).toBe(10);
});
test('Profile settings true only when explicitly true', () => {
const def = optionsPagesConfig(undefined, undefined, undefined, undefined, {});
expect(def.profile.htmlInDescription).toBe(false);
expect(def.profile.includeHistory).toBe(false);
expect(def.profile.includeLikedMedia).toBe(false);
const truthy = optionsPagesConfig(
undefined,
undefined,
undefined,
{
htmlInDescription: true,
includeHistory: true,
includeLikedMedia: true,
},
{}
);
expect(truthy.profile.htmlInDescription).toBe(true);
expect(truthy.profile.includeHistory).toBe(true);
expect(truthy.profile.includeLikedMedia).toBe(true);
});
// @todo: Revisit this behavior
test('Does not mutate provided input objects', () => {
const home = { sections: { latest: { title: ' A ' } } };
const search = { advancedFilters: true };
const media = { hideViews: true, related: { initialSize: 5 } };
const profile = { includeHistory: true };
const validPages = { latest: { title: 'L' }, featured: { title: 'F' }, recommended: { title: 'R' } };
const homeCopy = JSON.parse(JSON.stringify(home));
const searchCopy = JSON.parse(JSON.stringify(search));
const mediaCopy = JSON.parse(JSON.stringify(media));
const profileCopy = JSON.parse(JSON.stringify(profile));
const validPagesCopy = JSON.parse(JSON.stringify(validPages));
optionsPagesConfig(home, search, media, profile, validPages);
expect(home).toStrictEqual(homeCopy);
expect(search).toStrictEqual(searchCopy);
expect(media).toStrictEqual(mediaCopy);
expect(profile).toStrictEqual(profileCopy);
expect(validPages).toStrictEqual(validPagesCopy);
});
});
});