MEDIAWEB-6278 — шапка без JS-определения десктопа: визуальная проверка

Ветка: bugfix/MEDIAWEB-6278, коммит 4ee1ac1b51. Сравнение: прод kion.ru (старый код, до фикса) против локального SSR ветки (npm run start:web, прод-бэкенды), гость.

Методика

Ограничение куки на проде: ключи, которые код читает как поле напрямую (например, vitrina_filters_available в HeaderComponent), нельзя выключить — строка 'false' truthy, а булев false отбрасывается проверкой configOverrides[key] ? ... в remote-config.service.ts. Ключи через isKeyEnabled(...) и сравнения === '1' выключаются нормально (подтверждено кейсом 3: фильтры на проде остались, остальное выключилось).

Текущие ключи прода (без оверрайда, вычленено curl-ом)

Ключ Значение на проде
moneta_header_top_button 'false'
acq_promocode_button_header '1'
acq_promocode_button_text 'Промокод'
moneta_special_offer_enabled 'true' (гостю недоступно)
vitrina_filters_available 'true'
vitrina_kids_header_button 'true'

Совпадает с кейсом 1 — сравнение до/после фикса прямое.


Кейс 1 — промокод + фильтры + «Дети» (КИОН Топ выключен)

Ключи (локально — @IsForceOverride(); на проде — текущие значения, кука не нужна):

Ключ Значение
moneta_header_top_button false
acq_promocode_button_header '1'
acq_promocode_button_text 'Промокод'
vitrina_filters_available true
vitrina_kids_header_button true

Ожидание на ветке: десктоп — меню, фильтры, лупа, «Промокод» с текстом, «Дети», «Войти»; мобила — подарок-иконка, фильтры, лупа («Дети»/«Войти» скрыты). Пары JS on/off идентичны. На проде js-off-мобила показывает десктопную раскладку — баг из тикета.

Прод (до фикса) Ветка (после фикса)
JS on, мобила prod1-js-on-mobile v1-js-on-mobile
JS on, десктоп prod1-js-on-desktop v1-js-on-desktop
JS off, мобила ❌ баг: prod1-js-off-mobile v1-js-off-mobile
JS off, десктоп prod1-js-off-desktop v1-js-off-desktop

Кейс 2 — КИОН Топ включён (вытесняет промокод и «Дети»)

Ключи — как в кейсе 1, кроме moneta_header_top_button = true. На проде: cookie {"moneta_header_top_button":"true"} (проверено curl-ом: значение уходит в remote-config-state, в SSR-разметке появляется web-kion-top-button).

Ожидание: КИОН Топ вместо промокода и «Детей»; на десктопе web-логотип, на мобиле app-логотип (подмена медиазапросом, без JS). На проде js-off-мобила — снова десктопная раскладка.

Прод (до фикса) Ветка (после фикса)
JS on, мобила prod2-js-on-mobile v2-js-on-mobile
JS on, десктоп prod2-js-on-desktop v2-js-on-desktop
JS off, мобила ❌ баг: prod2-js-off-mobile v2-js-off-mobile
JS off, десктоп prod2-js-off-desktop v2-js-off-desktop

Кейс 3 — все кнопки выключены

Локально (@IsForceOverride()): moneta_header_top_button=false, acq_promocode_button_header='0', vitrina_filters_available=false, vitrina_kids_header_button=false. На проде: cookie {"moneta_header_top_button":"false","acq_promocode_button_header":"0","vitrina_kids_header_button":"false","vitrina_filters_available":"false"}фильтры на проде остались (ограничение куки для прямых булевых полей, см. методику), поэтому колонки различаются наличием кнопки фильтров: на ветке её нет, на проде есть.

Ожидание на ветке: десктоп — меню, лупа, «Войти»; мобила — только лупа.

Прод (до фикса, фильтры не выключаемы кукой) Ветка (после фикса)
JS on, мобила prod3-js-on-mobile v3-js-on-mobile
JS on, десктоп prod3-js-on-desktop v3-js-on-desktop
JS off, мобила ❌ баг: prod3-js-off-mobile v3-js-off-mobile
JS off, десктоп prod3-js-off-desktop v3-js-off-desktop

Выводы

  1. Баг из тикета закрыт: на ветке без JavaScript (= состояние до/без гидрации) мобильная ширина показывает мобильную шапку. На проде (старый код) во всех трёх кейсах js-off-мобила показывает десктопную раскладку, js-on — мобильную после перестройки DOM при гидрации.
  2. На ветке разметка с включённым и выключенным JS идентична во всех кейсах — адаптив полностью на CSS, перескока шапки при гидрации больше нет. Единственное отличие JS-on — cookie-баннер, он ожидаемо JS-ный.
  3. Приоритет ключей (КИОН Топ > спецоффер > промокод) и скрытие «Войти»/«Дети»/текста промокода на мобиле работают одинаково в обоих режимах, включая подмену web/app-логотипа КИОН Топ медиазапросом.
  4. SSR-HTML ветки содержит и десктопное меню (на проде отсутствует) — плюс к SEO.

Не покрыто визуальным прогоном