mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-09-14 00:33:10 +00:00
fix(settings): вернуть в админку категории, которых не было в дереве
Дерево разделов настроек — захардкоженный список категорий, а на бэкенде категория выводится из имени ключа. Любая настройка, создавшая новую категорию, просто исчезала из админки: настройки были в API, но ни один раздел их не показывал. Так пропали 33 категории из 102, в том числе: - CABINET целиком (13 настроек, включая CABINET_ENABLED, CABINET_URL, CABINET_REQUIRE_LEGAL_CONSENT и CABINET_LEGAL_CONSENT_PRECHECKED); - INFO_PAGES — режимы показа оферты, политики, правил и FAQ; - MENU — кнопка меню Telegram с открытием кабинета. Эти три разложены по дереву явно. Остальное собирает новый пункт «Прочие настройки» — по образцу админки бота, где такой раздел уже есть. Это и есть главная часть фикса: теперь новая категория на бэкенде не приводит к молчаливому исчезновению настроек, максимум — к неудачному разделу. Локали ru/en/zh/fa, +5 тестов на само дерево.
This commit is contained in:
44
src/components/admin/constants.test.ts
Normal file
44
src/components/admin/constants.test.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { OTHER_CATEGORIES, SETTINGS_TREE, getMappedCategoryKeys } from './constants';
|
||||
|
||||
// Категории настроек на бэкенде выводятся из имени ключа, поэтому каждая новая
|
||||
// настройка может создать категорию, которой в дереве нет. Раньше такие настройки
|
||||
// просто не отображались: так исчезла вся категория CABINET (13 настроек, включая
|
||||
// CABINET_ENABLED и CABINET_URL) и правовые документы из INFO_PAGES.
|
||||
|
||||
describe('SETTINGS_TREE', () => {
|
||||
it('содержит пункт-сборник для категорий без своего места', () => {
|
||||
const children = SETTINGS_TREE.groups.flatMap((group) => group.children);
|
||||
const catchAll = children.filter((child) => child.categories.includes(OTHER_CATEGORIES));
|
||||
|
||||
expect(catchAll).toHaveLength(1);
|
||||
expect(catchAll[0].id).toBe('sys_other');
|
||||
});
|
||||
|
||||
it('не считает маркер сборника обычной категорией', () => {
|
||||
expect(getMappedCategoryKeys().has(OTHER_CATEGORIES)).toBe(false);
|
||||
});
|
||||
|
||||
it('раскладывает по дереву категории, которые раньше терялись', () => {
|
||||
const mapped = getMappedCategoryKeys();
|
||||
|
||||
for (const category of ['CABINET', 'INFO_PAGES', 'MENU']) {
|
||||
expect(mapped.has(category)).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it('незнакомая категория попадает в сборник, а не пропадает', () => {
|
||||
const mapped = getMappedCategoryKeys();
|
||||
// Так выглядит любая категория, появившаяся на бэкенде после этого релиза.
|
||||
expect(mapped.has('SOME_FUTURE_CATEGORY')).toBe(false);
|
||||
});
|
||||
|
||||
it('не содержит категорию дважды', () => {
|
||||
const all = SETTINGS_TREE.groups
|
||||
.flatMap((group) => group.children)
|
||||
.flatMap((child) => child.categories)
|
||||
.filter((category) => category !== OTHER_CATEGORIES);
|
||||
|
||||
expect(new Set(all).size).toBe(all.length);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user