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:
@@ -1,10 +1,8 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Autentificare — ROA AUTOPASS{% endblock %}
|
{% block title %}Autentificare — ROA AUTOPASS{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{# US-010 (PRD 5.16): /login — layout 2 coloane branduit.
|
{# /login — card de autentificare branduit, o singura coloana (simplificat din layout-ul
|
||||||
Stanga: logo + tagline + puncte de incredere.
|
2-coloane US-010 PRD 5.16). Formular: CSRF, POST /login, link signup. #}
|
||||||
Dreapta: formular de autentificare (neschimbat: CSRF, POST /login, link signup).
|
|
||||||
Pe mobil (<640px): se stivuiesc, partea dreapta (formular) iese prima. #}
|
|
||||||
<div class="login-2col" style="max-width:860px; margin:32px auto;">
|
<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) #}
|
{# Antet minimal deja randat in base.html (fara RAR dot, fara burger, fara account_name) #}
|
||||||
<div class="login-shell">
|
<div class="login-shell">
|
||||||
@@ -40,7 +38,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* US-010 PRD 5.16: layout /login profesional 2 coloane. */
|
/* /login: card de autentificare profesional, o singura coloana. */
|
||||||
.login-shell {
|
.login-shell {
|
||||||
display:grid; grid-template-columns:1fr;
|
display:grid; grid-template-columns:1fr;
|
||||||
border:1px solid var(--line); border-radius:16px; overflow:hidden;
|
border:1px solid var(--line); border-radius:16px; overflow:hidden;
|
||||||
|
|||||||
@@ -771,18 +771,17 @@ def test_header_arata_nume_service_logat(client):
|
|||||||
|
|
||||||
|
|
||||||
def test_login_branded_nu_schelet(client):
|
def test_login_branded_nu_schelet(client):
|
||||||
"""US-010 (PRD 5.16): /login are layout 2-coloane branduit cu clasa .login-shell,
|
"""/login e branduit (card .login-shell, titlu 'ROA AUTOPASS') cu formular POST /login
|
||||||
titlul 'ROA AUTOPASS', si formular cu POST /login (CSRF intact)."""
|
(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")
|
resp = client.get("/login")
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
html = resp.text
|
html = resp.text
|
||||||
|
|
||||||
assert "login-shell" in html, \
|
assert "login-shell" in html, \
|
||||||
"Clasa .login-shell lipseste din /login (US-010 PRD 5.16) — layout 2-coloane nenimplementat"
|
"Clasa .login-shell lipseste din /login — cardul de login branduit lipseste"
|
||||||
assert "login-aside" in html, \
|
|
||||||
"Clasa .login-aside lipseste — coloana stanga de brand lipseste (US-010)"
|
|
||||||
assert "ROA AUTOPASS" in html, \
|
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
|
# Formular intact: POST /login cu csrf_token
|
||||||
assert 'action="/login"' in html, "Actiunea formularului /login s-a schimbat — CSRF route invalida"
|
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"
|
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():
|
def test_landing_limita_60():
|
||||||
"""5.17 T7 (US-007): limita planului Gratuit este 60 de prestatii/luna in landing,
|
"""5.17 T7 (US-007): limita planului Gratuit este 60/luna in landing, nu 100.
|
||||||
nu 100. Verifica meta description, announce bar, hero badge, cardul Gratuit si
|
Terminologia landing-ului a trecut de la 'prestații' la 'trimiteri' (rework landing
|
||||||
CTA-ul final."""
|
ff9d0f4): copy-ul de limita e acum '60 de trimiteri/lună' (hero + cardul Gratuit)."""
|
||||||
html = _citeste_landing()
|
html = _citeste_landing()
|
||||||
|
|
||||||
assert "100 de prestații" not in html, \
|
assert "100 de prestații" not in html, \
|
||||||
"'100 de prestații' inca prezent in landing — limita trebuie sa fie 60 (5.17 T7)"
|
"'100 de prestații' inca prezent in landing — limita trebuie sa fie 60 (5.17 T7)"
|
||||||
assert "100 prestații" not in html, \
|
assert "100 de trimiteri/lună" not in html, \
|
||||||
"'100 prestații' inca prezent in landing — limita trebuie sa fie 60 (5.17 T7)"
|
"'100 de trimiteri/lună' prezent — limita planului Gratuit trebuie sa fie 60 (5.17 T7)"
|
||||||
assert "60 de prestații" in html, \
|
assert "60 de trimiteri" in html, \
|
||||||
"'60 de prestații' lipseste din landing — verifica meta, announce bar, cardul Gratuit (5.17 T7)"
|
"'60 de trimiteri' lipseste din landing — verifica hero badge si 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)"
|
|
||||||
|
|
||||||
|
|
||||||
def test_landing_trial_pro_nu_premium():
|
def test_landing_trial_pro_nu_premium():
|
||||||
|
|||||||
@@ -379,10 +379,17 @@ def test_granita_miez_noapte_local_ro(monkeypatch, request):
|
|||||||
# Initializeaza schema (init_db o face idempotent)
|
# Initializeaza schema (init_db o face idempotent)
|
||||||
init_db()
|
init_db()
|
||||||
|
|
||||||
# Ieri la 22:00 UTC = azi 00:00 (iarna) / 01:00 (vara) Romania -> 'azi' in ambele.
|
# Construim un timestamp care, stocat ca UTC, cade pe ziua PRECEDENTA in UTC dar pe
|
||||||
today_utc = datetime.now(timezone.utc).date()
|
# ACEEASI zi RO ca 'now'. 00:30 RO local e mereu ziua UTC precedenta (UTC+2 iarna /
|
||||||
yesterday_utc = today_utc - timedelta(days=1)
|
# UTC+3 vara -> 22:30 / 21:30 UTC), DST-aware. Ancorat pe RO-now (nu pe data UTC),
|
||||||
boundary_updated_at = f"{yesterday_utc} 22:00:00"
|
# 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()
|
conn = get_connection()
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user