mirror of
https://github.com/langgenius/dify.git
synced 2025-12-19 17:27:16 -05:00
Co-authored-by: CodingOnStar <hanxujiang@dify.ai> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>
72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
/**
|
|
* Mock for ky HTTP client
|
|
* This mock is used to avoid ESM issues in Jest tests
|
|
*/
|
|
|
|
type KyResponse = {
|
|
ok: boolean
|
|
status: number
|
|
statusText: string
|
|
headers: Headers
|
|
json: jest.Mock
|
|
text: jest.Mock
|
|
blob: jest.Mock
|
|
arrayBuffer: jest.Mock
|
|
clone: jest.Mock
|
|
}
|
|
|
|
type KyInstance = jest.Mock & {
|
|
get: jest.Mock
|
|
post: jest.Mock
|
|
put: jest.Mock
|
|
patch: jest.Mock
|
|
delete: jest.Mock
|
|
head: jest.Mock
|
|
create: jest.Mock
|
|
extend: jest.Mock
|
|
stop: symbol
|
|
}
|
|
|
|
const createResponse = (data: unknown = {}, status = 200): KyResponse => {
|
|
const response: KyResponse = {
|
|
ok: status >= 200 && status < 300,
|
|
status,
|
|
statusText: status === 200 ? 'OK' : 'Error',
|
|
headers: new Headers(),
|
|
json: jest.fn().mockResolvedValue(data),
|
|
text: jest.fn().mockResolvedValue(JSON.stringify(data)),
|
|
blob: jest.fn().mockResolvedValue(new Blob()),
|
|
arrayBuffer: jest.fn().mockResolvedValue(new ArrayBuffer(0)),
|
|
clone: jest.fn(),
|
|
}
|
|
// Ensure clone returns a new response-like object, not the same instance
|
|
response.clone.mockImplementation(() => createResponse(data, status))
|
|
return response
|
|
}
|
|
|
|
const createKyInstance = (): KyInstance => {
|
|
const instance = jest.fn().mockImplementation(() => Promise.resolve(createResponse())) as KyInstance
|
|
|
|
// HTTP methods
|
|
instance.get = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
instance.post = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
instance.put = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
instance.patch = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
instance.delete = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
instance.head = jest.fn().mockImplementation(() => Promise.resolve(createResponse()))
|
|
|
|
// Create new instance with custom options
|
|
instance.create = jest.fn().mockImplementation(() => createKyInstance())
|
|
instance.extend = jest.fn().mockImplementation(() => createKyInstance())
|
|
|
|
// Stop method for AbortController
|
|
instance.stop = Symbol('stop')
|
|
|
|
return instance
|
|
}
|
|
|
|
const ky = createKyInstance()
|
|
|
|
export default ky
|
|
export { ky }
|