mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-01-20 15:22:58 -05:00
feat: frontend unit tests
This commit is contained in:
125
frontend/tests/utils/settings/optionsPages.test.ts
Normal file
125
frontend/tests/utils/settings/optionsPages.test.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user