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,12 +1,9 @@
"""Teste US-003 (PRD 5.15): strip sanatate mereu-vizibil + carduri-contor pe dashboard.
"""Teste strip sanatate mereu-vizibil + carduri-contor pe dashboard.
D6 (strip sanatate): linie colorata DEASUPRA contoarelor — verde "declaratiile curg" /
Strip sanatate: linie colorata DEASUPRA contoarelor — verde "declaratiile curg" /
rosu "Blocat: worker oprit / RAR inaccesibil", cu glifa accesibila (✓/✗).
D4 (contoare): In coada / Trimise (all-time + luna/azi) / De corectat.
E7 (timezone): azi/luna bucketate in timp local RO (UTC+3), nu UTC.
Actualizat in US-003 (PRD 5.15): bara veche cu bife individuale worker/RAR
inlocuita de strip unificat de sanatate + carduri-contor.
Contoare: In coada / Trimise (all-time + luna/azi) / De corectat.
Timezone: azi/luna bucketate in timp local RO, nu UTC.
"""
from __future__ import annotations
@@ -77,11 +74,11 @@ def client(monkeypatch):
# ---------------------------------------------------------------------------
# Teste existente — actualizate pentru US-003 D6 (strip unificat in loc de bife individuale)
# Strip unificat de sanatate (in loc de bife individuale)
# ---------------------------------------------------------------------------
def test_status_are_bife_verzi_cand_totul_ok(client):
"""US-003 PRD 5.16: worker viu + RAR login recent -> strip-sanatate in DOM dar ASCUNS (hidden).
"""Worker viu + RAR login recent -> strip-sanatate in DOM dar ASCUNS (hidden).
Banda rosie apare DOAR cand BLOCAT. Starea OK e indicata de dot-ul verde din antet (base.html).
Elementul id=strip-sanatate ramane in DOM pentru compatibilitate (nu dispare complet).
"""
@@ -94,7 +91,7 @@ def test_status_are_bife_verzi_cand_totul_ok(client):
resp = client.get("/_fragments/status")
assert resp.status_code == 200
html = resp.text
# US-003: elementul strip-sanatate e prezent in DOM dar ascuns cand totul e ok
# Elementul strip-sanatate e prezent in DOM dar ascuns cand totul e ok
assert 'id="strip-sanatate"' in html, f"id=strip-sanatate lipseste complet din fragment. HTML: {html[:600]}"
# Cand OK, banda nu trebuie sa afiseze ✗ (eroare) — ✓ nu mai apare (banda e ascunsa)
assert "&#10007;" not in html, \
@@ -112,7 +109,7 @@ def test_status_are_bife_rosii_cand_worker_oprit(client):
assert resp.status_code == 200
html = resp.text
assert "&#10007;" in html, f"Lipseste glifa ✗ cand worker oprit. HTML: {html[:600]}"
# US-003 D6: mesaj explicit (nu text vag "oprita")
# Mesaj explicit (nu text vag "oprita")
assert "blocat" in html.lower(), f"Cuvantul 'blocat' lipseste la worker oprit. HTML: {html[:600]}"
assert "nu pleaca" in html.lower(), f"Avertismentul 'nu pleaca' lipseste. HTML: {html[:600]}"
@@ -133,7 +130,7 @@ def test_status_data_formatata_romaneste(client):
def test_status_fara_fonturi_minuscule(client):
"""Niciun text din bara nu mai foloseste font-size literal sub 13px (US-001 AC)."""
"""Niciun text din bara nu mai foloseste font-size literal sub 13px."""
_create_account_user("bifefont@test.com")
_login(client, "bifefont@test.com", "parolasecreta10")
@@ -146,11 +143,11 @@ def test_status_fara_fonturi_minuscule(client):
# ---------------------------------------------------------------------------
# Teste NOI pentru US-003 (RED inainte de implementare)
# Strip de sanatate mereu vizibil
# ---------------------------------------------------------------------------
def test_strip_sanatate_mereu_vizibil(client):
"""D6: strip de sanatate e prezent in fragment, indiferent de starea worker/RAR."""
"""Strip de sanatate e prezent in fragment, indiferent de starea worker/RAR."""
_create_account_user("stripviz@test.com")
_login(client, "stripviz@test.com", "parolasecreta10")
@@ -167,7 +164,7 @@ def test_strip_sanatate_mereu_vizibil(client):
def test_strip_rosu_worker_oprit(client):
"""D6: worker oprit → strip rosu cu glifа ✗ + text 'Blocat: worker oprit — declaratiile NU pleaca'."""
"""Worker oprit → strip rosu cu glifа ✗ + text 'Blocat: worker oprit — declaratiile NU pleaca'."""
_create_account_user("stroprosu@test.com")
_login(client, "stroprosu@test.com", "parolasecreta10")
@@ -185,7 +182,7 @@ def test_strip_rosu_worker_oprit(client):
def test_trei_contoare_card(client):
"""US-002 PRD 5.16: fragment status contine 5 carduri .contor-card separate:
"""Fragment status contine 5 carduri .contor-card separate:
Total / Luna asta / Azi / In coada / De corectat."""
_create_account_user("treicont@test.com")
_login(client, "treicont@test.com", "parolasecreta10")
@@ -196,19 +193,19 @@ def test_trei_contoare_card(client):
count = html.count("contor-card")
assert count >= 5, (
f"Trebuie minim 5 elemente contor-card (US-002 PRD 5.16: Total/Luna/Azi/Coada/Corectat), "
f"Trebuie minim 5 elemente contor-card (Total/Luna/Azi/Coada/Corectat), "
f"gasit: {count}. HTML: {html[:800]}"
)
# Etichete asteptate (US-002 PRD 5.16: 5 carduri separate)
assert "Total" in html, "Eticheta 'Total' lipseste din contoare (US-002 PRD 5.16)."
assert "Luna asta" in html, "Eticheta 'Luna asta' lipseste din contoare (US-002 PRD 5.16)."
assert "Azi" in html, "Eticheta 'Azi' lipseste din contoare (US-002 PRD 5.16)."
# Etichete asteptate (5 carduri separate)
assert "Total" in html, "Eticheta 'Total' lipseste din contoare."
assert "Luna asta" in html, "Eticheta 'Luna asta' lipseste din contoare."
assert "Azi" in html, "Eticheta 'Azi' lipseste din contoare."
assert "In coada" in html, "Eticheta 'In coada' lipseste din contoare."
assert "De corectat" in html, "Eticheta 'De corectat' lipseste din contoare."
def test_trimise_all_time_luna_azi(client):
"""D4: cardul Trimise afiseaza all-time ca cifra principala + sub-linie 'luna N · azi N'."""
"""Cardul Trimise afiseaza all-time ca cifra principala + sub-linie 'luna N · azi N'."""
acct_id, _ = _create_account_user("trimisetime@test.com")
_login(client, "trimisetime@test.com", "parolasecreta10")
@@ -239,7 +236,7 @@ def test_trimise_all_time_luna_azi(client):
def test_fara_bara_veche(client):
"""US-003: contoarele vechi inline ('In asteptare:' / 'Declarate la RAR:') nu mai apar."""
"""Contoarele vechi inline ('In asteptare:' / 'Declarate la RAR:') nu mai apar."""
_create_account_user("faraveche@test.com")
_login(client, "faraveche@test.com", "parolasecreta10")
@@ -247,7 +244,7 @@ def test_fara_bara_veche(client):
assert resp.status_code == 200
html = resp.text
# Stilul vechi: etichete inline cu colon (bara de la PRD 3.5)
# Stilul vechi: etichete inline cu colon
assert "In asteptare:" not in html, (
f"Contorul vechi 'In asteptare:' inca prezent. HTML: {html[:600]}"
)
@@ -257,7 +254,7 @@ def test_fara_bara_veche(client):
def test_banda_apare_doar_cand_blocat(client):
"""US-003 (PRD 5.16): banda rosie completa apare NUMAI cand BLOCAT.
"""Banda rosie completa apare NUMAI cand BLOCAT.
Cand totul e ok, strip-sanatate are atributul 'hidden' (ascuns, nu disparut).
Cand worker e oprit, strip-sanatate NU are 'hidden' (e vizibil, rosu).
"""
@@ -284,7 +281,7 @@ def test_banda_apare_doar_cand_blocat(client):
def test_rar_dot_in_antet_ok(client):
"""US-003 (PRD 5.16): cand logat si sanatate_ok, antetul contine chip-ul RAR cu clasa rar-ok.
"""Cand logat si sanatate_ok, antetul contine chip-ul RAR cu clasa rar-ok.
Starea ok se vede din header (dot verde pulsant), nu din banda de stare (care e ascunsa).
"""
_create_account_user("rardot@test.com")
@@ -297,13 +294,13 @@ def test_rar_dot_in_antet_ok(client):
assert resp.status_code == 200
html = resp.text
# Chip RAR in antet (nu in banda de stare)
assert "rar-chip" in html, "Clasa rar-chip lipseste din HTML (dot RAR in antet, US-003)"
assert "rar-ok" in html, "Clasa rar-ok lipseste — dot verde cand sanatate ok (US-003)"
assert "rar-dot" in html, "Clasa rar-dot lipseste din chip (US-003)"
assert "rar-chip" in html, "Clasa rar-chip lipseste din HTML (dot RAR in antet)"
assert "rar-ok" in html, "Clasa rar-ok lipseste — dot verde cand sanatate ok"
assert "rar-dot" in html, "Clasa rar-dot lipseste din chip"
def test_rar_in_meniu_burger(client):
"""US-003/010 (PRD 5.16): meniul burger contine starea RAR ca prima intrare (RAR online / RAR indisponibil)."""
"""Meniul burger contine starea RAR ca prima intrare (RAR online / RAR indisponibil)."""
_create_account_user("rarmeniu@test.com")
_login(client, "rarmeniu@test.com", "parolasecreta10")
@@ -316,13 +313,13 @@ def test_rar_in_meniu_burger(client):
# Meniul burger (cont-menu) contine indicatorul RAR
assert "cont-menu" in html, "Meniu burger (cont-menu) lipseste din HTML"
assert "RAR online" in html or "RAR indisponibil" in html, \
"Starea RAR nu apare in meniu burger (US-003/010)"
"Starea RAR nu apare in meniu burger"
# Prima intrare e starea RAR — prezenta class menu-rar-line
assert "menu-rar-line" in html, "Clasa menu-rar-line lipseste din burger (US-003)"
assert "menu-rar-line" in html, "Clasa menu-rar-line lipseste din burger"
def test_anuleaza_are_data_modal_close(client):
"""US-007 (PRD 5.16): overlay-ul modal si butonul de inchidere au atributul data-modal-close."""
"""Overlay-ul modal si butonul de inchidere au atributul data-modal-close."""
# Butonul si overlay-ul trebuie sa aiba data-modal-close pentru ca handler-ul cu .closest() sa functioneze
# Verificam in baza template-ului base.html (modal e definit acolo, randat pe toate paginile)
# Testam pe dashboard dupa login (unde baza e incarcata)
@@ -332,12 +329,12 @@ def test_anuleaza_are_data_modal_close(client):
assert resp.status_code == 200
html = resp.text
assert "data-modal-close" in html, \
"data-modal-close lipseste din template — modalul nu se poate inchide (US-007)"
"data-modal-close lipseste din template — modalul nu se poate inchide"
def test_modal_close_pe_element_interior(client):
"""US-007 (PRD 5.16): handler-ul modal foloseste .closest('[data-modal-close]') nu
.hasAttribute directe — astfel click pe un element interior al backdrop-ului functioneaza."""
"""Handler-ul modal foloseste .closest('[data-modal-close]') nu .hasAttribute
direct — astfel click pe un element interior al backdrop-ului functioneaza."""
_create_account_user("modalclosest@test.com")
_login(client, "modalclosest@test.com", "parolasecreta10")
resp = client.get("/", follow_redirects=True)
@@ -345,7 +342,7 @@ def test_modal_close_pe_element_interior(client):
html = resp.text
# Verificam ca JS-ul foloseste closest, nu hasAttribute
assert "closest('[data-modal-close]')" in html, \
"Handler-ul modal foloseste hasAttribute in loc de closest (US-007) — click pe copil nu va inchide modalul"
"Handler-ul modal foloseste hasAttribute in loc de closest — click pe copil nu va inchide modalul"
def _set_tz_bucuresti(monkeypatch, request):
@@ -360,7 +357,7 @@ def _set_tz_bucuresti(monkeypatch, request):
def test_granita_miez_noapte_local_ro(monkeypatch, request):
"""E7: trimitere cu updated_at = ieri UTC 22:00 = azi Romania (UTC+2/+3) se numara 'azi'.
"""Trimitere cu updated_at = ieri UTC 22:00 = azi Romania (UTC+2/+3) se numara 'azi'.
Cu date(updated_at) simplu (UTC) ar aparea pe ziua precedenta — GRESIT.
Cu date(updated_at, 'localtime') + TZ=Europe/Bucharest apare pe ziua de azi RO — CORECT
@@ -418,8 +415,8 @@ def test_granita_miez_noapte_local_ro(monkeypatch, request):
def test_iarna_nu_bleed_in_ziua_urmatoare(monkeypatch, request):
"""Bug fix (code-review 5.15): iarna (UTC+2), o trimitere la 21:30 UTC = 23:30 RO AZI
NU trebuie sa cada pe ziua de MAINE.
"""Iarna (UTC+2), o trimitere la 21:30 UTC = 23:30 RO AZI NU trebuie sa cada
pe ziua de MAINE.
Vechiul offset fix '+3 hours' o impingea la 00:30 maine -> sent_today gresit.
'localtime' (DST-aware) o pastreaza corect pe azi. Testul fixeaza o data de iarna
@@ -467,7 +464,7 @@ def test_iarna_nu_bleed_in_ziua_urmatoare(monkeypatch, request):
# ===========================================================================
# US-006 (PRD 5.17) — Afisaj plan curent: trial / consum / warn / banner
# Afisaj plan curent: trial / consum / warn / banner
# ===========================================================================
def _set_trial_until(account_id: int, trial_until_str: str | None) -> None:
@@ -502,9 +499,9 @@ def _insert_submissions_sent(account_id: int, n: int) -> None:
def test_afisaj_plan_si_zile_trial(client):
"""US-006 + T-6 (5.16): cont in trial Pro -> linia de plan din meniul burger (pagina
completa) arata 'Plan: Pro · trial N zile ramase'. In starea normala (non-warn) plan_linie
NU mai e rand in corpul fragmentului status — traieste in badge antet + burger.
"""Cont in trial Pro -> linia de plan din meniul burger (pagina completa) arata
'Plan: Pro · trial N zile ramase'. In starea normala (non-warn) plan_linie NU mai
e rand in corpul fragmentului status — traieste in badge antet + burger.
Contul nou primeste trial_until=now+30z automat la creare.
"""
acct_id, _ = _create_account_user("trialzile@test.com")
@@ -525,8 +522,8 @@ def test_afisaj_plan_si_zile_trial(client):
def test_afisaj_consum_lunar(client):
"""US-006 + T-6 (5.16): cont free (fara trial) -> linia de plan din burger (pagina
completa) arata 'Gratuit · N/60 luna asta'. Consumul normal nu mai e rand in corp."""
"""Cont free (fara trial) -> linia de plan din burger (pagina completa) arata
'Gratuit · N/60 luna asta'. Consumul normal nu mai e rand in corp."""
acct_id, _ = _create_account_user("consumlun@test.com")
_login(client, "consumlun@test.com", "parolasecreta10")
@@ -546,7 +543,7 @@ def test_afisaj_consum_lunar(client):
def test_avertizare_aproape_de_limita(client):
"""US-006: >=80% din 60 -> avertizare cu text 'aproape de limita' + culoare warn."""
""">=80% din 60 -> avertizare cu text 'aproape de limita' + culoare warn."""
acct_id, _ = _create_account_user("aproapelim@test.com")
_login(client, "aproapelim@test.com", "parolasecreta10")
@@ -569,7 +566,7 @@ def test_avertizare_aproape_de_limita(client):
def test_limita_atinsa(client):
"""US-006: 60/60 -> text 'limita atinsa'."""
"""60/60 -> text 'limita atinsa'."""
acct_id, _ = _create_account_user("limitaatinsa@test.com")
_login(client, "limitaatinsa@test.com", "parolasecreta10")
@@ -586,7 +583,7 @@ def test_limita_atinsa(client):
def test_copy_pluralizare_zi_zile(client):
"""US-006: pluralizare RO corecta — 1 zi (nu '1 zile'), 18 zile (nu '18 zi')."""
"""Pluralizare RO corecta — 1 zi (nu '1 zile'), 18 zile (nu '18 zi')."""
acct_id, _ = _create_account_user("pluralzile@test.com")
_login(client, "pluralzile@test.com", "parolasecreta10")
@@ -594,7 +591,7 @@ def test_copy_pluralizare_zi_zile(client):
future_18 = (datetime.now(timezone.utc) + timedelta(days=18, hours=12)).strftime("%Y-%m-%d %H:%M:%S")
_set_trial_until(acct_id, future_18)
# T-6 (5.16): linia de plan (cu pluralizarea zilelor) traieste in burger pe pagina completa.
# Linia de plan (cu pluralizarea zilelor) traieste in burger pe pagina completa.
resp = client.get("/", follow_redirects=True)
assert resp.status_code == 200
html = resp.text
@@ -617,7 +614,7 @@ def test_copy_pluralizare_zi_zile(client):
def test_banner_one_time_trial_expirat(client):
"""US-006 T-DES-1: dupa expirarea trial-ului, banner 'Trial Pro expirat' apare in _status.html."""
"""Dupa expirarea trial-ului, banner 'Trial Pro expirat' apare in _status.html."""
acct_id, _ = _create_account_user("trialexp@test.com")
_login(client, "trialexp@test.com", "parolasecreta10")
@@ -642,7 +639,7 @@ def test_banner_one_time_trial_expirat(client):
def test_cont_arata_plan(client):
"""US-006: tab-ul Cont (/tab=cont) afiseaza planul curent si explicatia de upgrade."""
"""Tab-ul Cont (/tab=cont) afiseaza planul curent si explicatia de upgrade."""
acct_id, _ = _create_account_user("contplan@test.com")
_login(client, "contplan@test.com", "parolasecreta10")
@@ -662,7 +659,7 @@ def test_cont_arata_plan(client):
def test_plan_linie_in_burger(client):
"""US-006: meniul burger contine linia de plan (Plan: Gratuit / Pro · trial N zile)."""
"""Meniul burger contine linia de plan (Plan: Gratuit / Pro · trial N zile)."""
acct_id, _ = _create_account_user("burgerplan@test.com")
_login(client, "burgerplan@test.com", "parolasecreta10")
@@ -679,7 +676,7 @@ def test_plan_linie_in_burger(client):
def test_trial_pro_arata_zile_in_burger(client):
"""US-006: cont in trial -> burger arata 'Plan: Pro · trial N zile ramase'."""
"""Cont in trial -> burger arata 'Plan: Pro · trial N zile ramase'."""
acct_id, _ = _create_account_user("burgertrial@test.com")
_login(client, "burgertrial@test.com", "parolasecreta10")