diff --git a/web/src/lib/sessionTitle.test.ts b/web/src/lib/sessionTitle.test.ts new file mode 100644 index 00000000..6316369d --- /dev/null +++ b/web/src/lib/sessionTitle.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from 'vitest' +import { getSessionTitle } from './sessionTitle' + +describe('getSessionTitle', () => { + it('prefers metadata.name over summary.text (sidebar / share picker parity)', () => { + expect(getSessionTitle({ + id: 'abcdef0123456789', + metadata: { + name: 'hub runner version governance', + summary: { text: 'HAPI Skill Lookup' }, + path: '/tmp/share-title-parity', + }, + })).toBe('hub runner version governance') + }) + + it('falls back to summary when name is absent', () => { + expect(getSessionTitle({ + id: 'abcdef0123456789', + metadata: { + summary: { text: 'HAPI Skill Lookup' }, + path: '/tmp/share-title-parity', + }, + })).toBe('HAPI Skill Lookup') + }) + + it('falls back to the last path segment when name and summary are absent', () => { + expect(getSessionTitle({ + id: 'abcdef0123456789', + metadata: { + path: '/tmp/share-title-parity', + }, + })).toBe('share-title-parity') + }) + + it('falls back to a short id when metadata is empty', () => { + expect(getSessionTitle({ id: 'abcdef0123456789' })).toBe('abcdef01') + }) +}) diff --git a/web/src/routes/share/index.tsx b/web/src/routes/share/index.tsx index 4dd859a0..741ac082 100644 --- a/web/src/routes/share/index.tsx +++ b/web/src/routes/share/index.tsx @@ -10,6 +10,7 @@ import { type ShareTransferPayload, } from '@/lib/shareTransfer' import { setSharePendingTransfer } from '@/lib/sharePendingState' +import { getSessionTitle } from '@/lib/sessionTitle' import type { SessionSummary } from '@/types/api' type LoadState = @@ -29,13 +30,6 @@ function formatBytes(n: number): string { return `${(n / (1024 * 1024)).toFixed(1)} MB` } -function getSessionTitle(session: SessionSummary): string { - return session.metadata?.summary?.text - ?? session.metadata?.name - ?? session.metadata?.path - ?? session.id.slice(0, 8) -} - function SharePreview(props: { payload: ShareTransferPayload }) { const { payload } = props const { t } = useTranslation()