import { clientConfig } from '@/features/User/oidcAuth' import { getOpenPaasUser, updateUserConfigurations, getResourceDetails, getUserDetails } from '@/features/User/userAPI' import { api } from '@/utils/apiUtils' jest.mock('@/utils/apiUtils') clientConfig.url = 'https://example.com' describe('getOpenPaasUser', () => { it('should fetch and return user data', async () => { const mockUser = { id: '123', name: 'OpenPaas User' } ;(api.get as jest.Mock).mockReturnValue({ json: jest.fn().mockResolvedValue(mockUser) }) const result = await getOpenPaasUser() expect(api.get).toHaveBeenCalledWith('api/user') expect(result).toEqual(mockUser) }) }) describe('getUserDetails', () => { it('should fetch and return user details', async () => { const mockUser = { firstname: 'John', lastname: 'Doe', emails: ['john@test.com'] } const userId = '123' ;(api.get as jest.Mock).mockReturnValue({ json: jest.fn().mockResolvedValue(mockUser) }) const result = await getUserDetails(userId) expect(api.get).toHaveBeenCalledWith(`api/users/${userId}`) expect(result).toEqual(mockUser) }) }) describe('getResourceDetails', () => { it('should fetch and return resource details', async () => { const mockResource = { _id: 'res-123', name: 'Meeting Room A' } const resourceId = 'res-123' ;(api.get as jest.Mock).mockReturnValue({ json: jest.fn().mockResolvedValue(mockResource) }) const result = await getResourceDetails(resourceId) expect(api.get).toHaveBeenCalledWith(`api/resources/${resourceId}`) expect(result).toEqual(mockResource) }) }) describe('updateUserConfigurations', () => { beforeEach(() => { jest.clearAllMocks() }) it('should PATCH configurations with language update', async () => { const mockResponse = { status: 204 } ;(api.patch as jest.Mock).mockResolvedValue(mockResponse) await updateUserConfigurations({ language: 'vi' }) expect(api.patch).toHaveBeenCalledWith('api/configurations?scope=user', { json: [ { name: 'core', configurations: [{ name: 'language', value: 'vi' }] } ] }) }) it('should PATCH configurations with multiple updates', async () => { const mockResponse = { status: 204 } ;(api.patch as jest.Mock).mockResolvedValue(mockResponse) await updateUserConfigurations({ language: 'fr', timezone: 'Europe/Paris' }) expect(api.patch).toHaveBeenCalledWith('api/configurations?scope=user', { json: [ { name: 'core', configurations: [ { name: 'language', value: 'fr' }, { name: 'datetime', value: { timeZone: 'Europe/Paris' } } ] } ] }) }) it('should handle empty updates without calling API', async () => { const result = await updateUserConfigurations({}) expect(api.patch).not.toHaveBeenCalled() expect(result).toEqual({ status: 204 }) }) })