UNPKG

@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.

81 lines (63 loc) 2.52 kB
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { AgentRuntimeError } from '@/libs/model-runtime'; import { ChatErrorType } from '@/types/fetch'; import { createErrorResponse } from '@/utils/errorResponse'; import { getJWTPayload } from '@/utils/server/jwt'; import { RequestHandler, checkAuth } from './index'; import { checkAuthMethod } from './utils'; vi.mock('@clerk/nextjs/server', () => ({ getAuth: vi.fn(), })); vi.mock('@/utils/errorResponse', () => ({ createErrorResponse: vi.fn(), })); vi.mock('./utils', () => ({ checkAuthMethod: vi.fn(), })); vi.mock('@/utils/server/jwt', () => ({ getJWTPayload: vi.fn(), })); describe('checkAuth', () => { const mockHandler: RequestHandler = vi.fn(); const mockRequest = new Request('https://example.com'); const mockOptions = { params: Promise.resolve({ provider: 'mock' }) }; beforeEach(() => { vi.clearAllMocks(); }); afterEach(() => { vi.resetAllMocks(); }); it('should return unauthorized error if no authorization header', async () => { await checkAuth(mockHandler)(mockRequest, mockOptions); expect(createErrorResponse).toHaveBeenCalledWith(ChatErrorType.Unauthorized, { error: AgentRuntimeError.createError(ChatErrorType.Unauthorized), provider: 'mock', }); expect(mockHandler).not.toHaveBeenCalled(); }); it('should return error response on getJWTPayload error', async () => { const mockError = AgentRuntimeError.createError(ChatErrorType.Unauthorized); mockRequest.headers.set('Authorization', 'invalid'); vi.mocked(getJWTPayload).mockRejectedValueOnce(mockError); await checkAuth(mockHandler)(mockRequest, mockOptions); expect(createErrorResponse).toHaveBeenCalledWith(ChatErrorType.Unauthorized, { error: mockError, provider: 'mock', }); expect(mockHandler).not.toHaveBeenCalled(); }); it('should return error response on checkAuthMethod error', async () => { const mockError = AgentRuntimeError.createError(ChatErrorType.Unauthorized); mockRequest.headers.set('Authorization', 'valid'); vi.mocked(getJWTPayload).mockResolvedValueOnce({}); vi.mocked(checkAuthMethod).mockImplementationOnce(() => { throw mockError; }); await checkAuth(mockHandler)(mockRequest, mockOptions); expect(createErrorResponse).toHaveBeenCalledWith(ChatErrorType.Unauthorized, { error: mockError, provider: 'mock', }); expect(mockHandler).not.toHaveBeenCalled(); }); });