diff --git a/frontend/src/routes/documents/[id]/page.svelte.test.ts b/frontend/src/routes/documents/[id]/page.svelte.test.ts
index 32755692..766be59a 100644
--- a/frontend/src/routes/documents/[id]/page.svelte.test.ts
+++ b/frontend/src/routes/documents/[id]/page.svelte.test.ts
@@ -91,4 +91,81 @@ describe('documents/[id] page', () => {
const stored = localStorage.getItem('familienarchiv.lastVisited');
expect(stored).toContain('d1');
});
+
+ it('uses doc.title as the document title when set', async () => {
+ mockPage.url = new URL('http://localhost/documents/d1');
+ render(DocumentDetailPage, { props: { data: baseData() } });
+
+ // The browser
reflects doc.title when set
+ await new Promise((r) => setTimeout(r, 30));
+ expect(document.title).toContain('Brief an Helene');
+ });
+
+ it('falls back to originalFilename when title is empty', async () => {
+ mockPage.url = new URL('http://localhost/documents/d2');
+ render(DocumentDetailPage, {
+ props: {
+ data: baseData({
+ document: { ...baseDoc, id: 'd2', title: '', originalFilename: 'fallback.pdf' }
+ })
+ }
+ });
+
+ await new Promise((r) => setTimeout(r, 30));
+ expect(document.title).toContain('fallback.pdf');
+ });
+
+ it('falls back to "Dokument" when title and originalFilename are empty', async () => {
+ mockPage.url = new URL('http://localhost/documents/d3');
+ render(DocumentDetailPage, {
+ props: {
+ data: baseData({
+ document: { ...baseDoc, id: 'd3', title: '', originalFilename: '' }
+ })
+ }
+ });
+
+ await new Promise((r) => setTimeout(r, 30));
+ expect(document.title).toContain('Dokument');
+ });
+
+ it('renders without throwing when canWrite is true', async () => {
+ mockPage.url = new URL('http://localhost/documents/d4');
+ expect(() =>
+ render(DocumentDetailPage, { props: { data: baseData({ canWrite: true }) } })
+ ).not.toThrow();
+ });
+
+ it('renders without throwing when geschichten and inferredRelationship are set', async () => {
+ mockPage.url = new URL('http://localhost/documents/d5');
+ expect(() =>
+ render(DocumentDetailPage, {
+ props: {
+ data: baseData({
+ geschichten: [{ id: 'g1', title: 'Story', publishedAt: null }],
+ inferredRelationship: { label: 'PARENT_OF', from: 'p1', to: 'p2' },
+ canBlogWrite: true
+ })
+ }
+ })
+ ).not.toThrow();
+ });
+
+ it('renders without throwing when doc.id is empty', async () => {
+ mockPage.url = new URL('http://localhost/documents/d-empty');
+ expect(() =>
+ render(DocumentDetailPage, {
+ props: { data: baseData({ document: { ...baseDoc, id: '', title: 'No ID' } }) }
+ })
+ ).not.toThrow();
+ });
+
+ it('renders with task=transcribe in the URL without throwing', async () => {
+ mockPage.url = new URL('http://localhost/documents/d6?task=transcribe');
+ expect(() =>
+ render(DocumentDetailPage, {
+ props: { data: baseData({ document: { ...baseDoc, id: 'd6' } }) }
+ })
+ ).not.toThrow();
+ });
});