@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
137 lines (116 loc) • 5.16 kB
text/typescript
import { describe, expect, it, vi } from 'vitest';
import { AgentRuntimeErrorType } from '@/libs/model-runtime';
import { ChatErrorType } from '@/types/fetch';
import { createErrorResponse } from './errorResponse';
describe('createErrorResponse', () => {
// 测试各种错误类型的状态码
it('returns a 401 status for NoOpenAIAPIKey error type', () => {
const errorType = ChatErrorType.NoOpenAIAPIKey;
const response = createErrorResponse(errorType);
expect(response.status).toBe(401);
});
it('returns a 401 status for InvalidAccessCode error type', () => {
const errorType = ChatErrorType.InvalidAccessCode;
const response = createErrorResponse(errorType as any);
expect(response.status).toBe(401);
});
// 测试包含Invalid的错误类型
it('returns a 401 status for Invalid error type', () => {
const errorType = 'InvalidTestError';
const response = createErrorResponse(errorType as any);
expect(response.status).toBe(401);
});
it('returns a 403 status for LocationNotSupportError error type', () => {
const errorType = AgentRuntimeErrorType.LocationNotSupportError;
const response = createErrorResponse(errorType);
expect(response.status).toBe(403);
});
it('returns a 404 status for ModelNotFound error type', () => {
const errorType = AgentRuntimeErrorType.ModelNotFound;
const response = createErrorResponse(errorType);
expect(response.status).toBe(404);
});
it('returns a 429 status for InsufficientQuota error type', () => {
const errorType = AgentRuntimeErrorType.InsufficientQuota;
const response = createErrorResponse(errorType);
expect(response.status).toBe(429);
});
it('returns a 429 status for QuotaLimitReached error type', () => {
const errorType = AgentRuntimeErrorType.QuotaLimitReached;
const response = createErrorResponse(errorType);
expect(response.status).toBe(429);
});
it('returns a 400 status for ExceededContextWindow error type', () => {
const errorType = AgentRuntimeErrorType.ExceededContextWindow;
const response = createErrorResponse(errorType);
expect(response.status).toBe(400);
});
it('returns a 400 status for SystemTimeNotMatchError error type', () => {
const errorType = ChatErrorType.SystemTimeNotMatchError;
const response = createErrorResponse(errorType);
expect(response.status).toBe(400);
});
it('returns a 400 status for SubscriptionKeyMismatch error type', () => {
const errorType = ChatErrorType.SubscriptionKeyMismatch;
const response = createErrorResponse(errorType);
expect(response.status).toBe(400);
});
describe('Provider Biz Error', () => {
it('returns a 471 status for ProviderBizError error type', () => {
const errorType = AgentRuntimeErrorType.ProviderBizError;
const response = createErrorResponse(errorType);
expect(response.status).toBe(471);
});
it('returns a 470 status for AgentRuntimeError error type', () => {
const errorType = AgentRuntimeErrorType.AgentRuntimeError;
const response = createErrorResponse(errorType);
expect(response.status).toBe(470);
});
it('returns a 472 status for OllamaBizError error type', () => {
const errorType = AgentRuntimeErrorType.OllamaBizError;
const response = createErrorResponse(errorType);
expect(response.status).toBe(472);
});
it('returns a 472 status for OllamaServiceUnavailable error type', () => {
const errorType = ChatErrorType.OllamaServiceUnavailable;
const response = createErrorResponse(errorType);
expect(response.status).toBe(472);
});
});
// 测试状态码不在200-599范围内的情况
it('logs an error when the status code is not a number or not in the range of 200-599', () => {
const errorType = 'Unknown Error';
const consoleSpy = vi.spyOn(console, 'error');
try {
createErrorResponse(errorType as any);
} catch (e) {}
expect(consoleSpy).toHaveBeenCalled();
consoleSpy.mockRestore();
});
// 测试默认情况
it('returns the same error type as status for unknown error types', () => {
const errorType = 500; // 假设500是一个未知的错误类型
const response = createErrorResponse(errorType as any);
expect(response.status).toBe(errorType);
});
// 测试返回的Response对象是否包含正确的body和errorType
it('returns a Response object with the correct body and errorType', () => {
const errorType = ChatErrorType.NoOpenAIAPIKey;
const body = { message: 'No API key provided' };
const response = createErrorResponse(errorType, body);
return response.json().then((data) => {
expect(data).toEqual({
body,
errorType,
});
});
});
// 测试没有提供body时,返回的Response对象的body是否为undefined
it('returns a Response object with an undefined body when no body is provided', () => {
const errorType = ChatErrorType.NoOpenAIAPIKey;
const response = createErrorResponse(errorType);
return response.json().then((data) => {
expect(data.body).toBeUndefined();
});
});
});