50 lines
1.7 KiB
TypeScript
50 lines
1.7 KiB
TypeScript
import type { DifyMock } from '@test/fixtures/dify-mock/server'
|
|
import { startMock } from '@test/fixtures/dify-mock/server'
|
|
import { testHttpClient } from '@test/fixtures/http-client'
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
import { MetaClient } from './meta.js'
|
|
|
|
describe('MetaClient', () => {
|
|
let mock: DifyMock
|
|
|
|
beforeEach(async () => {
|
|
mock = await startMock()
|
|
})
|
|
afterEach(async () => {
|
|
await mock.stop()
|
|
})
|
|
|
|
it('fetches /openapi/v1/_version without a bearer token', async () => {
|
|
const client = new MetaClient(testHttpClient(mock.url))
|
|
const info = await client.serverVersion()
|
|
|
|
expect(info.version).toBe('1.6.4')
|
|
expect(info.edition).toBe('CLOUD')
|
|
})
|
|
|
|
it('honors the auth-expired scenario by allowing the unauthed endpoint anyway', async () => {
|
|
mock.setScenario('auth-expired')
|
|
const client = new MetaClient(testHttpClient(mock.url))
|
|
const info = await client.serverVersion()
|
|
|
|
// The meta endpoint is exempt from auth middleware, so an auth-expired
|
|
// session does not stop the version probe.
|
|
expect(info.version).toBe('1.6.4')
|
|
})
|
|
|
|
it('returns an empty version string when the server scenario forces it', async () => {
|
|
mock.setScenario('server-version-empty')
|
|
const client = new MetaClient(testHttpClient(mock.url))
|
|
const info = await client.serverVersion()
|
|
|
|
expect(info.version).toBe('')
|
|
expect(info.edition).toBe('SELF_HOSTED')
|
|
})
|
|
|
|
it('throws when the host has no Dify on it', async () => {
|
|
// Closed port — connection refused.
|
|
const client = new MetaClient(testHttpClient('http://127.0.0.1:1'))
|
|
await expect(client.serverVersion()).rejects.toBeDefined()
|
|
})
|
|
})
|