Feature/ai post suggestions (#40)

* feat: first cut on ai suggestion system for title and summary

* feat: completion of titling/excerpt/slug-suggestion AI quick action

* feat: feeds use existing excerpts. also documentation.

---------

Co-authored-by: hugo <hugoms@me.com>
This commit is contained in:
Georg Bauer
2026-03-07 09:54:13 +01:00
committed by GitHub
parent 72b21ddba7
commit 9871cb827f
30 changed files with 1270 additions and 245 deletions

View File

@@ -229,4 +229,37 @@ describe('Editor metadata collapse', () => {
});
expect(container.querySelector('.editor-header-row')).toBeNull();
});
it('keeps excerpt panel collapsed by default and toggles it independently', async () => {
(window as any).electronAPI.posts.get = vi.fn().mockResolvedValue(createPost({ title: '' }));
const { container } = render(<PostEditor postId="post-1" />);
await act(async () => {
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
});
expect(container.querySelector('.editor-header-row')).not.toBeNull();
expect(container.querySelector('.editor-excerpt-panel')).toBeNull();
const excerptToggle = Array.from(container.querySelectorAll('.metadata-toggle')).find((node) =>
node.textContent?.includes('Excerpt')
);
expect(excerptToggle).not.toBeNull();
expect(excerptToggle?.classList.contains('expanded')).toBe(false);
await act(async () => {
fireEvent.click(excerptToggle!);
});
expect(container.querySelector('.editor-excerpt-panel')).not.toBeNull();
await act(async () => {
fireEvent.click(excerptToggle!);
});
expect(container.querySelector('.editor-excerpt-panel')).toBeNull();
});
});