Files
roafacturare/docs/cercetare/rec_s4b_dialog_smoke.md
Marius Mutu d9f5ca4226 docs: planurile, proiectarile si rapoartele de lucru intra in versionare
Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git,
nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de
cercetare pe care se sprijina modificarile din cod. O stergere acolo era
definitiva.

Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au
fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele
fisierelor de test la care se refereau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
2026-08-11 22:17:17 +03:00

5.1 KiB

S4b etapa 2 — smoke test headless al dialogului frm_sincronizare_articole

Suita nouă: COMUN\utile\Teste\editare_factura\test_s4b_dialog.prg, model test_s4b_sincronizare.prg (același folder) — tvd/trul construite în test cu helperele AdaugaTvd/AdaugaTrul (copiate identic), dummyform (copiat identic) refolosit ca oFormArticole. Complet headless (vfp9.exe -A -T), fără Oracle.

Nu s-a atins COMUN\clase\omodificari.vc2 sau COMUN\programe\ofacturare_editare.prg — doar citite, niciun write-back.

Rezultat

REZULTAT: 35 PASS / 0 FAIL

Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s4b_dialog_log.txt

Comandă de reproducere:

cd "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura"
"C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T test_s4b_dialog.prg

Niciun proces vfp9.exe rămas viu, verificat cu tasklist înainte și după rulare (0 ambele dăți).

Mediu (fără Oracle, fără test_init_env_auto)

Clasa e OF "_frm_child.vcx" (WindowType=1, modală), dar modalitatea se declanșează la .Show(), nu la Createobject() — verificat pe cod (_frm_child.vc2/_frm_base.vc2, niciun .Show( în lanțul de moștenire) înainte de a scrie testul, ca niciun caz să nu rămână blocat. Mediul de clase a fost replicat din Programe\roafacturare.prg (SET PATH + tot lanțul SET CLASSLIB, minus procedurile Oracle/init_program), plus SET PROCEDURE TO proceduri_comune.prg și ofacturare_editare.prg — suficient ca CreateObject('frm_sincronizare_articole') să rezolve lanțul _frm_child.vcx -> _frm_base.vcx -> _baza.vcx și controalele _grdrow/_optiongrup/_label.

Ce s-a testat (cele 7 puncte din brief, toate acoperite)

  1. Instanțiere fără eroare — 6 instanțe create (T1, T2, T2b, T3, T4, T5, T6), pe seturi diferite de tvd/trul (Modificare+Adaugare+Semnalare+N-A, document identic, doar N-A/Semnalare), toate verificate Vartype(loForm)=='O' — PASS pe toate.
  2. propunere_afisata identică camp-cu-camp cu propunere_sincronizare (T1) — comparație completă (id_articol, denumire, codmat, cantitate_veche/noua, pret_vechi/nou, actiune, motiv) prin helper dedicat VerificaCursoareIdentice, 0 nepotriviri pe 4 rânduri.
  3. But_termin1.Enabled — .T. cu Modificare+Adaugare prezente (T1), .F. pe propunere goală (document identic, T2) și .F. pe propunere cu doar N-A/Semnalare (T2b) — ambele variante cerute.
  4. Comutarea direcției (T3) — optDirectie.Value=2 + .Click() (apel direct de metodă, fără input real): propunere_afisata s-a reumplut la tot 3 rânduri (nu dublat), rolurile s-au inversat corect (900 Adaugare→Semnalare, 1000 Semnalare→Adaugare, 800 rămas Modificare) — exact regresia pe care corecția (rec_s4b_etapa2.md, punctul 2) o vizează.
  5. inainte_de_do_termin() (T4) — întoarce .T., aplică efectiv în tvd (800 modificat 4/16, 900 adăugat ca linie nouă 1/50), dummyform.nAdaugaCalls==1, nBaraCalls>=1.
  6. oFormArticole rămas .F. (T5) — nicio eroare, garda Vartype(...)=='O' funcționează, REPLACE-ul de bază tot se aplică pe tvd (4/16) fără toForm.
  7. Unload/Release (T6) — propunere_afisata deschisă înainte, închisă după .Release().

Nicio asercțiune pe coloane de grid, lățimi sau DynamicForeColor — confirmat inutilizabil sub -A -T (nu a fost nevoie: dialogul se instanțiază fără eroare fatală chiar și fără materializarea gridului, deci n-a trebuit mutat nimic în harness-ul UI vizibil).

Zgomot de mediu — NU e defect în clasa nouă

La fiecare CreateObject, ON ERROR a prins ~20 erori în cascadă în ACTUALIZEAZA_DREPTURI (variabile gcAcces, lcProp, lcButoane, lcButon, lnPf negăsite) urmate de Object GOAPP is not found în _frmbase.Init. Astea vin din codul de bază moștenit (_frmbase/_baza.vcx, folosit de toate formularele aplicației, nu doar de frm_sincronizare_articole) — gestionarea drepturilor pe butoane, care citește global gcAcces și goApp, ambele setate normal la login-ul real în aplicație. Harness-ul acestui test nu face login (fără Oracle, cum a cerut sarcina), deci aceste globale lipsesc. frm_sincronizare_articole nu suprascrie ACTUALIZEAZA_DREPTURI — nu are nicio metodă cu acest nume în omodificari.vc2. ON ERROR înghite fiecare eroare și continuă linie cu linie (comportament VFP normal la eroare needivizată), iar ConstruiesteEnumerare() din Init rulează după DoDefault() și suprascrie explicit But_termin1.Enabled — de-aia toate cele 35 de asercțiuni ies corect în ciuda zgomotului. Nu e raportat ca defect (nu ține de clasa nouă), doar semnalat ca limitare de mediu a harness-ului fără Oracle.

Ce nu s-a putut testa

Nimic din cele 7 puncte cerute nu a fost blocat. Netestat (în afara scopului acestei sarcini): comportamentul vizual real al gridului (coloane/culori — cere harness UI vizibil, nu a fost necesar aici) și .Show() modal (deliberat neatins, ca să nu rămână vreun vfp9.exe blocat pe un dialog modal fără input real).