diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 81bb56c5..cca17fb8 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -29,6 +29,11 @@ | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат | | 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат | +## Приёмка 7.5Д — смена режима при незавершённом Ping (2026-09-23) + +- Новый E2E удерживает POST collect-group, открывает настройки обычной ссылкой, переключает «Живые» на «Моковые», возвращается назад и получает поздний 500 старого запроса. Проверено отсутствие старой ошибки и доступность создания пробы в новом режиме. Тест прошёл; код приложения не менялся. Сценарий включает размонтирование страницы, не доказывает смену контекста без размонтирования. +- URL backend в текущем Playwright окружении заблокирован NEXT_PUBLIC_BACKEND_URL=same-origin. Смену адреса backend нужно проверять отдельной конфигурацией; этот сценарий остаётся открытым, как и сквозной переход к Ping-проверке из дашборда. Production build не повторялся для изменения теста; последняя успешная сборка ca9474a. Работа продолжена по просьбе пользователя при остатке 7% пятичасовой квоты. Локальный коммит без push. + ## Приёмка 7.5Г — сквозной сценарий сервера (2026-09-23) - Добавлен E2E «проблема на дашборде → выбранный сервер → опрос с 403 → успешный повтор → назад → вперёд». Проверены точный ID и одна строка, сохранение выбранного сервера при отказе, два явных POST только выбранному устройству и отсутствие операций записи от переходов истории. diff --git a/tests/e2e/uptime-links.spec.ts b/tests/e2e/uptime-links.spec.ts index bafb80d5..a91ac3c6 100644 --- a/tests/e2e/uptime-links.spec.ts +++ b/tests/e2e/uptime-links.spec.ts @@ -641,3 +641,25 @@ for (const width of [320, 390]) { expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true) }) } + +test('Смена режима через настройки: поздняя ошибка Ping не появляется после возврата', async ({ page }) => { + await setup(page, '/uptime?probe=p1', 0, false, 'mm:uptime:write') + let release!: () => void + const gate = new Promise(resolve => { release = resolve }) + await page.route('**/api/uptime/probes/collect-group', async route => { + await gate + await route.fulfill({ status: 500, json: { error: 'Ошибка старого live-подключения' } }) + }) + const started = page.waitForRequest(r => r.url().endsWith('/collect-group')) + await page.getByRole('button', { name: 'Обновить', exact: true }).click() + await started + await page.locator('a[href="/settings"]').first().click() + await page.getByRole('button', { name: 'Моковые', exact: true }).click() + await page.goBack() + await expect(page.getByText(/Демо-режим · пробы/)).toBeVisible() + const response = page.waitForResponse(r => r.url().endsWith('/collect-group')) + release() + await response + await expect(page.getByText('Ошибка старого live-подключения', { exact: true })).toHaveCount(0) + await expect(page.getByRole('button', { name: 'Новая проба', exact: true })).toBeEnabled() +})