// @vitest-environment jsdom import { flushSync, mount, unmount } from 'svelte' import { afterEach, describe, expect, it, vi } from 'vitest' const state = vi.hoisted(() => ({ openSpace: vi.fn(async () => undefined), privateMeta: vi.fn<(uri: string) => Promise<{ spaceUri: string } | undefined>>(async () => undefined), owned: { status: 'ready', did: 'did:plc:me', spaces: [ { uri: 'at://did:plc:founder/com.disnetdev.radial.space/private', name: '', description: '', createdAt: '', kind: 'joined', private: true }, ], error: '', }, })) vi.mock('$app/navigation', () => ({ goto: vi.fn() })) vi.mock('$lib/auth.svelte.js', () => ({ account: { status: 'signed-in', did: 'did:plc:me', handle: 'me.test' }, rememberedIdentities: [], signIn: vi.fn(), signOut: vi.fn(), })) vi.mock('$lib/directory.js', () => ({ unknownActor: () => ({ name: 'Me' }) })) vi.mock('$lib/owned.svelte.js', () => ({ owned: state.owned, discoverOwned: vi.fn(), forgetOwned: vi.fn() })) vi.mock('$lib/session.svelte.js', () => ({ session: { status: 'ready', error: '', recents: [] }, openSpace: state.openSpace, forget: vi.fn(), leave: vi.fn(), openFixture: vi.fn(), })) vi.mock('$lib/private-space.js', () => ({ privateReplicaMeta: state.privateMeta })) vi.mock('$lib/space-navigation.js', () => ({ selectSpace: async (uri: string, open: (uri: string) => Promise) => { await open(uri); return true }, })) import SpacePicker from './SpacePicker.svelte' let target: HTMLElement | undefined let component: Record | undefined const privateUri = 'at://did:plc:founder/com.disnetdev.radial.space/private' function render(): HTMLButtonElement { target = document.createElement('div') document.body.appendChild(target) component = mount(SpacePicker, { target }) as Record flushSync() return [...target.querySelectorAll('button')].find((button) => button.textContent?.includes('A private space')) as HTMLButtonElement } afterEach(() => { if (component) unmount(component as never) target?.remove() component = undefined target = undefined state.openSpace.mockReset() state.privateMeta.mockReset() state.owned.spaces = [{ uri: privateUri, name: '', description: '', createdAt: '', kind: 'joined', private: true }] }) describe('private bookmarks in the space picker', () => { it('opens an existing private replica normally', async () => { state.privateMeta.mockResolvedValue({ spaceUri: privateUri }) render().click() await vi.waitFor(() => expect(state.openSpace).toHaveBeenCalledWith(privateUri)) }) it('asks for a fresh transfer ticket when the bookmark has no local replica', async () => { state.privateMeta.mockResolvedValue(undefined) render().click() await vi.waitFor(() => expect(target?.querySelector('#private-ticket')).toBeTruthy()) expect(state.openSpace).not.toHaveBeenCalled() }) })