lct-hack/backend/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Gerasimov d55c8bc8cd feat: вход, роли и аудит действий (lct-23)
Самое крупное расхождение с ТЗ: входа не было вовсе, экраны открывались
ссылкой с номером занятия, и пускало знание адреса.

- Таблицы users и audit_log, миграция. Пароль argon2, сессия — подписанная
  cookie; роль на сокетах читается из той же cookie в момент рукопожатия,
  отдельного протокола авторизации в канале нет.
- Разграничение: control — преподавателю, observe — преподавателю и админу,
  call и station — обучающемуся и преподавателю. Отказ приходит событием
  error с кодом forbidden.
- Обучающийся не видит чужого: история подменяет фильтр на его собственный
  идентификатор, разбор и профиль сверяют trainee_id. ТЗ запрещает доступ
  к чужим результатам, а не только к чужим экранам.
- Администратору закрыта правка оценок — ТЗ запрещает это прямо.
- make users заводит по записи на роль и печатает случайные пароли один раз:
  зашитый в репозиторий admin/admin пережил бы сдачу.
- Экран входа и проверка роли на каждом маршруте фронта.

Наши инструменты не сломались: make lesson и тесты входят через dev-token
за флагом dev_auth_bypass, на стенде точка отвечает 404 — выключенной
функции не должно быть видно вовсе. У тестов появился conftest.py.

Role уехала в домен и в generated.ts через EventCatalog.principal: иначе
фронт переписывал бы список ролей руками.

181 тест зелёный (14 новых), make typecheck чистый.
2026-09-20 09:01:05 +03:00
..
conftest.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
test_auth.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
test_db.py fix: test_db.py вешал make test, когда Postgres недоступен 2026-09-18 16:28:47 +03:00
test_domain.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
test_ekp.py feat: исход вызова — не каждый звонок заканчивается карточкой (lct-36) 2026-09-20 08:33:30 +03:00
test_llm.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_outcomes.py feat: исход вызова — не каждый звонок заканчивается карточкой (lct-36) 2026-09-20 08:33:30 +03:00
test_profile.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
test_reference.py lct-16 и половина lct-19: разбор, отчёт, внешний монитор, эталон 2026-09-17 21:32:12 +03:00
test_refinement.py feat: билеты 1–3 заказчика в библиотеку сценариев (lct-34, частично) 2026-09-20 08:38:01 +03:00
test_scenarios.py lct-03 и lct-04: журнал сессий и библиотека сценариев 2026-09-15 20:10:05 +03:00
test_scoring.py feat: классификатор ЕКП — признаки вместо выбора службы (lct-32) 2026-09-19 20:11:50 +03:00
test_slots.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_slots_e5.py lct-07 (без LLM): слот-автомат, персона, звонящий на заготовках, make repl 2026-09-17 13:57:43 +03:00
test_station.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
test_statuses.py feat: статусы реагирования на АРМ ДДС и ошибки диспетчера D1–D6 (lct-33) 2026-09-20 08:23:55 +03:00
test_tree.py lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
test_voice_pipeline.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
test_voice_text.py lct-06: голосовой контур VAD → STT → звонящий → TTS, с перебиванием 2026-09-17 15:04:17 +03:00
test_ws.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00