refactor: отчёт сессии загружается одним hook useSessionReport с повтором 409

This commit is contained in:
gglamer 2026-09-26 20:59:50 +00:00
commit f6d0653e68
7 changed files with 106 additions and 79 deletions

View file

@ -0,0 +1,21 @@
import assert from "node:assert/strict";
import { REPORT_RETRY_LIMIT, reportErrorMessage, reportRetryDelay, shouldRetryReport } from "../src/shared/api/report.mjs";
assert.equal(reportErrorMessage(403), "Отчёт недоступен: это занятие другого обучающегося.");
assert.equal(reportErrorMessage(409), "Оценка ещё не готова. Попробуйте получить разбор чуть позже.");
assert.equal(reportErrorMessage(500), "Не удалось получить отчёт (HTTP 500).");
assert.equal(reportErrorMessage(null), "Не удалось получить отчёт.", "сеть упала — статуса нет");
assert.equal(shouldRetryReport(0, 409), true, "оценка ещё считается — повторяем сами");
assert.equal(shouldRetryReport(REPORT_RETRY_LIMIT - 1, 409), true);
assert.equal(shouldRetryReport(REPORT_RETRY_LIMIT, 409), false, "число попыток ограничено");
assert.equal(shouldRetryReport(0, 403), false, "чужое занятие не станет своим — не повторяем");
assert.equal(shouldRetryReport(0, 404), false);
assert.equal(shouldRetryReport(0, 500), false);
assert.ok(reportRetryDelay(0) > 0);
assert.ok(reportRetryDelay(1) >= reportRetryDelay(0), "паузы не сокращаются");
assert.ok(reportRetryDelay(50) <= 5_000, "пауза ограничена сверху");
console.log("Session report: unified errors, 409 retried with a limit, 403 not retried.");