From 864e70f39bb8d4ef9f16ae2b881efcc6c72a4838 Mon Sep 17 00:00:00 2001 From: wasrusgen Date: Mon, 18 May 2026 12:24:50 +0300 Subject: [PATCH] =?UTF-8?q?test:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20#/inbox=20=D0=B8=20#/me=20=D0=B2=20ui=5Fsmoke.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- agents/feature-status.md | 4 ++-- tests/ui_smoke.js | 41 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/agents/feature-status.md b/agents/feature-status.md index 2c6e09a..9b77768 100644 --- a/agents/feature-status.md +++ b/agents/feature-status.md @@ -1,7 +1,7 @@ # Статус агента: Функционал > Обновляется агентом `/project:feature` после каждой задачи. -**Последнее обновление:** 2026-05-18 +**Последнее обновление:** 2026-05-18 (inbox ✅) --- @@ -27,7 +27,7 @@ |---------|---------|--------| | Мой статус менеджера | `#/me` или `#/status` | ❌ не реализован | | Экран мастера (замерщик/сборщик) | `#/master` | ✅ реализован 2026-05-18 | -| Входящие задачи менеджера | `#/inbox` | ❌ не реализован | +| Входящие задачи менеджера | `#/inbox` | ✅ реализован 2026-05-18 | | Отгрузки завода | — | ❌ блокер: Drive 404 | | Поступления склада | — | ❌ блокер: Drive 404 | diff --git a/tests/ui_smoke.js b/tests/ui_smoke.js index df4e2b6..4f3c063 100644 --- a/tests/ui_smoke.js +++ b/tests/ui_smoke.js @@ -228,7 +228,46 @@ async function run() { ? pass("Нет JS-ошибок на экране сборок") : fail("JS-ошибки на экране сборок", jsErrAssembly.slice(0, 2).join(" | ")); - // ── 7. Снимок экрана для отчёта ─────────────────────────────────────────── + // ── 7. Входящие задачи менеджера (#/inbox) ──────────────────────────────── + section("📥 Входящие менеджера (#/inbox)"); + await page.evaluate(() => { location.hash = "#/inbox"; }); + await page.waitForTimeout(3000); + const jsErrInbox = errors.flush(); + jsErrInbox.length === 0 + ? pass("Нет JS-ошибок на экране #/inbox") + : fail("JS-ошибки на экране #/inbox", jsErrInbox.slice(0, 2).join(" | ")); + + const inboxRendered = await page.evaluate(() => + document.querySelector(".podbor-header, .empty, .error, .assembly-card") !== null + ); + inboxRendered + ? pass("#/inbox отрендерился (заголовок или список)") + : fail("#/inbox не отрендерился — нет .podbor-header / .empty / .error"); + + const inboxTitle = await page.evaluate(() => + document.querySelector(".podbor-title")?.textContent?.trim() || "" + ); + inboxTitle === "Входящие" + ? pass("Заголовок «Входящие» корректен") + : fail("Неверный заголовок #/inbox", `получили: "${inboxTitle}"`); + + // ── 8. Профиль (#/me) ───────────────────────────────────────────────────── + section("👤 Профиль (#/me)"); + await page.evaluate(() => { location.hash = "#/me"; }); + await page.waitForTimeout(3000); + const jsErrMe = errors.flush(); + jsErrMe.length === 0 + ? pass("Нет JS-ошибок на экране #/me") + : fail("JS-ошибки на экране #/me", jsErrMe.slice(0, 2).join(" | ")); + + const meRendered = await page.evaluate(() => + document.querySelector(".podbor-header, .error") !== null + ); + meRendered + ? pass("#/me отрендерился") + : fail("#/me не отрендерился — нет .podbor-header"); + + // ── 9. Снимок экрана для отчёта ─────────────────────────────────────────── await page.evaluate(() => { location.hash = "#/clients"; }); await page.waitForTimeout(2000); await page.screenshot({ path: "tests/ui_last_run.png", fullPage: false });