69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { http, HttpResponse } from 'msw';
|
|
import { server } from '@/shared/lib/test/server';
|
|
import { setAccessToken, getAccessToken } from './tokenManager';
|
|
import { login, register, refresh, logout, getMe, updateProfile } from './sessionApi';
|
|
|
|
const API = '/api/v1';
|
|
|
|
beforeEach(() => {
|
|
setAccessToken(null);
|
|
});
|
|
|
|
describe('login', () => {
|
|
it('returns auth data and sets access token', async () => {
|
|
const result = await login('user@test.com', 'password');
|
|
expect(result.user.email).toBe('user@test.com');
|
|
expect(result.accessToken).toBe('mock-access-token');
|
|
expect(getAccessToken()).toBe('mock-access-token');
|
|
});
|
|
|
|
it('throws on invalid credentials', async () => {
|
|
server.use(
|
|
http.post(
|
|
`${API}/auth/login`,
|
|
() => new HttpResponse(null, { status: 401, statusText: 'Unauthorized' }),
|
|
),
|
|
);
|
|
await expect(login('wrong@test.com', 'wrong')).rejects.toThrow();
|
|
});
|
|
});
|
|
|
|
describe('register', () => {
|
|
it('returns auth data and sets access token', async () => {
|
|
const result = await register('new@test.com', 'password', 'New User');
|
|
expect(result.user.email).toBe('user@test.com');
|
|
expect(getAccessToken()).toBe('mock-access-token');
|
|
});
|
|
});
|
|
|
|
describe('refresh', () => {
|
|
it('returns auth data and sets access token', async () => {
|
|
const result = await refresh();
|
|
expect(result.accessToken).toBe('mock-access-token');
|
|
expect(getAccessToken()).toBe('mock-access-token');
|
|
});
|
|
});
|
|
|
|
describe('logout', () => {
|
|
it('clears access token', async () => {
|
|
setAccessToken('test-token');
|
|
await logout();
|
|
expect(getAccessToken()).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('getMe', () => {
|
|
it('returns current user', async () => {
|
|
const result = await getMe();
|
|
expect(result.email).toBe('user@test.com');
|
|
});
|
|
});
|
|
|
|
describe('updateProfile', () => {
|
|
it('updates and returns user', async () => {
|
|
const result = await updateProfile({ name: 'Updated' });
|
|
expect(result.name).toBe('Updated');
|
|
});
|
|
});
|