mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-10 16:14:54 +03:00
test(web-test): регресс на readSpreadsheet до Сформировать + object-search selectValue
- 11-report: чтение несформированного отчёта бросает осмысленную ошибку,
не ReferenceError (покрывает import checkForErrors в readSpreadsheet);
- 04-selectvalue: объектный поиск selectValue({Наименование}) выбирает через
форму выбора (покрывает 3A guard + import filterList).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,28 @@ export default async function({ navigateSection, openCommand, clickElement, sele
|
||||
await closeForm({ save: false });
|
||||
});
|
||||
|
||||
await step('object-search: selectValue({ Наименование }) выбирает через форму выбора', async () => {
|
||||
// Регрессия объектного поиска { field: value }:
|
||||
// 1) dropdown-путь 3A падал на searchText.toLowerCase() (объект, не строка);
|
||||
// 2) pickFromSelectionForm (Шаг 2) вызывал filterList без импорта —
|
||||
// ReferenceError тихо глотался catch'ем, поиск по полю не отрабатывал.
|
||||
// Теперь объектный search уходит в форму выбора и фильтрует per-field.
|
||||
await navigateSection('Склад');
|
||||
await openCommand('Приходная накладная');
|
||||
await clickElement('Создать');
|
||||
|
||||
const r = await selectValue('Контрагент', { 'Наименование': 'Север' });
|
||||
log(`object-search: method=${r.selected?.method} errors=${JSON.stringify(r.errors)}`);
|
||||
assert.equal(r.selected?.method, 'form', 'объектный поиск идёт через форму выбора');
|
||||
assert.ok(!r.errors, 'без ошибок 1С');
|
||||
|
||||
const field = findField(r, 'Контрагент');
|
||||
log(`Контрагент value='${field?.value}'`);
|
||||
assert.includes(field?.value || '', 'Север', 'выбран контрагент с Наименование=Север');
|
||||
|
||||
await closeForm({ save: false });
|
||||
});
|
||||
|
||||
await step('clear: selectValue с пустым search → Shift+F4', async () => {
|
||||
await navigateSection('Склад');
|
||||
await openCommand('Приходная накладная');
|
||||
|
||||
@@ -20,6 +20,20 @@ export default async function({ navigateSection, openCommand, getFormState, getC
|
||||
assert.equal(submit.default, true, '«Сформировать» — кнопка по умолчанию');
|
||||
});
|
||||
|
||||
await step('guard: readSpreadsheet до «Сформировать» → осмысленная ошибка, не ReferenceError', async () => {
|
||||
// Регрессия: чтение несформированного отчёта идёт в ветку allCells.size===0,
|
||||
// которая вызывает checkForErrors(). После рефакторинга на модули символ не был
|
||||
// импортирован в spreadsheet.mjs → падало с "checkForErrors is not defined".
|
||||
// Теперь должно бросать осмысленное сообщение (+ подсказка из инфо-панели 1С).
|
||||
let threw = false, msg = '';
|
||||
try { await readSpreadsheet(); }
|
||||
catch (e) { threw = true; msg = e.message; }
|
||||
log(`readBeforeGenerate: threw=${threw} msg=${msg}`);
|
||||
assert.ok(threw, 'readSpreadsheet должен бросить — отчёт ещё не сформирован');
|
||||
assert.includes(msg, 'no SpreadsheetDocument', 'осмысленное сообщение readSpreadsheet');
|
||||
assert.ok(!/is not defined/.test(msg), 'не ReferenceError — checkForErrors импортирован');
|
||||
});
|
||||
|
||||
await step('reset: сброс пользовательских настроек к стандартным', async () => {
|
||||
// 1С хранит пользовательские настройки между сессиями — сбрасываем к дефолту,
|
||||
// чтобы тест был идемпотентным независимо от предыдущих прогонов.
|
||||
|
||||
Reference in New Issue
Block a user