From 8488f94f607207904ec4daf522789680a30c0176 Mon Sep 17 00:00:00 2001 From: gnezim Date: Sat, 25 Apr 2026 02:58:22 +0300 Subject: [PATCH] e2e: adopt console-gate fixture across all specs --- tests/e2e/breadcrumbs-parity.spec.ts | 5 ++-- tests/e2e/flights-map.spec.ts | 3 ++- tests/e2e/navigation.spec.ts | 8 +++--- tests/e2e/online-board.spec.ts | 25 +++++++++++++------ tests/e2e/onlineboard-day-tabs.spec.ts | 5 ++-- tests/e2e/onlineboard-row-actions.spec.ts | 3 ++- tests/e2e/onlineboard-time-filter.spec.ts | 4 ++- tests/e2e/p1-urls-nav.spec.ts | 19 +++++++++++--- .../schedule-calendar-operating-days.spec.ts | 3 ++- tests/e2e/schedule-date-picker.spec.ts | 6 +++-- .../schedule-details-connecting-legs.spec.ts | 3 ++- .../schedule-details-meal-sub-icons.spec.ts | 3 ++- .../schedule-details-mini-list-scoped.spec.ts | 4 +-- .../schedule-details-summary-header.spec.ts | 4 +-- tests/e2e/schedule.spec.ts | 5 ++-- tests/e2e/search-history-label.spec.ts | 6 ++--- 16 files changed, 70 insertions(+), 36 deletions(-) diff --git a/tests/e2e/breadcrumbs-parity.spec.ts b/tests/e2e/breadcrumbs-parity.spec.ts index 9c06c0f6..7b3040eb 100644 --- a/tests/e2e/breadcrumbs-parity.spec.ts +++ b/tests/e2e/breadcrumbs-parity.spec.ts @@ -1,4 +1,5 @@ -import { test, expect, type Page } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; +import type { Page } from "@playwright/test"; // Angular's breadcrumb trail (audited live on flights.test.aeroflot.ru): // /schedule → [Главная] @@ -143,7 +144,7 @@ const cases: { name: string; url: string; expected: { text: string; href: string test.describe("Breadcrumb parity with Angular", () => { for (const c of cases) { - test(c.name, async ({ page }) => { + test(c.name, async ({ page, consoleMessages }) => { await page.goto(c.url); await expect(page.getByTestId("breadcrumbs")).toBeVisible({ timeout: 15000 }); // Poll on the full items array — the leaf depends on dictionaries diff --git a/tests/e2e/flights-map.spec.ts b/tests/e2e/flights-map.spec.ts index a8fb2b28..675f9c63 100644 --- a/tests/e2e/flights-map.spec.ts +++ b/tests/e2e/flights-map.spec.ts @@ -1,8 +1,9 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; test.describe("Flights Map", () => { test("/ru/flights-map renders or shows feature-flag disabled message", async ({ page, + consoleMessages, }) => { await page.goto("/ru/flights-map"); await page.waitForLoadState("domcontentloaded"); diff --git a/tests/e2e/navigation.spec.ts b/tests/e2e/navigation.spec.ts index a4fdb4dc..0be052ed 100644 --- a/tests/e2e/navigation.spec.ts +++ b/tests/e2e/navigation.spec.ts @@ -1,8 +1,9 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; test.describe("Cross-feature navigation", () => { test("locale switching: /ru/onlineboard -> /en/onlineboard shows English content", async ({ page, + consoleMessages, }) => { // Start on Russian online board await page.goto("/ru/onlineboard"); @@ -23,7 +24,7 @@ test.describe("Cross-feature navigation", () => { expect(page.url()).toMatch(/\/en(-[a-z]+)?\/onlineboard/); }); - test("error page: /error/404 renders 404 content", async ({ page }) => { + test("error page: /error/404 renders 404 content", async ({ page, consoleMessages }) => { // Navigate to a working page first, then client-side navigate to the error // page. Direct URL navigation to /error/404 renders blank because the // error route is outside [lang]/layout.tsx and SSR produces empty output. @@ -42,6 +43,7 @@ test.describe("Cross-feature navigation", () => { test("error page: /error/500 renders server error content", async ({ page, + consoleMessages, }) => { // Navigate to a working page first, then client-side navigate to the error // page (same reason as the 404 test above). @@ -57,7 +59,7 @@ test.describe("Cross-feature navigation", () => { await expect(page.locator(".error-page__code")).toHaveText("500", { timeout: 10000 }); }); - test("unknown route: /ru/nonexistent does not crash", async ({ page }) => { + test("unknown route: /ru/nonexistent does not crash", async ({ page, consoleMessages }) => { const response = await page.goto("/ru/nonexistent"); await page.waitForLoadState("domcontentloaded"); diff --git a/tests/e2e/online-board.spec.ts b/tests/e2e/online-board.spec.ts index acb30671..74cd1616 100644 --- a/tests/e2e/online-board.spec.ts +++ b/tests/e2e/online-board.spec.ts @@ -1,8 +1,9 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; test.describe("Online Board", () => { test("/ru/onlineboard renders the start page with search form", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -18,6 +19,7 @@ test.describe("Online Board", () => { test("filter has accordion with Flight Number and Route tabs", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -36,7 +38,7 @@ test.describe("Online Board", () => { ).toBeVisible(); }); - test("clicking Flight Number tab switches to flight form", async ({ page }) => { + test("clicking Flight Number tab switches to flight form", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -63,6 +65,7 @@ test.describe("Online Board", () => { test("search form has route inputs, date picker, and submit button", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -86,7 +89,7 @@ test.describe("Online Board", () => { await expect(page.locator('[data-testid="search-submit"]')).toBeVisible(); }); - test("flight number clear button clears the input", async ({ page }) => { + test("flight number clear button clears the input", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -107,7 +110,7 @@ test.describe("Online Board", () => { await expect(page.locator('[data-testid="flight-number-input"]')).toHaveValue(""); }); - test("route tab has swap button and time selector", async ({ page }) => { + test("route tab has swap button and time selector", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -125,7 +128,7 @@ test.describe("Online Board", () => { await expect(page.locator('[data-testid="time-selector"]')).toBeVisible(); }); - test("breadcrumbs are visible on start page", async ({ page }) => { + test("breadcrumbs are visible on start page", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -137,7 +140,7 @@ test.describe("Online Board", () => { }); // FeedbackButton component exists but is not wired into OnlineBoardStartPage yet - test.fixme("feedback button is visible", async ({ page }) => { + test.fixme("feedback button is visible", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -150,6 +153,7 @@ test.describe("Online Board", () => { test("/ru/onlineboard/flight/SU0100-20260415 renders the flight search page", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/flight/SU0100-20260415"); await page.waitForLoadState("domcontentloaded"); @@ -163,6 +167,7 @@ test.describe("Online Board", () => { test("/ru/onlineboard/departure/SVO-20260415 renders the departure search page", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/departure/SVO-20260415"); await page.waitForLoadState("domcontentloaded"); @@ -173,6 +178,7 @@ test.describe("Online Board", () => { test("/ru/onlineboard/route/SVO-LED-20260415 renders the route search page", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/route/SVO-LED-20260415"); await page.waitForLoadState("domcontentloaded"); @@ -183,6 +189,7 @@ test.describe("Online Board", () => { test("flight details page at /ru/onlineboard/SU0100-20260415 renders", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/SU0100-20260415"); await page.waitForLoadState("domcontentloaded"); @@ -193,7 +200,7 @@ test.describe("Online Board", () => { // Requires live API (city autocomplete + calendar days). // Skipped when WAF blocks flights.test.aeroflot.ru. - test.skip("route search via form navigates to correct URL", async ({ page }) => { + test.skip("route search via form navigates to correct URL", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("networkidle"); @@ -229,6 +236,7 @@ test.describe("Online Board", () => { test("route search results page hydrates filter from URL params", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/route/MOW-KUF-20260416"); await page.waitForLoadState("networkidle"); @@ -249,6 +257,7 @@ test.describe("Online Board", () => { // Skipped when WAF blocks flights.test.aeroflot.ru. test.skip("route search results page shows calendar strip with day numbers", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard/route/MOW-KUF-20260416"); await page.waitForLoadState("networkidle"); @@ -269,7 +278,7 @@ test.describe("Online Board", () => { // TODO: SeoHead does not currently populate on this route. // Re-enable once the SeoHead component writes to document.title or uses <Helmet>. - test.fixme("page title is set on /ru/onlineboard", async ({ page }) => { + test.fixme("page title is set on /ru/onlineboard", async ({ page, consoleMessages }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); diff --git a/tests/e2e/onlineboard-day-tabs.spec.ts b/tests/e2e/onlineboard-day-tabs.spec.ts index 887c8013..8e0e025d 100644 --- a/tests/e2e/onlineboard-day-tabs.spec.ts +++ b/tests/e2e/onlineboard-day-tabs.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // TIRREDESIGN-8: Onlineboard day-tabs must remain unblocked across the // full -1/+14 window, and must surface out-of-range dates greyed-out @@ -12,6 +12,7 @@ import { test, expect } from "@playwright/test"; test.describe("TIRREDESIGN-8 — Onlineboard day-tabs", () => { test("strip exposes the full -1/+14 range without blocking enabled tabs", async ({ page, + consoleMessages, }) => { await page.goto("/ru-ru/onlineboard/route/MOW-LED-20260423"); await expect(page.getByTestId("day-tabs")).toBeVisible({ timeout: 15000 }); @@ -58,7 +59,7 @@ test.describe("TIRREDESIGN-8 — Onlineboard day-tabs", () => { await expect(page.getByTestId("day-tabs-next")).toBeDisabled(); }); - test("clicking enabled tabs does not disable siblings", async ({ page }) => { + test("clicking enabled tabs does not disable siblings", async ({ page, consoleMessages }) => { await page.goto("/ru-ru/onlineboard/route/MOW-LED-20260423"); await expect(page.getByTestId("day-tabs")).toBeVisible({ timeout: 15000 }); diff --git a/tests/e2e/onlineboard-row-actions.spec.ts b/tests/e2e/onlineboard-row-actions.spec.ts index e7b2e60e..2ffc6739 100644 --- a/tests/e2e/onlineboard-row-actions.spec.ts +++ b/tests/e2e/onlineboard-row-actions.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // TIRREDESIGN-10 — Onlineboard list rows must surface "Купить билет" // and "Онлайн регистрация" inside the expanded body when the per-flight @@ -15,6 +15,7 @@ import { test, expect } from "@playwright/test"; test("Onlineboard expanded row shows Купить билет + Онлайн регистрация when applicable", async ({ page, + consoleMessages, }) => { // Today in the harness clock. const today = new Date().toISOString().slice(0, 10).replace(/-/g, ""); diff --git a/tests/e2e/onlineboard-time-filter.spec.ts b/tests/e2e/onlineboard-time-filter.spec.ts index c142943c..e2a82a0c 100644 --- a/tests/e2e/onlineboard-time-filter.spec.ts +++ b/tests/e2e/onlineboard-time-filter.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // TIRREDESIGN-11 — "Время рейса" slider must filter results. // @@ -13,6 +13,7 @@ const ROUTE_URL = "/ru-ru/onlineboard/route/MOW-LED-20260423"; test.describe("Onlineboard time-range filter (TIRREDESIGN-11)", () => { test("URL with time-range suffix filters the list (URL → state path)", async ({ page, + consoleMessages, }) => { // Baseline: no filter await page.goto(ROUTE_URL); @@ -38,6 +39,7 @@ test.describe("Onlineboard time-range filter (TIRREDESIGN-11)", () => { test("dragging the slider + clicking Найти persists time range to URL", async ({ page, + consoleMessages, }) => { await page.goto(ROUTE_URL); await expect(page.locator(".flight-card").first()).toBeVisible({ diff --git a/tests/e2e/p1-urls-nav.spec.ts b/tests/e2e/p1-urls-nav.spec.ts index 783a2b23..0d749142 100644 --- a/tests/e2e/p1-urls-nav.spec.ts +++ b/tests/e2e/p1-urls-nav.spec.ts @@ -9,7 +9,7 @@ * §4.1.1 ¶12 — Flight-Map filter is independent (no cross-section carry-over) */ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // --------------------------------------------------------------------------- // Helpers @@ -34,6 +34,7 @@ function daysFromNow(n: number): Date { test.describe("P1 — 4.1.2-R11: out-of-range dates redirect to start page", () => { test("Online-Board flight URL with date +30 days (beyond +14 window) redirects to /onlineboard", async ({ page, + consoleMessages, }) => { const far = fmt(daysFromNow(30)); await page.goto(`/ru/onlineboard/flight/SU1234-${far}`); @@ -48,6 +49,7 @@ test.describe("P1 — 4.1.2-R11: out-of-range dates redirect to start page", () test("Online-Board route URL with date -5 days (before -1 window) redirects to /onlineboard", async ({ page, + consoleMessages, }) => { const past = fmt(daysFromNow(-5)); await page.goto(`/ru/onlineboard/route/MOW-LED-${past}`); @@ -60,6 +62,7 @@ test.describe("P1 — 4.1.2-R11: out-of-range dates redirect to start page", () test("Schedule route URL with date +400 days (beyond +330 window) redirects to /schedule", async ({ page, + consoleMessages, }) => { const farFrom = fmt(daysFromNow(400)); const farTo = fmt(daysFromNow(407)); @@ -79,6 +82,7 @@ test.describe("P1 — 4.1.2-R11: out-of-range dates redirect to start page", () test.describe("P1 — 4.1.2-R10: unknown URL shows 404", () => { test("/ru/nonexistent does not crash — shows error or empty body", async ({ page, + consoleMessages, }) => { // Matches the existing pattern in navigation.spec.ts: the app handles // unknown routes gracefully (404 page or redirect, not a JS crash). @@ -89,6 +93,7 @@ test.describe("P1 — 4.1.2-R10: unknown URL shows 404", () => { test("/error/404 renders 404 content (client-side navigation)", async ({ page, + consoleMessages, }) => { // Direct URL navigate to the error route produces blank SSR output; // client-side assign is the established pattern (see navigation.spec.ts). @@ -113,6 +118,7 @@ test.describe("P1 — 4.1.2-R10: unknown URL shows 404", () => { test.describe("P1 — Table 7: breadcrumbs on start pages (Home only)", () => { test("Online-Board start page has exactly 1 breadcrumb (Home)", async ({ page, + consoleMessages, }) => { await page.goto("/ru/onlineboard"); await page.waitForLoadState("domcontentloaded"); @@ -126,6 +132,7 @@ test.describe("P1 — Table 7: breadcrumbs on start pages (Home only)", () => { test("Schedule start page has exactly 1 breadcrumb (Home)", async ({ page, + consoleMessages, }) => { await page.goto("/ru/schedule"); await page.waitForLoadState("domcontentloaded"); @@ -139,6 +146,7 @@ test.describe("P1 — Table 7: breadcrumbs on start pages (Home only)", () => { test("Flight-Map start page has exactly 1 breadcrumb (Home)", async ({ page, + consoleMessages, }) => { await page.goto("/ru/flights-map"); await page.waitForLoadState("domcontentloaded"); @@ -163,6 +171,7 @@ test.describe("P1 — Table 7: breadcrumbs on start pages (Home only)", () => { test.describe("P1 — Table 7: breadcrumbs on search pages", () => { test("Online-Board route search page has 2 breadcrumbs (Home + Section)", async ({ page, + consoleMessages, }) => { // Use an in-window date so the guard lets the page through. const today = fmt(new Date()); @@ -178,6 +187,7 @@ test.describe("P1 — Table 7: breadcrumbs on search pages", () => { test("Online-Board flight search page has 2 breadcrumbs (Home + Section)", async ({ page, + consoleMessages, }) => { const today = fmt(new Date()); await page.goto(`/ru/onlineboard/flight/SU0100-${today}`); @@ -190,6 +200,7 @@ test.describe("P1 — Table 7: breadcrumbs on search pages", () => { test("Schedule route search page has 3 breadcrumbs (Home + Section + Route heading)", async ({ page, + consoleMessages, }) => { const today = fmt(new Date()); const weekAhead = fmt(daysFromNow(7)); @@ -216,7 +227,7 @@ test.describe("P1 — Table 10: cross-section filter carry-over Board ↔ Schedu test.fixme( "navigating from Online-Board results to Schedule preserves departure/arrival cities", - async ({ page }) => { + async ({ page, consoleMessages }) => { // 1. Search on Online-Board (route tab) → MOW-LED. // 2. Navigate to /ru/schedule. // 3. Schedule start page filter should be pre-filled with MOW/LED via @@ -228,7 +239,7 @@ test.describe("P1 — Table 10: cross-section filter carry-over Board ↔ Schedu test.fixme( "navigating from Schedule results to Online-Board preserves departure/arrival cities", - async ({ page }) => { + async ({ page, consoleMessages }) => { // 1. Search on Schedule (route tab) → MOW-LED. // 2. Navigate to /ru/onlineboard. // 3. Online-Board start page filter should be pre-filled with MOW/LED. @@ -250,7 +261,7 @@ test.describe("P1 — §4.1.1 ¶12: Flight-Map filter is independent (no carry-o test.fixme( "Online-Board search does not affect Flight-Map departure city", - async ({ page }) => { + async ({ page, consoleMessages }) => { // 1. Search on Online-Board → MOW-LED. // 2. Navigate to /ru/flights-map. // 3. Flight-Map departure input should NOT show MOW (store is separate). diff --git a/tests/e2e/schedule-calendar-operating-days.spec.ts b/tests/e2e/schedule-calendar-operating-days.spec.ts index e606e67f..33912e71 100644 --- a/tests/e2e/schedule-calendar-operating-days.spec.ts +++ b/tests/e2e/schedule-calendar-operating-days.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // TIRREDESIGN-12 — when both schedule cities are filled, the date-picker // must grey out the days the route does NOT operate. The fix in @@ -10,6 +10,7 @@ import { test, expect } from "@playwright/test"; test("Schedule calendar greys out non-operating days for the route", async ({ page, + consoleMessages, }) => { await page.goto("/ru-ru/schedule/route/MOW-MMK-20260427-20260503"); await expect(page.locator(".day-grouped-flight-list").first()).toBeVisible({ diff --git a/tests/e2e/schedule-date-picker.spec.ts b/tests/e2e/schedule-date-picker.spec.ts index 1123e3b7..e2134788 100644 --- a/tests/e2e/schedule-date-picker.spec.ts +++ b/tests/e2e/schedule-date-picker.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // Schedule date picker — Angular parity (TZ §4.1.9.4): // • Single click on any day commits the **whole Mon-Sun week** that @@ -15,6 +15,7 @@ import { test, expect } from "@playwright/test"; test.describe("Schedule date-range picker (week-snap)", () => { test("single click snaps to Mon-Sun, closes panel, fills input", async ({ page, + consoleMessages, }) => { await page.goto("/ru-ru/schedule"); await expect(page.getByTestId("date-range-input")).toBeVisible({ @@ -39,6 +40,7 @@ test.describe("Schedule date-range picker (week-snap)", () => { test("clicking a next-month bleed-in day (3 May) snaps to 4-10 May", async ({ page, + consoleMessages, }) => { await page.goto("/ru-ru/schedule"); await expect(page.getByTestId("date-range-input")).toBeVisible({ @@ -60,7 +62,7 @@ test.describe("Schedule date-range picker (week-snap)", () => { ); }); - test("input renders as range placeholder when empty", async ({ page }) => { + test("input renders as range placeholder when empty", async ({ page, consoleMessages }) => { await page.goto("/ru-ru/schedule"); const input = page.locator("#schedule-date-from"); await expect(input).toHaveAttribute( diff --git a/tests/e2e/schedule-details-connecting-legs.spec.ts b/tests/e2e/schedule-details-connecting-legs.spec.ts index 78d86bce..4b469821 100644 --- a/tests/e2e/schedule-details-connecting-legs.spec.ts +++ b/tests/e2e/schedule-details-connecting-legs.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // When the user clicks a connecting itinerary in the Schedule list, the // resulting flight-details URL must include EVERY leg, not just the @@ -10,6 +10,7 @@ import { test, expect } from "@playwright/test"; test("connecting itinerary navigates to a multi-segment URL with both legs rendered", async ({ page, + consoleMessages, }) => { await page.goto("/ru-ru/schedule/route/MOW-MMK-20260427-20260503"); await expect(page.locator(".flight-card").first()).toBeVisible({ diff --git a/tests/e2e/schedule-details-meal-sub-icons.spec.ts b/tests/e2e/schedule-details-meal-sub-icons.spec.ts index f8b88374..10e8ca95 100644 --- a/tests/e2e/schedule-details-meal-sub-icons.spec.ts +++ b/tests/e2e/schedule-details-meal-sub-icons.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // Schedule Details "Питание на борту" must render meal-class sub-icons // (Эконом класс / Комфорт класс / Бизнес класс) ONLY when the API @@ -16,6 +16,7 @@ const URL = test("Питание sub-icons appear only for legs whose API meal[] contains them", async ({ page, + consoleMessages, }) => { await page.goto(URL); diff --git a/tests/e2e/schedule-details-mini-list-scoped.spec.ts b/tests/e2e/schedule-details-mini-list-scoped.spec.ts index 4ea1232f..ead34716 100644 --- a/tests/e2e/schedule-details-mini-list-scoped.spec.ts +++ b/tests/e2e/schedule-details-mini-list-scoped.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // On the schedule details page the left mini-list renders a SINGLE // card for the currently-open flight — matching Angular's @@ -14,7 +14,7 @@ import { test, expect } from "@playwright/test"; const URL = "/ru-ru/schedule/VKO/SU6188-20260426/LED/SU6341-20260427/MMK?request=schedule-route-MOW-MMK-20260427-20260503"; -test("mini-list — one combined card for the open SU 6188+SU 6341 itinerary", async ({ page }) => { +test("mini-list — one combined card for the open SU 6188+SU 6341 itinerary", async ({ page, consoleMessages }) => { await page.goto(URL); const miniList = page.locator(".schedule-mini-list"); diff --git a/tests/e2e/schedule-details-summary-header.spec.ts b/tests/e2e/schedule-details-summary-header.spec.ts index 4db86634..685cef92 100644 --- a/tests/e2e/schedule-details-summary-header.spec.ts +++ b/tests/e2e/schedule-details-summary-header.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // Schedule details page must render Angular's `<schedule-details-header>` // summary block between the day-tabs strip and the per-leg cards: @@ -15,7 +15,7 @@ import { test, expect } from "@playwright/test"; const URL = "/ru-ru/schedule/VKO/SU6188-20260426/LED/SU6341-20260427/MMK?request=schedule-route-MOW-MMK-20260427-20260503"; -test("summary header — both badges + last-update + formatted full-route timeline", async ({ page }) => { +test("summary header — both badges + last-update + formatted full-route timeline", async ({ page, consoleMessages }) => { await page.goto(URL); const summary = page.locator(".schedule-details__summary"); diff --git a/tests/e2e/schedule.spec.ts b/tests/e2e/schedule.spec.ts index 0db33690..d52f0e37 100644 --- a/tests/e2e/schedule.spec.ts +++ b/tests/e2e/schedule.spec.ts @@ -1,7 +1,7 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; test.describe("Schedule", () => { - test("/ru/schedule renders the start page", async ({ page }) => { + test("/ru/schedule renders the start page", async ({ page, consoleMessages }) => { await page.goto("/ru/schedule"); await page.waitForLoadState("domcontentloaded"); @@ -18,6 +18,7 @@ test.describe("Schedule", () => { test("/ru/schedule/route/SVO-LED-20260415 renders the search page", async ({ page, + consoleMessages, }) => { await page.goto("/ru/schedule/route/SVO-LED-20260415"); await page.waitForLoadState("domcontentloaded"); diff --git a/tests/e2e/search-history-label.spec.ts b/tests/e2e/search-history-label.spec.ts index cdd6c2e0..9aa29477 100644 --- a/tests/e2e/search-history-label.spec.ts +++ b/tests/e2e/search-history-label.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test"; +import { test, expect } from "./fixtures/console-gate"; // TIRREDESIGN-5: the search-history sidebar header must read // "Ранее искали" (not "Вы искали"). The block exists on Schedule @@ -30,7 +30,7 @@ async function seedHistory(page: import("@playwright/test").Page) { } test.describe("Search-history label is 'Ранее искали' (TIRREDESIGN-5)", () => { - test("Schedule start page", async ({ page }) => { + test("Schedule start page", async ({ page, consoleMessages }) => { await seedHistory(page); await page.goto("/ru-ru/schedule"); const block = page.getByTestId("search-history"); @@ -39,7 +39,7 @@ test.describe("Search-history label is 'Ранее искали' (TIRREDESIGN-5) await expect(block).not.toContainText("Вы искали"); }); - test("Online-Board start page", async ({ page }) => { + test("Online-Board start page", async ({ page, consoleMessages }) => { await seedHistory(page); await page.goto("/ru-ru/onlineboard"); const block = page.getByTestId("search-history");