Files
cc-1c-skills/tests/web-test/04-selectvalue.test.mjs
T
Nick Shirokov 51e37f9874 feat(web-test): M5-pre #4a — Менеджер (choiceHistoryOnInput=Auto) + selectValue/auto-history
Реквизит шапки ПриходнаяНакладная.Менеджер типа CatalogRef.Контрагенты
с дефолтным choiceHistoryOnInput=Auto. Существующий Контрагент в той же
шапке имеет DontUse, что даёт парный контраст для тестирования влияния
флага на selectValue.

Новый шаг 04-selectvalue/auto-history:
- selectValue('Менеджер', 'ООО Юг') → method='dropdown' (typeahead активен,
  префиксный поиск по Description находит «ООО Юг» в catalogue).
- Парный 04-selectvalue/direct-form (existing): selectValue('Контрагент',
  'Север') → method='form' (typeahead подавлен DontUse → форма выбора).

Тест покрывает существующее ветвление selectValue по флагу
choiceHistoryOnInput без engine-доработок. Истории на сервере писать
заранее не нужно: typeahead использует prefix-match по Description,
а не статистику истории.

Полный регресс **18/18 зелёный** (8m 47.3s).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:56:00 +03:00

81 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const name = 'selectValue: dropdown vs форма выбора';
export const tags = ['selectvalue', 'smoke'];
export const timeout = 90000;
const findField = (state, name) => state.fields?.find(f => f.name === name || f.label === name);
export default async function({ navigateSection, openCommand, clickElement, selectValue, closeForm, assert, step, log }) {
await step('dropdown: Организация → CatalogRef.Организации (quickChoice=true)', async () => {
await navigateSection('Склад');
await openCommand('Приходная накладная');
await clickElement('Создать');
const result = await selectValue('Организация', 'Альфа');
log(`method=${result.selected?.method}, search=${result.selected?.search}`);
assert.equal(result.selected?.method, 'dropdown', 'Должен быть метод dropdown (быстрый выбор)');
const field = findField(result, 'Организация');
log(`Организация value='${field?.value}'`);
assert.includes(field?.value || '', 'Альфа', 'Организация должна показать выбранное значение');
await closeForm({ save: false });
});
await step('direct-form: Контрагент → CatalogRef.Контрагенты (quickChoice=false)', async () => {
await navigateSection('Склад');
await openCommand('Приходная накладная');
await clickElement('Создать');
const result = await selectValue('Контрагент', 'Север');
log(`method=${result.selected?.method}, search=${result.selected?.search}`);
assert.equal(result.selected?.method, 'form', 'Должен быть метод form (через форму выбора)');
const field = findField(result, 'Контрагент');
log(`Контрагент value='${field?.value}'`);
assert.includes(field?.value || '', 'Север', 'Контрагент должен показать выбранное значение');
await closeForm({ save: false });
});
await step('auto-history: choiceHistoryOnInput=Auto → method=dropdown даже на ссылке без quickChoice', async () => {
// Менеджер и Контрагент оба ссылаются на CatalogRef.Контрагенты (quickChoice=false).
// Отличие — choiceHistoryOnInput:
// Контрагент: 'DontUse' → typeahead-dropdown подавлен → selectValue идёт в form
// Менеджер: 'Auto' (дефолт) → typeahead активен → selectValue остаётся в dropdown
// Шаг подтверждает, что флаг управляет path внутри selectValue.
await navigateSection('Склад');
await openCommand('Приходная накладная');
await clickElement('Создать');
const r = await selectValue('Менеджер', 'ООО Юг');
log(`Менеджер (Auto): method=${r.selected?.method}`);
assert.equal(r.selected?.method, 'dropdown',
'Auto-история включена → typeahead-dropdown → method=dropdown (vs form у Контрагент)');
const field = findField(r, 'Менеджер');
assert.includes(field?.value || '', 'Юг', 'значение установилось из dropdown');
await closeForm({ save: false });
});
await step('clear: selectValue с пустым search → Shift+F4', async () => {
await navigateSection('Склад');
await openCommand('Приходная накладная');
await clickElement('Создать');
await selectValue('Организация', 'Альфа');
const before = await selectValue('Организация', ''); // empty → clear
const field = findField(before, 'Организация');
log(`Организация after clear value='${field?.value}'`);
assert.equal(field?.value, '', 'Организация должна быть очищена');
await closeForm({ save: false });
});
}
// show-all-form ветка (P1 в матрице) требует quickChoice=true каталога с
// количеством > порога dropdown, чтобы появилась ссылка "Показать все".
// В текущей синтетике такого каталога нет (Организации ~2 элемента, остальные
// quickChoice=false). Откладывается до расширения синтетики.