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
83 lines
5.1 KiB
Markdown
83 lines
5.1 KiB
Markdown
# 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).
|