fix: unify admin error handling

This commit is contained in:
ik
2026-09-16 19:54:18 +07:00
parent 9bcb019d3a
commit eb4d6ccdb0
6 changed files with 51 additions and 10 deletions
+30
View File
@@ -5,6 +5,8 @@ import { activityLevel, plural } from "../../src/lib/presentation.ts";
import { fishVisualFamily } from "../../src/lib/fish-visuals.ts";
import { tackleVisualKind, tackleVisualTone } from "../../src/lib/tackle-visuals.ts";
import { waterbodyVisual } from "../../src/lib/waterbody-visuals.ts";
import { pageHref, pageWindow } from "../../src/lib/pagination.ts";
import { adminEndsSession, adminErrorMessage } from "../../src/lib/admin-errors.ts";
test("activity levels share one complete 0-100 scale", () => {
assert.deepEqual(
@@ -46,3 +48,31 @@ test("waterbody fingerprints are stable, bounded and entity-specific", () => {
assert.ok(kuori.markerY >= 18 && kuori.markerY <= 40);
assert.match(kuori.code, /^[0-9A-Z]{2}$/);
});
test("45 records are reachable across three stable pages", () => {
const pages = [pageWindow(45, 20, 0), pageWindow(45, 20, 20), pageWindow(45, 20, 40)];
assert.deepEqual(pages.map(page => [page.start, page.end]), [[1, 20], [21, 40], [41, 45]]);
assert.deepEqual(pages.map(page => [page.previousOffset, page.nextOffset]), [[null, 20], [0, 40], [20, null]]);
assert.deepEqual(pages.map(page => page.page), [1, 2, 3]);
const reached = pages.flatMap(page => Array.from({ length: page.end - page.start + 1 }, (_, index) => page.start + index));
assert.deepEqual(reached, Array.from({ length: 45 }, (_, index) => index + 1));
});
test("pagination links preserve filters and replace offset", () => {
const params = new URLSearchParams("fish=pike&waterbody=kuori&offset=20&offset=999");
const next = pageHref("/records", params, 40);
const first = pageHref("/records", params, 0, "#results");
assert.equal(next, "/records?fish=pike&waterbody=kuori&offset=40");
assert.equal(first, "/records?fish=pike&waterbody=kuori#results");
});
test("admin errors keep auth and operational responses consistent", () => {
assert.equal(adminErrorMessage(401, "fallback"), "Неверный или истёкший административный токен.");
assert.equal(adminErrorMessage(409, "fallback"), "Операция конфликтует с изменением в другой вкладке.");
assert.equal(adminErrorMessage(429, "fallback"), "Слишком много попыток. Повторите позже.");
assert.equal(adminErrorMessage(503, "fallback"), "Сервис временно недоступен. Проверьте состояние и повторите позже.");
assert.equal(adminErrorMessage(422, "fallback"), "fallback");
assert.equal(adminEndsSession(401), true);
assert.equal(adminEndsSession(429), true);
assert.equal(adminEndsSession(409), false);
});