import React from 'react'; import { SystemRoles } from 'librechat-data-provider'; import { render, screen } from '@testing-library/react'; import type { UseMutationResult } from '@tanstack/react-query'; import '@testing-library/jest-dom/extend-expect'; import type { Agent, AgentCreateParams, TUser } from 'librechat-data-provider'; import AgentFooter from '../AgentFooter'; import { Panel } from '~/common'; const mockUseWatch = jest.fn(); const mockUseAuthContext = jest.fn(); const mockUseHasAccess = jest.fn(); const mockUseResourcePermissions = jest.fn(); jest.mock('react-hook-form', () => ({ useFormContext: () => ({ control: {}, }), useWatch: (params) => mockUseWatch(params), })); // Default mock implementations mockUseWatch.mockImplementation(({ name }) => { if (name === 'agent') { return { _id: 'agent-db-123', name: 'Test Agent', author: 'user-123', projectIds: ['project-1'], isCollaborative: false, }; } if (name === 'id') { return 'agent-123'; } return undefined; }); const mockUser = { id: 'user-123', username: 'testuser', email: 'test@example.com', name: 'Test User', avatar: '', role: 'USER', provider: 'local', emailVerified: true, createdAt: '2023-01-01T00:00:00.000Z', updatedAt: '2023-01-01T00:00:00.000Z', } as TUser; // Default auth context mockUseAuthContext.mockReturnValue({ user: mockUser, token: 'mock-token', isAuthenticated: true, error: undefined, login: jest.fn(), logout: jest.fn(), setError: jest.fn(), roles: {}, }); // Default access and permissions mockUseHasAccess.mockReturnValue(true); mockUseResourcePermissions.mockReturnValue({ hasPermission: () => true, isLoading: false, permissionBits: 0, }); jest.mock('~/hooks', () => ({ useLocalize: () => (key) => { const translations = { com_ui_save: 'Save', com_ui_create: 'Create', }; return translations[key] || key; }, useAuthContext: () => mockUseAuthContext(), useHasAccess: () => mockUseHasAccess(), useResourcePermissions: () => mockUseResourcePermissions(), })); const createBaseMutation = ( isLoading = false, ): UseMutationResult => { if (isLoading) { return { mutate: jest.fn(), mutateAsync: jest.fn().mockResolvedValue({} as T), isLoading: true, isError: false, isSuccess: false, isIdle: false as const, status: 'loading' as const, error: null, data: undefined, failureCount: 0, failureReason: null, reset: jest.fn(), context: undefined, variables: undefined, isPaused: false, }; } else { return { mutate: jest.fn(), mutateAsync: jest.fn().mockResolvedValue({} as T), isLoading: false, isError: false, isSuccess: false, isIdle: true as const, status: 'idle' as const, error: null, data: undefined, failureCount: 0, failureReason: null, reset: jest.fn(), context: undefined, variables: undefined, isPaused: false, }; } }; jest.mock('~/data-provider', () => ({ useUpdateAgentMutation: () => createBaseMutation(), })); jest.mock('../Advanced/AdvancedButton', () => ({ __esModule: true, default: jest.fn(() =>
), })); jest.mock('../Version/VersionButton', () => ({ __esModule: true, default: jest.fn(() =>
), })); jest.mock('../AdminSettings', () => ({ __esModule: true, default: jest.fn(() =>
), })); jest.mock('../DeleteButton', () => ({ __esModule: true, default: ({ agent_id }: { agent_id: string }) => (