feat: categories have settings for filtering and titles

This commit is contained in:
2026-02-20 21:10:15 +01:00
parent eeffa247bb
commit 63c4b148e1
15 changed files with 661 additions and 53 deletions

View File

@@ -43,7 +43,16 @@ describe('SettingsView Diff Preferences', () => {
meta: {
...(window as any).electronAPI?.meta,
getCategories: vi.fn().mockResolvedValue(['article', 'picture', 'aside', 'page']),
getProjectMetadata: vi.fn().mockResolvedValue({ maxPostsPerPage: 75, publicUrl: 'https://example.com' }),
getProjectMetadata: vi.fn().mockResolvedValue({
maxPostsPerPage: 75,
publicUrl: 'https://example.com',
categorySettings: {
article: { renderInLists: true, showTitle: true },
picture: { renderInLists: true, showTitle: true },
aside: { renderInLists: true, showTitle: false },
page: { renderInLists: false, showTitle: true },
},
}),
updateProjectMetadata: vi.fn().mockResolvedValue({ maxPostsPerPage: 12, publicUrl: 'https://example.com' }),
},
chat: {
@@ -107,4 +116,35 @@ describe('SettingsView Diff Preferences', () => {
expect.objectContaining({ publicUrl: 'https://example.com' })
);
});
it('renders category settings checkboxes with required defaults', async () => {
render(<SettingsView />);
const asideShowTitle = await screen.findByLabelText(/aside show titles/i);
const asideRenderInLists = screen.getByLabelText(/aside render in lists/i);
const pageRenderInLists = screen.getByLabelText(/page render in lists/i);
const articleShowTitle = screen.getByLabelText(/article show titles/i);
expect((asideShowTitle as HTMLInputElement).checked).toBe(false);
expect((asideRenderInLists as HTMLInputElement).checked).toBe(true);
expect((pageRenderInLists as HTMLInputElement).checked).toBe(false);
expect((articleShowTitle as HTMLInputElement).checked).toBe(true);
});
it('persists category settings changes via project metadata update', async () => {
render(<SettingsView />);
const pageRenderInLists = await screen.findByLabelText(/page render in lists/i);
fireEvent.click(pageRenderInLists);
await new Promise((resolve) => setTimeout(resolve, 0));
expect((window as any).electronAPI.meta.updateProjectMetadata).toHaveBeenCalledWith(
expect.objectContaining({
categorySettings: expect.objectContaining({
page: expect.objectContaining({ renderInLists: true, showTitle: true }),
}),
})
);
});
});