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:
@@ -1,15 +1,13 @@
|
||||
"""Teste US-005 (PRD 5.15): obs editabil + concat operatie la import.
|
||||
"""obs editabil + concat operatie la import.
|
||||
|
||||
AC-uri:
|
||||
Verifica:
|
||||
- obs adaugat in bucla de campuri din post_corecteaza (routes.py) si in EDIT_FIELDS
|
||||
(import_router.py); corecteaza si editeaza preview accepta si persista obs.
|
||||
- obs optional (text liber, fara validare de continut, doar .strip()).
|
||||
- obs apare in prezentare_din_payload (payload_view.py).
|
||||
- obs EXCLUS din cheia de idempotenta (D8): editarea obs NU schimba cheia.
|
||||
- La import fara coloana obs: denumirea operatiei se COPIAZA in obs (D7).
|
||||
- Derive-on-empty idempotent: re-preview NU dubleaza obs (E3).
|
||||
|
||||
TDD: toate testele se scriu INAINTE de implementare (RED -> GREEN).
|
||||
- obs EXCLUS din cheia de idempotenta: editarea obs NU schimba cheia.
|
||||
- La import fara coloana obs: denumirea operatiei se COPIAZA in obs.
|
||||
- Derive-on-empty idempotent: re-preview NU dubleaza obs.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -188,10 +186,7 @@ def _preview(client, import_id: int) -> list[dict]:
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
def test_obs_editabil_persistat_corecteaza(client):
|
||||
"""AC: obs adaugat in bucla post_corecteaza -> persists in payload_json.
|
||||
|
||||
RED: 'obs' nu e inca in bucla de campuri din post_corecteaza (routes.py:1177).
|
||||
"""
|
||||
"""obs adaugat in bucla post_corecteaza -> persists in payload_json."""
|
||||
acct = _create_account_user("obs.corecteaza@test.com")
|
||||
_login(client, "obs.corecteaza@test.com")
|
||||
|
||||
@@ -227,10 +222,7 @@ def test_obs_editabil_persistat_corecteaza(client):
|
||||
|
||||
|
||||
def test_obs_persistat_preview_editeaza(api_client):
|
||||
"""AC: obs in EDIT_FIELDS + RandEditIn -> editeaza preview salveaza obs -> apare in resolved.
|
||||
|
||||
RED: 'obs' nu e in RandEditIn (import_router.py:1188) sau in EDIT_FIELDS (:261).
|
||||
"""
|
||||
"""obs in EDIT_FIELDS + RandEditIn -> editeaza preview salveaza obs -> apare in resolved."""
|
||||
_seed_nomenclator()
|
||||
data = _csv_bytes([{
|
||||
"VIN": "WVWZZZ1JZXW0AB002",
|
||||
@@ -271,10 +263,7 @@ def test_obs_persistat_preview_editeaza(api_client):
|
||||
|
||||
|
||||
def test_obs_optional_gol_ok(client):
|
||||
"""AC: obs optional; o trimitere fara obs trece validarea si devine queued.
|
||||
|
||||
RED: implicit nu esueaza, dar ne asiguram ca lipsa obs nu introduce o eroare.
|
||||
"""
|
||||
"""obs optional; o trimitere fara obs trece validarea si devine queued."""
|
||||
acct = _create_account_user("obs.gol@test.com")
|
||||
_login(client, "obs.gol@test.com")
|
||||
|
||||
@@ -303,11 +292,7 @@ def test_obs_optional_gol_ok(client):
|
||||
|
||||
|
||||
def test_import_concateneaza_operatie_in_obs(api_client):
|
||||
"""AC (D7): import fara coloana obs -> obs = denumire operatie in preview.
|
||||
|
||||
RED: obs nu e derivat din operatie la import (inca nu e implementat in
|
||||
_resolve_row_for_preview).
|
||||
"""
|
||||
"""Import fara coloana obs -> obs = denumire operatie in preview."""
|
||||
_seed_nomenclator(cod="OE-1", op_service="Schimb ulei")
|
||||
data = _csv_bytes([{
|
||||
"VIN": "WVWZZZ1JZXW0AB003",
|
||||
@@ -336,11 +321,7 @@ def test_import_concateneaza_operatie_in_obs(api_client):
|
||||
|
||||
|
||||
def test_anti_dublu_concat(api_client):
|
||||
"""AC (E3): DERIVE-ON-EMPTY idempotent; re-preview si override explicit NU dubleaza obs.
|
||||
|
||||
RED: fara DERIVE-ON-EMPTY, un al doilea preview sau o editare cu obs setat ar putea
|
||||
produce 'Schimb ulei; Schimb ulei'.
|
||||
"""
|
||||
"""Derive-on-empty idempotent; re-preview si override explicit NU dubleaza obs."""
|
||||
_seed_nomenclator(cod="OE-1", op_service="Schimb ulei")
|
||||
data = _csv_bytes([{
|
||||
"VIN": "WVWZZZ1JZXW0AB004",
|
||||
@@ -389,14 +370,11 @@ def test_anti_dublu_concat(api_client):
|
||||
|
||||
|
||||
def test_obs_sters_explicit_nu_se_re_deriveaza(api_client):
|
||||
"""Bug fix (code-review 5.15): obs='' (sters explicit de user) NU se re-deriveaza.
|
||||
"""obs='' (sters explicit de user) NU se re-deriveaza.
|
||||
|
||||
obs e camp derivat (copiaza denumirea operatiei cand e gol). Cand userul sterge
|
||||
obs in preview (obs=''), _merge_override pastreaza acum obs='' in override (nu il
|
||||
mai face pop) -> override aplicat ultimul suprascrie derive-on-empty -> obs ramane
|
||||
gol. Inainte: pop -> obs gol -> re-derivat din denumire -> stergerea ignorata.
|
||||
|
||||
RED inainte de fix: al doilea preview re-deriveaza obs = 'Schimb ulei'.
|
||||
obs in preview (obs=''), _merge_override pastreaza obs='' in override -> override
|
||||
aplicat ultimul suprascrie derive-on-empty -> obs ramane gol.
|
||||
"""
|
||||
_seed_nomenclator(cod="OE-1", op_service="Schimb ulei")
|
||||
data = _csv_bytes([{
|
||||
@@ -441,10 +419,9 @@ def test_obs_sters_explicit_nu_se_re_deriveaza(api_client):
|
||||
|
||||
|
||||
def test_obs_nu_schimba_cheia_idempotenta():
|
||||
"""AC (D8): editarea obs NU schimba cheia de idempotenta.
|
||||
"""Editarea obs NU schimba cheia de idempotenta.
|
||||
|
||||
Fara import circular DB; testeaza direct functiile din idempotency.py.
|
||||
RED: daca obs ar fi in build_key, doua versiuni (cu/fara obs) ar produce chei diferite.
|
||||
"""
|
||||
from app.idempotency import build_key, canonicalize_row
|
||||
|
||||
|
||||
Reference in New Issue
Block a user