refactor: comentarii strict functionale, fara referinte PRD/stories

Curatare globala a comentariilor si docstring-urilor (app, tools, teste,
scripturi): eliminate referintele la PRD-uri, US-xxx, task-uri istorice si
review-uri; pastrata doar informatia functionala, formulata scurt. Regula
adaugata in CLAUDE.md (sectiunea Stil). Fara modificari de cod sau comportament.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-07-06 13:48:38 +00:00
parent 86408887e5
commit 44f261e269
226 changed files with 1313 additions and 1760 deletions

View File

@@ -1,11 +1,11 @@
"""Teste PRD 5.9 US-006: fundatie responsive — viewport, header/nav colapsabil,
"""Teste fundatie responsive — viewport, header/nav colapsabil,
modal full-screen pe mobil, breakpoint-uri consistente.
Verificam markup-ul + CSS server-side randat (TestClient): prezenta meta viewport,
existenta unei reguli `@media (max-width:767px)` care trece modalul pe full-screen
(`.modal-dialog`) cu buton `x` >=44px, si structura de nav colapsabil (meniul de cont
hamburger + tinte touch >=44px). Verificarile vizuale efective (375px, fara scroll
orizontal) sunt deferate la VERIFY (gstack browser).
hamburger + tinte touch >=44px). Verificarile vizuale efective (scroll orizontal etc.)
raman la verificare manuala in browser.
"""
from __future__ import annotations
@@ -68,7 +68,7 @@ def _login(client, email: str, password: str = "parolasecreta10") -> None:
def _bloc_mobil_principal(html: str) -> str:
"""Felie din CSS de la sentinel-ul blocului mobil principal pana la `</style>`."""
i = html.find("SENTINEL-TESTE-MOBIL")
assert i != -1, "Lipseste SENTINEL-TESTE-MOBIL in base.html (vezi PRD 5.13 Wave 0)"
assert i != -1, "Lipseste SENTINEL-TESTE-MOBIL in base.html"
j = html.find("</style>", i)
return html[i:(j if j != -1 else len(html))]
@@ -143,7 +143,7 @@ def test_nav_colapsabil_sub_breakpoint(client):
# ============================================================
# PRD 5.9 US-007: responsive paginile de continut
# Responsive paginile de continut
# (Mapari, Cont, Nomenclator, Integrare, Jurnal, Admin)
# ============================================================
@@ -173,7 +173,7 @@ def _seed_event(account_id, tip="test", mesaj="eveniment de test"):
def test_tabele_continut_au_clasa_responsive(client):
"""R12 politica per-tabel:
"""Politica per-tabel:
- Mapari (actionabil) = CARD per rand: clasa proprie `.tabel-card` + `data-eticheta` pe `<td>`-uri.
- Jurnal / Nomenclator (dense read-only) = `.tablewrap` (scroll orizontal CONTAINED),
FARA `.tabel-card`.
@@ -231,14 +231,14 @@ def test_formulare_full_width_mobil(client):
def test_carduri_trimiteri_5_8_supravietuiesc(client):
"""Regresie R12: scoparea `.tabel-card` (US-007) NU trebuie sa atinga blocul
`.tabel-trimiteri @media(max-width:767px)` din 5.8 — cardurile de trimiteri raman."""
"""Regresie: scoparea `.tabel-card` nu trebuie sa atinga blocul
`.tabel-trimiteri @media(max-width:767px)` — cardurile de trimiteri raman."""
_create_account_user("r58@test.com")
_login(client, "r58@test.com")
html = client.get("/?tab=acasa").text
mobil = html[html.find("@media (max-width:767px)"):]
# Cardurile de trimiteri 5.8 (clasa proprie, separata de `.tabel-card`).
# Cardurile de trimiteri (clasa proprie, separata de `.tabel-card`).
assert ".tabel-trimiteri thead { display:none; }" in mobil
assert ".tabel-trimiteri td::before" in mobil
# Cele doua mecanisme coexista, scopate distinct.
@@ -246,15 +246,15 @@ def test_carduri_trimiteri_5_8_supravietuiesc(client):
# ============================================================
# PRD 5.9 US-008: responsive Acasa (upload, status, filtre) + login/signup
# Responsive Acasa (upload, status, filtre) + login/signup
# ============================================================
def test_acasa_fara_scroll_orizontal_mobil(client):
"""US-008: pe Acasa sub 767px zona de upload, bara de status si bara de filtre
"""Pe Acasa sub 767px zona de upload, bara de status si bara de filtre
stiveaza pe O coloana, cu inputuri/butoane full-width >=44px. Verificam ancorele
de scope (id-uri) + regulile CSS mobil din base.html (toate sub `@media (max-width:767px)`),
fara sa atingem cardurile de trimiteri 5.8 (verificate separat)."""
fara sa atingem cardurile de trimiteri (verificate separat)."""
acct = _create_account_user("a8@test.com")
_insert_submission(acct) # sectiunea Trimiteri (filtre + wrap) apare doar cu randuri
_login(client, "a8@test.com")
@@ -282,7 +282,7 @@ def test_acasa_fara_scroll_orizontal_mobil(client):
def test_login_signup_full_width_mobil(client):
"""US-008: login.html si signup.html randeaza un card centrat (`.auth-card`, margin auto)
"""login.html si signup.html randeaza un card centrat (`.auth-card`, margin auto)
care nu depaseste latimea pe mobil (max-width:100% sub 767px), cu inputuri full-width.
Rutele `/login` si `/signup` sunt publice (fara autentificare)."""
for ruta in ("/login", "/signup"):
@@ -298,12 +298,12 @@ def test_login_signup_full_width_mobil(client):
# ============================================================
# PRD 5.12 US-008: responsive tableta+mobil + header fara suprapuneri
# Responsive tableta+mobil + header fara suprapuneri
# ============================================================
def test_header_are_breakpoint_tableta(client):
"""US-008 RED: exista reguli @media intre 768 si 1024 pentru header.
"""Exista reguli @media intre 768 si 1024 pentru header.
Desktop: grid 3-coloane + min-height:92px. Pe tableta (768-1024px) nu exista
inca breakpoint — logo+titlu+badge+tema+versiune+hamburger se inghesuie si se suprapun."""
_create_account_user("bt@test.com")
@@ -322,7 +322,7 @@ def test_header_are_breakpoint_tableta(client):
def test_header_elemente_nu_au_min_height_fix_pe_mobil(client):
"""US-008 RED: header-ul nu forteaza min-height:92px pe tableta si mobil.
"""Header-ul nu forteaza min-height:92px pe tableta si mobil.
Regula de baza (desktop) are min-height:92px; pe tableta (768-1024px)
lipseste resetarea -> inghesuire garantata la ~820px."""
_create_account_user("mh@test.com")
@@ -345,9 +345,8 @@ def test_header_elemente_nu_au_min_height_fix_pe_mobil(client):
def test_modal_full_screen_pe_mobil(client):
"""US-008 D#13 verificare: regula full-screen mobil pentru modal exista in base.html
(@media max-width:767px) si se aplica modalului global prin clasa modal-overlay.
VERIFICA prezenta regulii, NU re-implementa."""
"""Regula full-screen mobil pentru modal exista in base.html
(@media max-width:767px) si se aplica modalului global prin clasa modal-overlay."""
_create_account_user("mfp@test.com")
_login(client, "mfp@test.com")
html = client.get("/?tab=acasa").text
@@ -362,18 +361,18 @@ def test_modal_full_screen_pe_mobil(client):
# Modalul global din HTML foloseste clasa modal-overlay -> prinde regula CSS.
assert 'class="modal-overlay"' in html, \
"Modalul global nu are class=modal-overlay (nu prinde regula full-screen)"
# Target swap pentru editare preview (US-006) exista in DOM.
# Target swap pentru editare preview exista in DOM.
assert 'id="detaliu-modal-body"' in html, \
"Target #detaliu-modal-body lipseste din base.html"
# ============================================================
# PRD 5.13: guard-uri responsive card mobil + sistem actiuni + stepper compact
# Guard-uri responsive card mobil + sistem actiuni + stepper compact
# ============================================================
def test_card_mobil_fara_break_vertical_120px(client):
"""P0: blocul mobil principal NU mai forteaza min-width:120px pe eticheta
"""Blocul mobil principal NU mai forteaza min-width:120px pe eticheta
(cauza break-ului vertical caracter-cu-caracter). Eticheta stivuita deasupra
valorii: td::before cu display:block. Checkbox + # ascunse pe card."""
_create_account_user("card120@test.com")
@@ -457,7 +456,7 @@ def test_act_btn_aria_label_invariant(client):
def test_stepper_compact_clase(client):
"""Stepper compact (5.13): clasele stepper-track, stepper-collapsed,
"""Stepper compact: clasele stepper-track, stepper-collapsed,
stepper-progress prezente; textul 'Pasul N din 4' randat; vechile clase
stepper-pas-- absente; comutarea la <1024px declarata in CSS."""
_create_account_user("stepper@test.com")
@@ -482,7 +481,7 @@ def test_stepper_compact_clase(client):
def test_liste_actionabile_o_coloana_pana_1024(client):
"""Guard scope (decizie 5.13): listele actionabile raman O COLOANA
"""Guard scope: listele actionabile raman O COLOANA
pana la 1024px — fara grila 2/rand (repeat(2)). Blocul tableta 768-1024px
cardifica (thead ascuns, card per rand)."""
_create_account_user("ocoloana@test.com")
@@ -503,7 +502,7 @@ def test_liste_actionabile_o_coloana_pana_1024(client):
# ============================================================
# PRD 5.15 US-002: componente de design slim (CSS, fara consumatori)
# Componente de design slim (CSS, fara consumatori)
# ============================================================
@@ -513,9 +512,9 @@ def _bloc_componente_slim(html: str) -> str:
"""
sentinel = "SENTINEL-COMPONENTE-SLIM"
i = html.find(sentinel)
assert i != -1, "Lipseste SENTINEL-COMPONENTE-SLIM in base.html (US-002 PRD 5.15)"
assert i != -1, "Lipseste SENTINEL-COMPONENTE-SLIM in base.html"
i2 = html.find(sentinel, i + len(sentinel))
assert i2 != -1, "Lipseste al doilea SENTINEL-COMPONENTE-SLIM (sfarsit bloc US-002)"
assert i2 != -1, "Lipseste al doilea SENTINEL-COMPONENTE-SLIM (sfarsit bloc)"
return html[i : i2 + len(sentinel)]
@@ -618,19 +617,19 @@ def test_fara_hex_in_componente_noi(client):
bloc,
)
assert not hex_in_props, (
f"Hex literal gasit in componente noi US-002 — folositi var(--token): {hex_in_props}"
f"Hex literal gasit in componente noi — folositi var(--token): {hex_in_props}"
)
# ============================================================
# PRD 5.15 US-004: lista slim trimiteri — layout consistent desktop + <=1024px
# Lista slim trimiteri — layout consistent desktop + <=1024px
# ============================================================
def test_lista_slim_randeaza_si_are_tinta_touch(client):
"""US-004: lista slim randeaza cu .trimitere-slim; tinta touch >=44px
"""Lista slim randeaza cu .trimitere-slim; tinta touch >=44px
e garantata de CSS (min-height:44px din blocul SENTINEL-COMPONENTE-SLIM).
Cardurile .tabel-trimiteri din 5.8 nu regreseaza: regula tabel-trimiteri
Cardurile .tabel-trimiteri nu regreseaza: regula tabel-trimiteri
thead display:none (card pe mobil) exista in continuare in base.html.
"""
acct = _create_account_user("slim_resp@test.com")
@@ -643,7 +642,7 @@ def test_lista_slim_randeaza_si_are_tinta_touch(client):
# -> testam ca clasele CSS sunt prezente in base.html, gata sa fie consumate)
bloc = _bloc_componente_slim(html)
assert "lista-trimiteri-slim" in bloc, \
".lista-trimiteri-slim lipseste din blocul CSS slim (US-002 prerequisite)"
".lista-trimiteri-slim lipseste din blocul CSS slim (prerechizita)"
assert "trimitere-slim" in bloc, \
".trimitere-slim lipseste din blocul CSS slim"
assert "min-height:44px" in bloc, \
@@ -656,7 +655,7 @@ def test_lista_slim_randeaza_si_are_tinta_touch(client):
def test_lista_slim_layout_tableta_1024(client):
"""US-004: blocul tableta (768-1024px) nu rupe lista slim.
"""Blocul tableta (768-1024px) nu rupe lista slim.
.trimitere-slim e o lista stivuita (o coloana), fara grila 2/rand.
Regula tableta cardifica listele existente (thead display:none) fara a elimina slim.
"""
@@ -664,7 +663,7 @@ def test_lista_slim_layout_tableta_1024(client):
_login(client, "slim_tab@test.com")
html = client.get("/?tab=acasa").text
# Blocul tableta exista (PRD 5.12/5.13 — pastrat)
# Blocul tableta exista (pastrat)
assert "@media (min-width:768px) and (max-width:1024px)" in html, \
"Lipseste blocul @media tableta — regresia 5.12"
@@ -682,12 +681,12 @@ def test_lista_slim_layout_tableta_1024(client):
# ============================================================
# PRD 5.15 US-008: regresie componente slim + fara overflow orizontal
# Regresie componente slim + fara overflow orizontal
# ============================================================
def test_slim_list_fara_overflow_orizontal_css(client):
"""US-008: lista slim (.trimitere-slim) nu forteaza overflow orizontal pe 390px / 1280px.
"""Lista slim (.trimitere-slim) nu forteaza overflow orizontal pe 390px / 1280px.
Verifica la nivel CSS / markup (nu browser): display:flex garanteaza adaptarea
naturala la latimea containerului; niciun min-width fix mai mare de 390px pe elementele
@@ -716,7 +715,7 @@ def test_slim_list_fara_overflow_orizontal_css(client):
def test_strip_sanatate_fara_hex_hardcodat():
"""US-008: _status.html (strip sanatate D6 + contoare-contor) nu contine hex literal de culoare.
"""_status.html (strip sanatate + contoare-contor) nu contine hex literal de culoare.
Garanteaza ca strip-ul adapteaza la temele luminoase (hartie/light) si intunecate (grafit/dark)
exclusiv prin var(--token), NU prin valori hex hardcodate care ar ramane aceleasi
@@ -741,39 +740,38 @@ def test_strip_sanatate_fara_hex_hardcodat():
# ============================================================
# PRD 5.16 US-010: Titlu ROA AUTOPASS + account_name in antet
# Titlu ROA AUTOPASS + account_name in antet
# ============================================================
def test_titlu_romfast_autopass(client):
"""US-010 (PRD 5.16): titlul din antet si tag-ul <title> sunt 'ROA AUTOPASS',
"""Titlul din antet si tag-ul <title> sunt 'ROA AUTOPASS',
nu 'Gateway RAR AUTOPASS'."""
_create_account_user("titlutest@test.com", name="Service Titlu")
_login(client, "titlutest@test.com")
html = client.get("/?tab=acasa").text
assert "ROA AUTOPASS" in html, \
"Titlul 'ROA AUTOPASS' lipseste din antet (US-010 PRD 5.16)"
"Titlul 'ROA AUTOPASS' lipseste din antet"
assert "Gateway RAR AUTOPASS" not in html, \
"Titlul vechi 'Gateway RAR AUTOPASS' inca prezent — inlocuieste cu 'ROA AUTOPASS'"
def test_header_arata_nume_service_logat(client):
"""US-010 (PRD 5.16): cand utilizatorul e logat, antetul afiseaza numele service-ului
"""Cand utilizatorul e logat, antetul afiseaza numele service-ului
(accounts.name) ca sub-titlu cu clasa .h-sub."""
_create_account_user("numeservice@test.com", name="Service Auto Cluj SRL")
_login(client, "numeservice@test.com")
html = client.get("/?tab=acasa").text
assert "Service Auto Cluj SRL" in html, \
"Numele service-ului nu apare in antet (US-010 PRD 5.16) — verifica .h-sub"
"Numele service-ului nu apare in antet — verifica .h-sub"
assert "h-sub" in html, \
"Clasa .h-sub lipseste din antet (US-010 PRD 5.16) — sub-titlul account_name lipseste"
"Clasa .h-sub lipseste din antet — sub-titlul account_name lipseste"
def test_login_branded_nu_schelet(client):
"""/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."""
(CSRF intact), NU schelet gol. Login simplificat la o coloana, fara .login-aside."""
resp = client.get("/login")
assert resp.status_code == 200
html = resp.text
@@ -789,8 +787,7 @@ def test_login_branded_nu_schelet(client):
# ============================================================
# PRD 5.17 T7 (US-007): landing copy — limita 60 + trial Pro
# PRD 5.16 US-012: Autentificare → /login
# Landing copy — limita plan Gratuit + trial Pro + link autentificare
# ============================================================
def _citeste_landing() -> str:
@@ -803,9 +800,9 @@ def _citeste_landing() -> str:
def test_landing_limita_60():
"""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)."""
"""Limita planului Gratuit este 60/luna in landing, nu 100.
Terminologia landing-ului e 'trimiteri' (nu 'prestații'): copy-ul de limita
e '60 de trimiteri/lună' (hero + cardul Gratuit)."""
html = _citeste_landing()
assert "100 de prestații" not in html, \
@@ -817,7 +814,7 @@ def test_landing_limita_60():
def test_landing_trial_pro_nu_premium():
"""5.17 T7 (US-007): trial-ul de 30 de zile este pe Pro, NU pe Premium.
"""Trial-ul de 30 de zile este pe Pro, NU pe Premium.
Verifica sectiunea PRICING (subtitle) si sectiunea AUTH (lista beneficii)."""
html = _citeste_landing()
@@ -828,28 +825,28 @@ def test_landing_trial_pro_nu_premium():
def test_landing_autentificare_link_login():
"""5.16 US-012: butonul 'Autentificare' din header-ul landing este un link <a href='/login'>
"""Butonul 'Autentificare' din header-ul landing este un link <a href='/login'>
cu clasa auth-login-link, NU un buton care deschide modalul de login.
CSS-ul responsive (.lp-hactions) trebuie sa foloseasca noul selector, nu cel vechi."""
CSS-ul responsive (.lp-hactions) foloseste acest selector."""
html = _citeste_landing()
# Link real catre /login in header (cu clasa de identificare)
assert 'href="/login"' in html, \
"href='/login' lipseste din landing — 'Autentificare' din header trebuie sa fie link (5.16 US-012)"
"href='/login' lipseste din landing — 'Autentificare' din header trebuie sa fie link"
assert "auth-login-link" in html, \
"Clasa auth-login-link lipseste — header 'Autentificare' nu a fost convertit la <a> (5.16 US-012)"
"Clasa auth-login-link lipseste — header 'Autentificare' nu a fost convertit la <a>"
# CSS-ul responsive ascunde linkul pe <430px prin noul selector (nu cel vechi cu atribute)
assert "a.auth-login-link" in html, \
"Selectorul CSS 'a.auth-login-link' lipseste — CSS responsive neactualizat (5.16 US-012)"
"Selectorul CSS 'a.auth-login-link' lipseste — CSS responsive neactualizat"
# Selectorul CSS vechi cu [data-act="auth"][data-tab="login"] nu mai exista in CSS
assert '[data-act="auth"][data-tab="login"]' not in html, \
"Selectorul CSS vechi [data-act='auth'][data-tab='login'] inca prezent (5.16 US-012)"
"Selectorul CSS vechi [data-act='auth'][data-tab='login'] inca prezent"
def test_contoare_desktop_ascunse_pe_mobil_fara_inline_display():
"""US-002 (PRD 5.16): pe <=560px se vad DOAR contoarele compacte, nu si cele 5 carduri mari.
"""Pe <=560px se vad DOAR contoarele compacte, nu si cele 5 carduri mari.
Regresie prinsa la VERIFY E2E (390px): un inline `style="display:flex"` pe `.contoare-desktop`
Regresie: un inline `style="display:flex"` pe `.contoare-desktop`
batea regula `@media (max-width:560px) { .contoare-desktop { display:none } }` (inline > stylesheet)
-> contoare DUPLICATE pe mobil. Lock: `display:flex` sta in CSS (nu inline pe element), iar media
query-ul ascunde cardurile mari pe mobil.