|
|
@@ -2,7 +2,6 @@
|
|
|
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
|
import { act, cleanup, fireEvent, render, screen, waitFor, within } from '@testing-library/react'
|
|
|
import type { DirectoryListing } from '@deepseek-ai/dsh-client-connection/client'
|
|
|
-import { DirectoryBrowseError } from '@deepseek-ai/dsh-client-ui-workspace/client'
|
|
|
import { DirectoryBrowser } from '../src/client/DirectoryBrowser.tsx'
|
|
|
|
|
|
afterEach(cleanup)
|
|
|
@@ -81,7 +80,7 @@ function listingFor(path?: string): DirectoryListing {
|
|
|
}
|
|
|
const found = tree[target]
|
|
|
if (found === undefined) {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: `cannot list ${target}`, details: { path: target } })
|
|
|
+ throw new Error(`cannot list ${target}`)
|
|
|
}
|
|
|
return found
|
|
|
}
|
|
|
@@ -543,7 +542,7 @@ describe('DirectoryBrowser', () => {
|
|
|
it('re-parks focus on the edit zone when a failed pick unmounts a dot-revealed row', async () => {
|
|
|
const listDirectory = vi.fn(async (path?: string) => {
|
|
|
if (path === `${HOME}/.config`) {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'denied', details: { path } })
|
|
|
+ throw new Error('denied')
|
|
|
}
|
|
|
return listingFor(path)
|
|
|
})
|
|
|
@@ -564,7 +563,7 @@ describe('DirectoryBrowser', () => {
|
|
|
it('leaves focus on a surviving row when its pick fails', async () => {
|
|
|
const listDirectory = vi.fn(async (path?: string) => {
|
|
|
if (path === DOCS) {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'denied', details: { path } })
|
|
|
+ throw new Error('denied')
|
|
|
}
|
|
|
return listingFor(path)
|
|
|
})
|
|
|
@@ -587,7 +586,7 @@ describe('DirectoryBrowser', () => {
|
|
|
// The initial open lists home through the absent-path form; only the
|
|
|
// parent leg names HOME explicitly.
|
|
|
if (path === HOME) {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'parent gone', details: { path } })
|
|
|
+ throw new Error('parent gone')
|
|
|
}
|
|
|
return listingFor(path)
|
|
|
})
|
|
|
@@ -1286,7 +1285,9 @@ describe('DirectoryBrowser', () => {
|
|
|
|
|
|
it('keeps path entry available when the home listing fails', async () => {
|
|
|
const listDirectory = vi.fn(async (): Promise<DirectoryListing> => {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'home unreadable', details: { path: HOME } })
|
|
|
+ throw Object.assign(new Error('directory browse failed: directory-unreadable: home unreadable'), {
|
|
|
+ rpcError: { code: 'directory-unreadable', message: 'home unreadable', details: { path: HOME } },
|
|
|
+ })
|
|
|
})
|
|
|
mount({ listDirectory })
|
|
|
await waitFor(() => { expect(screen.getByRole('alert').textContent).toBe('home unreadable') })
|
|
|
@@ -1346,7 +1347,7 @@ describe('DirectoryBrowser', () => {
|
|
|
fireEvent.click(rowButton(screen.getByRole('listitem')))
|
|
|
await waitFor(() => { expect(columns()).toHaveLength(2) })
|
|
|
b.listDirectory.mockImplementation(async () => {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'denied', details: { path: HOME } })
|
|
|
+ throw new Error('denied')
|
|
|
})
|
|
|
fireEvent.click(within(screen.getByRole('navigation')).getByRole('button', { name: 'browser.home' }))
|
|
|
await waitFor(() => { expect(screen.getByRole('alert').textContent).toBe('denied') })
|
|
|
@@ -1453,7 +1454,7 @@ describe('DirectoryBrowser', () => {
|
|
|
const b = mount()
|
|
|
await waitFor(() => { expect(screen.getByRole('listitem')).toBeTruthy() })
|
|
|
b.listDirectory.mockImplementation(async () => {
|
|
|
- throw new DirectoryBrowseError({ code: 'directory-unreadable', message: 'denied', details: { path: DOCS } })
|
|
|
+ throw new Error('denied')
|
|
|
})
|
|
|
fireEvent.click(rowButton(screen.getByRole('listitem')))
|
|
|
await waitFor(() => { expect(screen.getByRole('alert').textContent).toBe('denied') })
|
|
|
@@ -1574,7 +1575,7 @@ describe('DirectoryBrowser', () => {
|
|
|
const b = mount()
|
|
|
await waitFor(() => { expect(screen.getByRole('listitem')).toBeTruthy() })
|
|
|
b.createDirectory.mockRejectedValueOnce(
|
|
|
- new DirectoryBrowseError({ code: 'directory-exists', message: 'taken already', details: { path: `${HOME}/x` } }))
|
|
|
+ new Error('taken already'))
|
|
|
fireEvent.click(screen.getByRole('button', { name: 'browser.newFolder' }))
|
|
|
expect(screen.getByText('browser.createIn:browser.home')).toBeTruthy()
|
|
|
const input = screen.getByLabelText('browser.folderName')
|