96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Mock OpenAI constructor (must be hoisted for Vitest)
|
|
// ---------------------------------------------------------------------------
|
|
const OpenAIMock = vi.hoisted(() => vi.fn())
|
|
|
|
vi.mock('openai', () => ({
|
|
default: OpenAIMock,
|
|
}))
|
|
|
|
import { MiniMaxAdapter } from '../src/llm/minimax.js'
|
|
import { createAdapter } from '../src/llm/adapter.js'
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// MiniMaxAdapter tests
|
|
// ---------------------------------------------------------------------------
|
|
|
|
describe('MiniMaxAdapter', () => {
|
|
beforeEach(() => {
|
|
OpenAIMock.mockClear()
|
|
})
|
|
|
|
it('has name "minimax"', () => {
|
|
const adapter = new MiniMaxAdapter()
|
|
expect(adapter.name).toBe('minimax')
|
|
})
|
|
|
|
it('uses MINIMAX_API_KEY by default', () => {
|
|
const original = process.env['MINIMAX_API_KEY']
|
|
process.env['MINIMAX_API_KEY'] = 'minimax-test-key-123'
|
|
|
|
try {
|
|
new MiniMaxAdapter()
|
|
expect(OpenAIMock).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
apiKey: 'minimax-test-key-123',
|
|
baseURL: 'https://api.minimax.io/v1',
|
|
})
|
|
)
|
|
} finally {
|
|
if (original === undefined) {
|
|
delete process.env['MINIMAX_API_KEY']
|
|
} else {
|
|
process.env['MINIMAX_API_KEY'] = original
|
|
}
|
|
}
|
|
})
|
|
|
|
it('uses official MiniMax global baseURL by default', () => {
|
|
new MiniMaxAdapter('some-key')
|
|
expect(OpenAIMock).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
apiKey: 'some-key',
|
|
baseURL: 'https://api.minimax.io/v1',
|
|
})
|
|
)
|
|
})
|
|
|
|
it('uses MINIMAX_BASE_URL env var when set', () => {
|
|
const original = process.env['MINIMAX_BASE_URL']
|
|
process.env['MINIMAX_BASE_URL'] = 'https://api.minimaxi.com/v1'
|
|
|
|
try {
|
|
new MiniMaxAdapter('some-key')
|
|
expect(OpenAIMock).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
apiKey: 'some-key',
|
|
baseURL: 'https://api.minimaxi.com/v1',
|
|
})
|
|
)
|
|
} finally {
|
|
if (original === undefined) {
|
|
delete process.env['MINIMAX_BASE_URL']
|
|
} else {
|
|
process.env['MINIMAX_BASE_URL'] = original
|
|
}
|
|
}
|
|
})
|
|
|
|
it('allows overriding apiKey and baseURL', () => {
|
|
new MiniMaxAdapter('custom-key', 'https://custom.endpoint/v1')
|
|
expect(OpenAIMock).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
apiKey: 'custom-key',
|
|
baseURL: 'https://custom.endpoint/v1',
|
|
})
|
|
)
|
|
})
|
|
|
|
it('createAdapter("minimax") returns MiniMaxAdapter instance', async () => {
|
|
const adapter = await createAdapter('minimax')
|
|
expect(adapter).toBeInstanceOf(MiniMaxAdapter)
|
|
})
|
|
})
|