This commit is contained in:
2026-08-23 20:31:07 +03:00
parent a580dfd6e1
commit a833cf639f
7 changed files with 618 additions and 61 deletions

View File

@@ -10,6 +10,14 @@ Fisiere in `COMUN\utile\Teste\`: `vfp_ui_harness.ps1` (orchestrator generic, par
`mock_amessagebox.prg` (mock dialog) — infrastructura sta in radacina `Teste\`; suitele stau in
subfoldere pe subiect. Exemplu complet: `achizitie_import\test_import_nota_ui.prg` + `.ps1`.
**Initializarea de mediu se alege dupa PROIECT, nu dupa clasa testata.** `test_init_env_auto.prg`
are `gcAppPath` hardcodat pe `D:\ROA\ROACONT\`; exista variante `_roagest`, `_roafacturare`,
`_acnpro`, `_roadef`. `D:\ROA\ROACONT\COMUN` si `D:\ROA\ROADEF\COMUN` sunt **working copy-uri
SVN separate, nu junctions**: un test pornit cu init-ul gresit incarca alt COMUN si nu vede
modificarile necomise — trece sau pica pe cod vechi, fara niciun semn. Pune in test o verificare
explicita ca noul cod chiar e incarcat (ex. `CREATEOBJECT` pe clasa noua, intr-un `TRY`) inainte
de orice asertiune.
**REGULA (Marius): testele pe aplicatii frontend exerseaza fluxul REAL al
utilizatorului** — formularul/butonul/metoda pe care o apeleaza aplicatia, NU introducerea
directa a randurilor in cursoare/tabele. Popularea directa sare peste validari/filtre/efecte
@@ -117,6 +125,14 @@ g. **Mock de messagebox**: `FUNCTION amessagebox` care returneaza direct valoare
(6=Da), incarcat cu `SET PROCEDURE ... ADDITIVE` **PRIMUL**, inaintea fisierelor aplicatiei:
la nume duplicat de procedura VFP foloseste fisierul cautat PRIMUL (verificat empiric).
Astfel umbreste `amessagebox` si in apelurile din metodele de clasa.
**Nu acopera apelurile INTRA-FISIER**: cand functia care deschide dialogul sta in ACELASI
`.prg` cu `amessagebox`, mock-ul nu o prinde si dialogul ramane modal. Caz real:
`verifica_partener_show_info` si `amessagebox` sunt amandoua in `oproceduri_comune.prg` —
rularea headless s-a blocat pe primul CIF pana s-a facut un mock pentru wrapper-ul insusi
(`partener_anaf\mock_verifica_partener_show_info.prg`). Regula practica: mock-ul se pune pe
functia pe care o apeleaza codul TESTAT, nu pe cea de la capatul lantului. Si pune in test o
proba care confirma ca mock-ul a castigat, INAINTE de orice actiune care poate deschide un
dialog — altfel esecul se manifesta ca test agatat, nu ca eroare.
h. **Cursorii ceruti de Init**: pre-populeaza-i INAINTE de instantiere (Init-ul recreeaza din
Oracle cursoarele goale, iar recrearea lasa grid-ul fara coloane, eroare 1925). Pune 1 rand
placeholder inainte, apoi **`ZAP`** dupa `Show()` — NU `DELETE ALL`, care lasa un rand fizic