mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-10 16:14:54 +03:00
feat(web-test): M5-pre #4b — 09-filter/unfilter-specific (multi-badge)
Раньше шаг был deferred с комментарием «требует список с видимой
filter-панелью». На самом деле существующая абстракция работает:
два advanced filterList на разных колонках Контрагентов создают
два badge'а в state.filters[], а unfilterList({field}) снимает
конкретный — оставляя остальные.
Новый шаг 09-filter/unfilter-specific (~14s):
- filterList('ООО', {field:'Наименование'}) + filterList('123', {field:'ИНН'})
→ state.filters = [{field:'Наименование',value:'ООО'}, {field:'ИНН',value:'123'}]
- unfilterList({field:'ИНН'}) → остался только Наименование badge
- unfilterList() → пусто
Старый комментарий «defer to filter-panel synthetic» удалён —
оказался устаревшим (видимо unfilterList({field}) уже умел работать
с advanced-filter badge'ами на синтетических списках).
timeout 09-filter поднят с 60000 → 120000ms (8 шагов теперь, +14s
для unfilter-specific).
Регресс: 16/18 зелёных. Два multi-context-теста (14/15) упали на
лицензионном пределе 1С — known environmental issue, не связано с
этим коммитом.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
export const name = 'Фильтры списка: simple-search, advanced-column';
|
||||
export const tags = ['filter', 'smoke'];
|
||||
export const timeout = 60000;
|
||||
export const timeout = 120000;
|
||||
|
||||
export default async function({ navigateSection, openCommand, filterList, unfilterList, readTable, closeForm, assert, step, log }) {
|
||||
export default async function({ navigateSection, openCommand, filterList, unfilterList, readTable, getFormState, closeForm, assert, step, log }) {
|
||||
|
||||
await step('simple-search: filterList по тексту по всем колонкам', async () => {
|
||||
await navigateSection('Склад');
|
||||
@@ -119,11 +119,31 @@ export default async function({ navigateSection, openCommand, filterList, unfilt
|
||||
await closeForm();
|
||||
});
|
||||
|
||||
// unfilter-specific (P1 в матрице) требует список с видимой filter-панелью
|
||||
// (.trainItem badge). На синтетических списках Контрагенты/Номенклатура
|
||||
// advanced filterList применяет фильтр без создания badge, поэтому
|
||||
// unfilterList({field}) не может его найти. Откладываем до синтетики
|
||||
// с настроенной filter-панелью (P2/P3).
|
||||
await step('unfilter-specific: два фильтра → unfilterList({field}) снимает один badge', async () => {
|
||||
// На синтетике advanced-filter ставит badge на filter-панель,
|
||||
// и unfilterList({field}) снимает конкретный, оставив остальные.
|
||||
// Покрывает 09-filter/unfilter-specific (раньше был deferred).
|
||||
await navigateSection('Склад');
|
||||
await openCommand('Контрагенты');
|
||||
|
||||
await filterList('ООО', { field: 'Наименование' });
|
||||
const both = await filterList('123', { field: 'ИНН' });
|
||||
log(`with 2 filters: ${JSON.stringify(both.filters)}`);
|
||||
assert.equal(both.filters?.length, 2, 'оба badge присутствуют');
|
||||
const names = both.filters.map(f => f.field).sort();
|
||||
assert.deepEqual(names, ['ИНН', 'Наименование'], 'badges: Наименование + ИНН');
|
||||
|
||||
const s1 = await unfilterList({ field: 'ИНН' });
|
||||
log(`after unfilter ИНН: ${JSON.stringify(s1.filters)}`);
|
||||
assert.equal(s1.filters?.length, 1, 'остался один badge');
|
||||
assert.equal(s1.filters?.[0]?.field, 'Наименование', 'остался Наименование');
|
||||
|
||||
const s2 = await unfilterList();
|
||||
log(`after unfilter-all: ${JSON.stringify(s2.filters || [])}`);
|
||||
assert.ok(!s2.filters || s2.filters.length === 0, 'все badge сняты');
|
||||
|
||||
await closeForm();
|
||||
});
|
||||
|
||||
await step('unfilter-all: unfilterList() убирает все фильтры', async () => {
|
||||
await navigateSection('Склад');
|
||||
|
||||
Reference in New Issue
Block a user