import * as React from 'react' import { render, screen } from '@testing-library/react' import UserEdit from './UserEdit' import { describe, it, expect, vi } from 'vitest' const defaultUser = { id: 'user1', userName: 'testuser', name: 'Test User', email: 'test@example.com', isAdmin: false, libraries: [ { id: 1, name: 'Library 1', path: '/music1' }, { id: 2, name: 'Library 2', path: '/music2' }, ], lastLoginAt: '2023-01-01T12:00:00Z', lastAccessAt: '2023-01-02T12:00:00Z', updatedAt: '2023-01-03T12:00:00Z', createdAt: '2023-01-04T12:00:00Z', } const adminUser = { ...defaultUser, id: 'admin1', userName: 'admin', name: 'Admin User', isAdmin: true, } // Mock React-Admin completely with simpler implementations vi.mock('react-admin', () => ({ Edit: ({ children, title }) => (
{title} {children}
), SimpleForm: ({ children }) => (
{children}
), TextInput: ({ source }) => , BooleanInput: ({ source }) => ( ), DateField: ({ source }) => (
Date
), PasswordInput: ({ source }) => ( ), Toolbar: ({ children }) =>
{children}
, SaveButton: () => , FormDataConsumer: ({ children }) => children({ formData: {} }), Typography: ({ children }) =>

{children}

, required: () => () => null, email: () => () => null, useMutation: () => [vi.fn()], useNotify: () => vi.fn(), useRedirect: () => vi.fn(), useRefresh: () => vi.fn(), usePermissions: () => ({ permissions: 'admin' }), useTranslate: () => (key) => key, })) vi.mock('./LibrarySelectionField.jsx', () => ({ LibrarySelectionField: () =>
, })) vi.mock('./DeleteUserButton', () => ({ __esModule: true, default: () => , })) vi.mock('../common', () => ({ Title: ({ subTitle }) =>
{subTitle}
, })) // Mock Material-UI vi.mock('@material-ui/core/styles', () => ({ makeStyles: () => () => ({}), })) vi.mock('@material-ui/core', () => ({ Typography: ({ children }) =>

{children}

, })) describe('', () => { it('should render the user edit form', () => { render() // Check if the edit component renders expect(screen.getByTestId('edit-component')).toBeInTheDocument() expect(screen.getByTestId('simple-form')).toBeInTheDocument() }) it('should render text inputs for admin users', () => { render() // Should render username input for admin expect(screen.getByTestId('text-input-userName')).toBeInTheDocument() expect(screen.getByTestId('text-input-name')).toBeInTheDocument() expect(screen.getByTestId('text-input-email')).toBeInTheDocument() }) it('should render admin checkbox for admin permissions', () => { render() // Should render isAdmin checkbox for admin users expect(screen.getByTestId('boolean-input-isAdmin')).toBeInTheDocument() }) it('should render date fields', () => { render() expect(screen.getByTestId('date-field-lastLoginAt')).toBeInTheDocument() expect(screen.getByTestId('date-field-lastAccessAt')).toBeInTheDocument() expect(screen.getByTestId('date-field-updatedAt')).toBeInTheDocument() expect(screen.getByTestId('date-field-createdAt')).toBeInTheDocument() }) it('should not render username input for non-admin users', () => { render() // Should not render username input for non-admin expect(screen.queryByTestId('text-input-userName')).not.toBeInTheDocument() // But should still render name and email expect(screen.getByTestId('text-input-name')).toBeInTheDocument() expect(screen.getByTestId('text-input-email')).toBeInTheDocument() }) })