Files
dify/cli/src/api/meta.test.ts
2026-06-01 09:04:42 +00:00

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()
})
})