mirror of
https://gh-proxy.org/https://github.com/klinsmaya/workdsh.git
synced 2026-11-10 18:36:56 +08:00
test(market): cover market state route
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'
|
||||
import type { AddressInfo } from 'node:net'
|
||||
import type { Context } from '@deepseek-ai/cordis'
|
||||
import type { SettingsScope } from '@deepseek-ai/dsh-settings'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
DSH_1024STORE_ADAPTER_ID,
|
||||
DSH_1024STORE_ENDPOINT,
|
||||
DSH_1024STORE_KEY,
|
||||
DSH_1024STORE_PROVIDER_ID,
|
||||
} from '../src/adapters/dsh-1024store.js'
|
||||
import type { MarketSettingsDocument } from '../src/catalog/source-store.js'
|
||||
import type { LocalSourceRecord } from '../src/contracts/index.js'
|
||||
import { marketRoutes, registerMarketRoutes } from '../src/host/routes.js'
|
||||
|
||||
type RouteHandler = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>
|
||||
|
||||
interface MarketServer {
|
||||
readonly baseUrl: string
|
||||
readonly close: () => Promise<void>
|
||||
}
|
||||
|
||||
const builtInSource = (overrides: Partial<LocalSourceRecord> = {}): LocalSourceRecord => ({
|
||||
sourceRecordId: '018f1f77-a5c4-7b73-a9ae-0242ac120002',
|
||||
registrationKind: 'built-in',
|
||||
adapterId: DSH_1024STORE_ADAPTER_ID,
|
||||
providerId: DSH_1024STORE_PROVIDER_ID,
|
||||
builtInProviderKey: DSH_1024STORE_KEY,
|
||||
enabled: false,
|
||||
order: 0,
|
||||
...overrides,
|
||||
})
|
||||
|
||||
async function startMarketServer(initialSources: readonly LocalSourceRecord[]): Promise<MarketServer> {
|
||||
const routes = new Map<string, RouteHandler>()
|
||||
let document: MarketSettingsDocument = { sources: initialSources }
|
||||
const scope = {
|
||||
get: () => document,
|
||||
update: async (patch: object) => {
|
||||
document = { ...document, ...patch as Partial<MarketSettingsDocument> }
|
||||
},
|
||||
} as unknown as SettingsScope<MarketSettingsDocument>
|
||||
const ctx = {
|
||||
webServer: {
|
||||
register: (route: { readonly path: string; readonly handler: RouteHandler }) => {
|
||||
routes.set(route.path, route.handler)
|
||||
return () => { routes.delete(route.path) }
|
||||
},
|
||||
},
|
||||
} as unknown as Context
|
||||
const disposeRoutes = registerMarketRoutes(ctx, scope)
|
||||
const server = createServer((req, res) => {
|
||||
const pathname = new URL(req.url ?? '/', 'http://localhost').pathname
|
||||
const handler = routes.get(pathname)
|
||||
if (handler === undefined) {
|
||||
res.statusCode = 404
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
void Promise.resolve(handler(req, res)).catch((cause: unknown) => {
|
||||
res.statusCode = 500
|
||||
res.end(cause instanceof Error ? cause.message : String(cause))
|
||||
})
|
||||
})
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
server.once('error', reject)
|
||||
server.listen(0, '127.0.0.1', resolve)
|
||||
})
|
||||
const { port } = server.address() as AddressInfo
|
||||
return {
|
||||
baseUrl: `http://127.0.0.1:${String(port)}`,
|
||||
close: async () => {
|
||||
disposeRoutes()
|
||||
await closeServer(server)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
async function closeServer(server: Server): Promise<void> {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
server.close(error => { if (error === undefined) resolve(); else reject(error) })
|
||||
})
|
||||
}
|
||||
|
||||
describe('community market Host routes', () => {
|
||||
it('returns settings-backed source state with built-in provider metadata', async () => {
|
||||
const server = await startMarketServer([builtInSource()])
|
||||
try {
|
||||
const response = await fetch(`${server.baseUrl}${marketRoutes.state}`)
|
||||
|
||||
expect(response.status).toBe(200)
|
||||
expect(response.headers.get('cache-control')).toBe('no-store')
|
||||
expect(response.headers.get('x-content-type-options')).toBe('nosniff')
|
||||
await expect(response.json()).resolves.toMatchObject({
|
||||
sources: [{
|
||||
sourceRecordId: builtInSource().sourceRecordId,
|
||||
name: 'DSH 1024Store',
|
||||
endpoint: DSH_1024STORE_ENDPOINT,
|
||||
partnership: true,
|
||||
enabled: false,
|
||||
}],
|
||||
builtIns: [{
|
||||
key: DSH_1024STORE_KEY,
|
||||
providerId: DSH_1024STORE_PROVIDER_ID,
|
||||
partnership: true,
|
||||
}],
|
||||
})
|
||||
} finally {
|
||||
await server.close()
|
||||
}
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user