veza/apps/web/src/services/userService.test.ts

107 lines
2.9 KiB
TypeScript
Raw Normal View History

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { userService } from './userService';
import { apiClient } from '@/services/api/client';
// Mock apiClient
vi.mock('@/services/api/client', () => ({
apiClient: {
get: vi.fn(),
put: vi.fn(),
delete: vi.fn(),
},
}));
const mockedApiClient = apiClient as {
get: ReturnType<typeof vi.fn>;
put: ReturnType<typeof vi.fn>;
};
describe('userService', () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe('getProfile', () => {
it('should return user profile by id', async () => {
mockedApiClient.get.mockResolvedValue({
data: {
id: 'u1',
username: 'testuser',
email: 'test@example.com',
first_name: 'Test',
last_name: 'User',
},
});
const result = await userService.getProfile('u1');
expect(result).toBeDefined();
expect(result).toHaveProperty('profile');
expect(result.profile).toHaveProperty('id');
expect(result.profile).toHaveProperty('username');
expect(result.profile).toHaveProperty('email');
});
});
describe('getProfileByUsername', () => {
it('should return user profile by username', async () => {
mockedApiClient.get.mockResolvedValue({
data: {
id: 'u1',
username: 'testuser',
email: 'test@example.com',
},
});
const result = await userService.getProfileByUsername('testuser');
expect(result).toBeDefined();
expect(result).toHaveProperty('profile');
expect(result.profile).toHaveProperty('username');
expect(result.profile.username).toBe('testuser');
});
});
describe('updateProfile', () => {
it('should update user profile', async () => {
mockedApiClient.put.mockResolvedValue({
data: {
id: 'u1',
username: 'testuser',
first_name: 'Updated',
last_name: 'Name',
},
});
const result = await userService.updateProfile('u1', {
first_name: 'Updated',
last_name: 'Name',
});
expect(result).toBeDefined();
expect(result).toHaveProperty('profile');
expect(result.profile.first_name).toBe('Updated');
expect(result.profile.last_name).toBe('Name');
});
});
describe('getProfileCompletion', () => {
it('should return profile completion data', async () => {
mockedApiClient.get.mockResolvedValue({
data: {
completion_percentage: 80,
missing_fields: ['bio', 'location'],
},
});
const result = await userService.getProfileCompletion('u1');
expect(result).toBeDefined();
expect(result).toHaveProperty('completion_percentage');
expect(result).toHaveProperty('missing_fields');
expect(typeof result.completion_percentage).toBe('number');
expect(Array.isArray(result.missing_fields)).toBe(true);
});
});
});