← Главная

🩸 HemaWeb — QA Test Plan

Blood Donation Platform · AI-Powered Testing · Playwright + TypeScript

60+
API Endpoints
5
User Roles
26
Pages
45
Test Cases
12
AI-Found Risks

🔗 Тестируемый стенд

Frontend:

https://hemaweb.world/

API:

https://hemaweb.world/api

Swagger:

https://hemaweb.world/api/docs

GitHub: a-voronkov/hemaweb

👥 Тестовые аккаунты

РольEmailПароль
Super Adminsuperadmin@hemaweb.localSuperAdmin123!
Adminadmin@hemaweb.localAdmin123!
Staffstaff@hemaweb.localStaff123!
System Adminsysadmin@hemaweb.localSysAdmin123!
Donor (verified)donor1@example.comDonor123!
Donor (unverified)donor2@example.comDonor123!

📋 Тест-кейсы: Authentication

TC-001 Smoke API
Регистрация нового донора
POST /auth/register с уникальным email → 201 + user.id + user.email
TC-002 Regression API
Регистрация с дублирующим email
POST /auth/register с существующим email → 409 Conflict
TC-003 Smoke API
Логин с валидными данными
POST /auth/login → 200 + session cookie + user data
TC-004 Regression API
Логин с неверным паролем
POST /auth/login wrong password → 401
TC-005 Critical API
Доступ к /auth/me без авторизации
GET /auth/me без cookie → 401

📋 Тест-кейсы: Blood Drives

TC-010 Critical API
Staff создаёт blood drive
POST /blood-drives (staff auth) → 201 + title + status="upcoming"
TC-011 Critical API
Donor НЕ может создать blood drive (RBAC)
POST /blood-drives (donor auth) → 403 Forbidden
TC-012 Critical API
Поиск nearby drives с сортировкой по расстоянию
GET /blood-drives/nearby?lat=13.7563&lng=100.5018&radius=50 → sorted by distance asc
TC-013 Critical API
Верифицированный донор регистрируется на drive
POST /blood-drives/{id}/register (verified donor) → 200 + confirmation email
TC-015 🐛 BUG API
Донор в cooldown может зарегистрироваться на drive
nextEligibleDate > now, но POST /register → 200 (ожидалось 400). AI нашёл: нет проверки cooldown.

📋 Тест-кейсы: Donations & Verification

TC-020 Critical API
Staff записывает донацию
POST /medical-centers/record-donation → 200 + donor.nextEligibleDate = +56 дней
TC-022 🐛 BUG API
Donation с volumeMl = 0 проходит
POST /medical-centers/record-donation volumeMl=0 → 200 (ожидалось 400). AI нашёл: нет валидации.

📋 Тест-кейсы: UI

TC-030 Smoke UI
Donor логинится через UI → видит дашборд
Открыть /auth/sign-in → ввести email/password → нажать Login → увидеть dashboard
TC-031 Critical UI
Donor browse upcoming blood drives
Login → /blood-drives → увидеть список drives или карту
TC-032 Critical UI
Регистрация нового донора через UI
/auth/sign-up → заполнить форму → submit → редирект с sign-up

🔴 AI-найденные риски (Security & Logic)

#РискSeverityФайл
1Race condition: двойная запись на blood driveCriticalblood-drives.service.ts
2Race condition: двойной appointment на слотCriticalblood-drives.service.ts
3Нет rate limiting на /auth/loginCriticalauth.controller.ts
4Слабая валидация пароля (только длина ≥ 8)Highauth.service.ts
5Session cookie — нет проверки флаговHighauth.service.ts
6Нет санитизации XSS в title/descriptionHighMultiple
7Nearby search: ALL drives в память вместо PostGISHighblood-drives.service.ts
8Не проверяется cooldown при регистрацииMediumblood-drives.service.ts
9Email failures молча проглатываютсяMediumMultiple
10Нет пагинации на /blood-drivesMediumblood-drives.controller.ts
11Weight может быть 0 или отрицательныйMediumPrisma schema
12Soft delete inconsistency (drives vs registrations)Mediumblood-drives.service.ts

📊 Test Strategy

УровеньТестовКогда запускатьВремя
🟢 Smoke6Каждый деплой< 2 мин
🟡 Critical Path8Каждый PR< 5 мин
🔵 Full Regression45Nightly< 15 мин