import assert from 'node:assert/strict'; import test from 'node:test'; import { LOGIN_ERROR_MESSAGES, requestLogin, validateLogin } from '../react/login/login-service.js'; test('React-форма входа валидирует обязательные поля и длину пароля', () => { assert.deepEqual(validateLogin(), { password: 'Введите пароль', username: 'Введите имя пользователя' }); assert.deepEqual(validateLogin({ username: 'admin', password: '123' }), { password: 'Минимум 4 символа' }); assert.deepEqual(validateLogin({ username: ' admin ', password: '1234' }), {}); }); test('React-форма сохраняет прежний контракт POST /api/auth/login', async () => { const calls = []; const result = await requestLogin( { username: ' admin ', password: 'секрет' }, async (url, options) => { calls.push({ options, url }); return new Response(JSON.stringify({ redirect: '/admin/', role: 'ADMIN', token: 'access-token' }), { headers: { 'Content-Type': 'application/json' }, status: 200 }); } ); assert.equal(result.ok, true); assert.equal(calls[0].url, '/api/auth/login'); assert.equal(calls[0].options.method, 'POST'); assert.equal(calls[0].options.credentials, 'same-origin'); assert.deepEqual(JSON.parse(calls[0].options.body), { password: 'секрет', username: 'admin' }); }); test('React-форма использует безопасное русское сообщение при не-JSON ошибке', async () => { const result = await requestLogin( { username: 'admin', password: '1234' }, async () => new Response('Ошибка шлюза', { status: 502 }) ); assert.equal(result.ok, false); assert.equal(result.message, LOGIN_ERROR_MESSAGES.credentials); });