diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index aeee8db7..7c2bcf0c 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -29,6 +29,11 @@ | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат | | 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат | +## Блок 8.4М — разрывы основного графика (2026-09-24) + +- Существующий E2E пропусков дополнен проверкой SVG основного RX/TX: при [1, 2, null, 3, 4] каждая линия содержит два самостоятельных сегмента. Проверка прошла вместе со Sparkline; lint/diff-check чистые. Production-код не менялся. +- В этом продолжении также завершён блок 8.4Л (смена backend). На контрольной точке использовано 29% пятичасового и 97% недельного лимита. Следующий шаг: задержка внутри открытого SSE, свежесть данных и сводная приёмка этапа 8. Все результаты сохранены локально без push. + ## Блок 8.4Л — смена backend трафика (2026-09-24) - Добавлен E2E реального пользовательского пути через настройки: задержанное обновление списка старого backend, смена адреса, возврат к трафику, ответ старого источника, повторное обновление нового. Старый список не применяется, обновление отправляется только новому backend. diff --git a/tests/e2e/traffic-details.spec.ts b/tests/e2e/traffic-details.spec.ts index 17a14481..ca5cf6a4 100644 --- a/tests/e2e/traffic-details.spec.ts +++ b/tests/e2e/traffic-details.spec.ts @@ -130,6 +130,9 @@ test('Итоги трафика: Sparkline сохраняет разрывы и const control = await setup(page) control.series = [1, 2, null, 3, 4] await page.getByRole('button', { name: '24ч', exact: true }).click() + const history = page.getByRole('region', { name: 'История RX/TX' }) + await expect(history.locator('.recharts-line-curve')).toHaveCount(2) + await expect.poll(async () => history.locator('.recharts-line-curve').evaluateAll(paths => paths.map(path => (path.getAttribute('d')?.match(/M/g) ?? []).length))).toEqual([2, 2]) const spark = page.getByRole('img', { name: 'История измерений', exact: true }).first() await expect(spark.locator('path[fill="none"]')).toHaveCount(2) await expect(spark.locator('path[fill="none"]').nth(1)).toHaveAttribute('d', /^M135\.0,/)