test: repara flake nocturn miez-noapte RO + 2 teste stale landing/login

test_web_status::test_granita_miez_noapte_local_ro: ancoreaza boundary pe RO-now
(00:30 RO local, mereu ziua UTC precedenta, DST-aware) in loc de today_utc. Bug
vechi: boundary pe today_utc pica in fereastra de dupa miezul noptii RO cand
date('now','localtime') e deja ziua urmatoare. Fereastra de esec de ~3h -> race
sub-secunda la exact miezul noptii.

test_web_responsive::test_login_branded_nu_schelet: loginul a fost simplificat la
o coloana (commit 'simplifica login'); nu mai cerem .login-aside. Guard pastrat pe
.login-shell + titlu ROA AUTOPASS + POST /login + CSRF. Comentariile stale '2 coloane'
din login.html aliniate la realitate (o coloana).

test_web_responsive::test_landing_limita_60: terminologia landing prestații->trimiteri
(rework ff9d0f4); asertie pe '60 de trimiteri' (limita Gratuit), scoase asertiile pe
formularile vechi 'prestații'/'prezentări'.

Suita: 1458 passed, 1 deselected (live), 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-07-03 12:25:01 +00:00
parent cccd032ae4
commit 96973f60f3
3 changed files with 26 additions and 26 deletions

View File

@@ -1,10 +1,8 @@
{% extends "base.html" %}
{% block title %}Autentificare — ROA AUTOPASS{% endblock %}
{% block content %}
{# US-010 (PRD 5.16): /login — layout 2 coloane branduit.
Stanga: logo + tagline + puncte de incredere.
Dreapta: formular de autentificare (neschimbat: CSRF, POST /login, link signup).
Pe mobil (<640px): se stivuiesc, partea dreapta (formular) iese prima. #}
{# /login — card de autentificare branduit, o singura coloana (simplificat din layout-ul
2-coloane US-010 PRD 5.16). Formular: CSRF, POST /login, link signup. #}
<div class="login-2col" style="max-width:860px; margin:32px auto;">
{# Antet minimal deja randat in base.html (fara RAR dot, fara burger, fara account_name) #}
<div class="login-shell">
@@ -40,7 +38,7 @@
</div>
<style>
/* US-010 PRD 5.16: layout /login profesional 2 coloane. */
/* /login: card de autentificare profesional, o singura coloana. */
.login-shell {
display:grid; grid-template-columns:1fr;
border:1px solid var(--line); border-radius:16px; overflow:hidden;

View File

@@ -771,18 +771,17 @@ def test_header_arata_nume_service_logat(client):
def test_login_branded_nu_schelet(client):
"""US-010 (PRD 5.16): /login are layout 2-coloane branduit cu clasa .login-shell,
titlul 'ROA AUTOPASS', si formular cu POST /login (CSRF intact)."""
"""/login e branduit (card .login-shell, titlu 'ROA AUTOPASS') cu formular POST /login
(CSRF intact), NU schelet gol. Loginul a fost simplificat la o coloana (commit
'simplifica login') — nu mai cerem coloana de brand .login-aside."""
resp = client.get("/login")
assert resp.status_code == 200
html = resp.text
assert "login-shell" in html, \
"Clasa .login-shell lipseste din /login (US-010 PRD 5.16) — layout 2-coloane nenimplementat"
assert "login-aside" in html, \
"Clasa .login-aside lipseste — coloana stanga de brand lipseste (US-010)"
"Clasa .login-shell lipseste din /login — cardul de login branduit lipseste"
assert "ROA AUTOPASS" in html, \
"Titlul 'ROA AUTOPASS' lipseste din /login (US-010 PRD 5.16)"
"Titlul 'ROA AUTOPASS' lipseste din /login"
# Formular intact: POST /login cu csrf_token
assert 'action="/login"' in html, "Actiunea formularului /login s-a schimbat — CSRF route invalida"
assert 'name="csrf_token"' in html, "csrf_token lipseste din formular — securitate compromisa"
@@ -804,21 +803,17 @@ def _citeste_landing() -> str:
def test_landing_limita_60():
"""5.17 T7 (US-007): limita planului Gratuit este 60 de prestatii/luna in landing,
nu 100. Verifica meta description, announce bar, hero badge, cardul Gratuit si
CTA-ul final."""
"""5.17 T7 (US-007): limita planului Gratuit este 60/luna in landing, nu 100.
Terminologia landing-ului a trecut de la 'prestații' la 'trimiteri' (rework landing
ff9d0f4): copy-ul de limita e acum '60 de trimiteri/lună' (hero + cardul Gratuit)."""
html = _citeste_landing()
assert "100 de prestații" not in html, \
"'100 de prestații' inca prezent in landing — limita trebuie sa fie 60 (5.17 T7)"
assert "100 prestații" not in html, \
"'100 prestații' inca prezent in landing — limita trebuie sa fie 60 (5.17 T7)"
assert "60 de prestații" in html, \
"'60 de prestații' lipseste din landing — verifica meta, announce bar, cardul Gratuit (5.17 T7)"
assert "60 prestații" in html, \
"'60 prestații' lipseste din hero badge in landing (5.17 T7)"
assert "60 de prezentări" in html, \
"'60 de prezentări' lipseste din CTA-ul final al landing-ului (5.17 T7)"
assert "100 de trimiteri/lună" not in html, \
"'100 de trimiteri/lună' prezent — limita planului Gratuit trebuie sa fie 60 (5.17 T7)"
assert "60 de trimiteri" in html, \
"'60 de trimiteri' lipseste din landing — verifica hero badge si cardul Gratuit (5.17 T7)"
def test_landing_trial_pro_nu_premium():

View File

@@ -379,10 +379,17 @@ def test_granita_miez_noapte_local_ro(monkeypatch, request):
# Initializeaza schema (init_db o face idempotent)
init_db()
# Ieri la 22:00 UTC = azi 00:00 (iarna) / 01:00 (vara) Romania -> 'azi' in ambele.
today_utc = datetime.now(timezone.utc).date()
yesterday_utc = today_utc - timedelta(days=1)
boundary_updated_at = f"{yesterday_utc} 22:00:00"
# Construim un timestamp care, stocat ca UTC, cade pe ziua PRECEDENTA in UTC dar pe
# ACEEASI zi RO ca 'now'. 00:30 RO local e mereu ziua UTC precedenta (UTC+2 iarna /
# UTC+3 vara -> 22:30 / 21:30 UTC), DST-aware. Ancorat pe RO-now (nu pe data UTC),
# deci robust la orice ora de rulare. Bug vechi: boundary ancorat pe today_utc pica
# in fereastra de dupa miezul noptii RO, cand date('now','localtime') e deja ziua
# urmatoare fata de today_utc -> sent_today=0 fals.
from zoneinfo import ZoneInfo
now_ro = datetime.now(ZoneInfo("Europe/Bucharest"))
ro_devreme = now_ro.replace(hour=0, minute=30, second=0, microsecond=0)
boundary_updated_at = ro_devreme.astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
conn = get_connection()
try: