mirror of
https://github.com/wu736139669/hapi.git
synced 2026-11-01 23:41:40 +00:00
fix(web): show file metadata in preview header (#1450)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
||||
import { mkdir, rm, stat, writeFile } from 'fs/promises'
|
||||
import { join } from 'path'
|
||||
import { tmpdir } from 'os'
|
||||
import { RpcHandlerManager } from '../../../api/rpc/RpcHandlerManager'
|
||||
import { registerFileHandlers } from './files'
|
||||
|
||||
async function createTempDir(prefix: string): Promise<string> {
|
||||
const path = join(tmpdir(), `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}`)
|
||||
await mkdir(path, { recursive: true })
|
||||
return path
|
||||
}
|
||||
|
||||
describe('file RPC handlers', () => {
|
||||
let rootDir: string
|
||||
let rpc: RpcHandlerManager
|
||||
|
||||
beforeEach(async () => {
|
||||
rootDir = await createTempDir('hapi-file-handler')
|
||||
rpc = new RpcHandlerManager({ scopePrefix: 'session-test' })
|
||||
registerFileHandlers(rpc, rootDir)
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
await rm(rootDir, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
it('returns file metadata alongside content', async () => {
|
||||
const filePath = join(rootDir, 'README.md')
|
||||
await writeFile(filePath, '# test')
|
||||
const expectedStats = await stat(filePath)
|
||||
|
||||
const response = await rpc.handleRequest({
|
||||
method: 'session-test:readFile',
|
||||
params: JSON.stringify({ path: 'README.md' })
|
||||
})
|
||||
const parsed = JSON.parse(response) as {
|
||||
success: boolean
|
||||
content?: string
|
||||
size?: number
|
||||
modified?: number
|
||||
}
|
||||
|
||||
expect(parsed.success).toBe(true)
|
||||
expect(parsed.content).toBe(Buffer.from('# test').toString('base64'))
|
||||
expect(parsed.size).toBe(expectedStats.size)
|
||||
expect(parsed.modified).toBe(expectedStats.mtime.getTime())
|
||||
})
|
||||
})
|
||||
@@ -44,9 +44,15 @@ export function registerFileHandlers(rpcHandlerManager: RpcHandlerManager, worki
|
||||
|
||||
try {
|
||||
const resolvedPath = resolve(workingDirectory, data.path)
|
||||
const stats = await stat(resolvedPath)
|
||||
const buffer = await readFile(resolvedPath)
|
||||
const content = buffer.toString('base64')
|
||||
return { success: true, content }
|
||||
return {
|
||||
success: true,
|
||||
content,
|
||||
size: stats.size,
|
||||
modified: stats.mtime.getTime()
|
||||
}
|
||||
} catch (error) {
|
||||
logger.debug('Failed to read file:', error)
|
||||
return rpcError(getErrorMessage(error, 'Failed to read file'))
|
||||
|
||||
Reference in New Issue
Block a user