mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-28 07:31:00 +03:00
fix(web-test): фактическое состояние свёрнутой группы и попадание клика по заголовку
Группа, содержимое которой — таблица, отдавала collapsed:false в обоих состояниях,
а свернуть её обратно было нельзя. Два независимых дефекта:
1. Первым сиблингом за <base>#title_div платформа кладёт пустую служебную обёртку
<дочерний>#group_div.logicGroupContainer (display:block, height:0), а контент идёт
дальше по сиблингам — внутри обёртки его нет. Чтение display первого сиблинга
давало collapsed:false и свёрнутой, и развёрнутой группе.
2. <base>#title_text растягивается по ширине содержимого (173px свёрнута → 1295px
развёрнута), кликабелен только вложенный label шириной по тексту. Клик в
геометрический центр попадал в пустоту: раскрыть удавалось, свернуть — нет.
GROUP_STATE_FN обходит сиблинги по id-префиксу обёртки (префикс обрывает обход на
чужих узлах — свободный элемент между группами по-прежнему не путает определение).
TEXT_CLICK_POINT_FN целится во вложенный текст с клампом влево, как rowClickPoint.
Обе — общие для getFormState().groups[] и резолвера цели клика.
Клик по заголовку, не изменивший состояние, теперь бросает ошибку вместо
toggled:true — идемпотентность {expand} не затронута, при нечитаемом collapsed
проверка пропускается.
Фикстура: свёрнутая группа с таблицей (прежние содержали только декорации, поэтому
регресс был зелёным) и растянутая гиперссылка с Сообщить в обработчике — у декораций
промаха нет, их внутренний узел тянется вместе с контейнером.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5472e03417
commit
ba27f2218f
@@ -71,6 +71,52 @@ export default async function({ navigateSection, openCommand, navigateLink, getF
|
||||
await closeForm();
|
||||
});
|
||||
|
||||
await step('свёрнутая группа С ТАБЛИЦЕЙ: collapsed против факта видимости грида', async () => {
|
||||
// Багрепорт 2026-07-23. Два дефекта на этой группе (у остальных содержимое — декорации):
|
||||
// 1) 1С кладёт первым сиблингом за #title_div служебную обёртку <дочерний>#group_div
|
||||
// (logicGroupContainer, display:block, height:0), а контент идёт дальше по сиблингам →
|
||||
// чтение display первого сиблинга давало collapsed:false в ОБОИХ состояниях;
|
||||
// 2) #title_text растягивается по ширине содержимого (173px свёрнута → 1295px развёрнута),
|
||||
// кликабелен только вложенный label слева → клик в центр промахивался, и свернуть
|
||||
// обратно было нельзя.
|
||||
// Грид в tables[] — независимая от collapsed проверка факта.
|
||||
const grid = (st) => (st.tables || []).some(t => t.name === 'ТаблицаВСвёрнутой');
|
||||
const s = await navigateLink('Обработка.СтраницаНастроек');
|
||||
assert.equal(collapsedOf(s, 'ГруппаСвёрнутаяСТаблицей'), true, 'шаг 0: collapsed:true сразу после открытия');
|
||||
assert.equal(grid(s), false, 'шаг 0: грида нет — группа действительно свёрнута');
|
||||
|
||||
let r = await clickElement('Свёрнутая с таблицей', { expand: true });
|
||||
assert.equal(r.clicked.toggled, true, 'expand:true — кликнул');
|
||||
assert.equal(collapsedOf(r, 'ГруппаСвёрнутаяСТаблицей'), false, 'раскрыта');
|
||||
assert.equal(grid(r), true, 'грид появился в tables[]');
|
||||
|
||||
r = await clickElement('Свёрнутая с таблицей', { expand: true });
|
||||
assert.equal(r.clicked.toggled, false, 'expand:true повторно — идемпотентно (no-op)');
|
||||
|
||||
// Свернуть обратно: до фикса точки клика этот шаг молча не срабатывал (заголовок растянут).
|
||||
r = await clickElement('Свёрнутая с таблицей', { expand: false });
|
||||
assert.equal(r.clicked.toggled, true, 'expand:false — кликнул');
|
||||
assert.equal(collapsedOf(r, 'ГруппаСвёрнутаяСТаблицей'), true, 'свёрнута обратно');
|
||||
assert.equal(grid(r), false, 'грид пропал из tables[]');
|
||||
await closeForm();
|
||||
});
|
||||
|
||||
await step('растянутая гиперссылка: клик доходит до обработчика', async () => {
|
||||
// Проверка соседнего с дефектом 2 случая. Ссылка растянута на всю ширину формы
|
||||
// (horizontalStretch + autoMaxWidth:false → контейнер 1295px), но промаха тут НЕ бывает:
|
||||
// её внутренний текстовый узел — div.ellipsis.flex-1-1-100, он тянется ВМЕСТЕ с
|
||||
// контейнером (1293 из 1295), тогда как у заголовка группы внутри label без flex-1-1-100,
|
||||
// шириной по тексту. Шаг стоит страховкой на случай смены вёрстки платформой.
|
||||
// Обработчик Нажатие сообщает — без следа доставку клика не отличить от no-op.
|
||||
const сообщения = (st) => (st.errors?.messages || []).join(' | ');
|
||||
const s = await navigateLink('Обработка.СтраницаНастроек');
|
||||
assert.equal(сообщения(s), '', 'до клика сообщений нет');
|
||||
const r = await clickElement('Растянутая ссылка');
|
||||
assert.includes(сообщения(r), 'клик по растянутой ссылке доставлен',
|
||||
'клик по растянутой ссылке дошёл до обработчика');
|
||||
await closeForm();
|
||||
});
|
||||
|
||||
await step('popup: всплывающая группа — behavior, открытие показывает содержимое', async () => {
|
||||
const s = await navigateLink('Обработка.СтраницаНастроек');
|
||||
const pg = (s.groups || []).find(g => g.name === 'ГруппаВсплывающая');
|
||||
|
||||
Reference in New Issue
Block a user