M1 modifica_reg_dg: garda id_part NULL/empty (mesaj + Return .F.), NVL pe id_part/nr_pag, functia intoarce succes. M2 validare partener in toate cele 3 puncte de salvare, INAINTE de blocarea campurilor (Command2.Click salveaza inainte sa blocheze; bara laterala si Page3.Deactivate nu mai salveaza/prompteaza cu partener NULL). M3 do_adauga: documentul nou intra direct in editare (llock=.F., focus cmdDenumire); eliminat mesajul fals "Toate modificarile au efect imediat!". M4 viz_registratura + do_cauta: filtru initial "doar ultimul document" (subquery max(id_reg)); fara criterii de cautare se pastreaza filtrul, nu se incarca toata baza. M5 fonturi: eliminate 154 suprascrieri "Arial Narrow" si rebazate 96 controale baseclass pe COMUN _baza.vcx (textbox/label/checkbox/commandbutton/optiongroup); Init de grid propaga fontul la coloane si headere (fara asta raman Arial 9 - verificat empiric). Teste: harness headless (init env dedicat, form, adaugare+editare cu verificare in baza) + test UI vizual cu screenshots pe fluxul real (19 PASS / 0 FAIL). Diff-uri de audit in docs/diff_runda1_*.patch. M6 (build EXE) BLOCAT headless: roaRegistratura.pjx refera 48 fisiere hardcodate pe "c:\program files\...\vfp 9" (masina 32-bit din 2021) + COMUN\utile\hpdf\ReportOutput\ctl32_progressbar.vcx redenumit _old; necesita repathing o data in VFP9 IDE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018H9za5A9Tk6wcLFof6seds
169 lines
6.5 KiB
Plaintext
169 lines
6.5 KiB
Plaintext
* test_registratura_adaugare.prg
|
|
* Test headless: fluxul de ADAUGARE document in registratura + salvarea datelor generale.
|
|
* Reproduce si bugul cunoscut: modifica_reg_dg cu partener NULL (P2 din
|
|
* docs\analiza_registratura_adaugare_editare.md). Dupa implementarea gardei (M1),
|
|
* pasul 3 trebuie sa devina un refuz elegant (mesaj + return), nu eroare de executie.
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAREGISTRATURA\Teste\test_registratura_adaugare.prg"
|
|
* Log: D:\ROA\ROAREGISTRATURA\Teste\log_test_adaugare.txt
|
|
* ATENTIE: ruleaza DOAR pe schema de test (CENTRAL/MARIUSM_AUTO). Documentul de test
|
|
* este sters (soft-delete) la final prin pack_registratura.sterge_registratura.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
* mock amessagebox PRIMUL in lista de proceduri (la nume duplicat castiga PRIMUL - testare-ui-vfp.md cap. j)
|
|
SET PROCEDURE TO D:\ROA\ROAREGISTRATURA\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
|
PUBLIC gnMockRaspuns
|
|
gnMockRaspuns = 6
|
|
|
|
PUBLIC gcTestLog
|
|
gcTestLog = 'D:\ROA\ROAREGISTRATURA\Teste\log_test_adaugare.txt'
|
|
STRTOFILE('=== test_registratura_adaugare ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
|
|
|
ON ERROR DO tlog WITH '*** EROARE ' + TRANSFORM(ERROR()) + ': ' + MESSAGE() + ;
|
|
' | ' + MESSAGE(1) + ' | prg=' + PROGRAM() + ' lin=' + TRANSFORM(LINENO())
|
|
|
|
DO tlog WITH 'Init mediu...'
|
|
DO D:\ROA\ROAREGISTRATURA\Teste\test_init_env_registratura.prg
|
|
IF TYPE('gnHandle') # 'N' OR gnHandle <= 0
|
|
DO tlog WITH 'ESEC conectare - STOP'
|
|
DO tfinal
|
|
ENDIF
|
|
DO tlog WITH 'Conectat, schema=' + gcS
|
|
|
|
* 0) cursorul listei + goRegistratura
|
|
DO viz_registratura IN oproceduri_roaregistratura.prg
|
|
IF !USED('cRegistratura')
|
|
DO tlog WITH 'ESEC: nu exista cursorul cRegistratura - STOP'
|
|
DO tfinal
|
|
ENDIF
|
|
SELECT cRegistratura
|
|
LOCAL lnInregInitial
|
|
lnInregInitial = RECCOUNT()
|
|
SCATTER NAME goRegistratura MEMO BLANK
|
|
DO tlog WITH 'Inregistrari initiale: ' + TRANSFORM(lnInregInitial)
|
|
|
|
* 1) alocare numar intern (seria 10, ca in ct_registratura.do_adauga)
|
|
DO tlog WITH '--- Pas 1: alocare numar intern (seria 10)'
|
|
LOCAL loGeneratorNumere, lcNumarIntern
|
|
loGeneratorNumere = CREATEOBJECT('oGeneratorNumere')
|
|
loGeneratorNumere.creeaza_cursor_serii(10)
|
|
lcNumarIntern = ALLTRIM(STR(loGeneratorNumere.aloca_numar(10)))
|
|
DO tlog WITH 'Numar intern alocat: ' + lcNumarIntern
|
|
|
|
* 2) adaugare document gol (pack_registratura.adauga_registratura)
|
|
DO tlog WITH '--- Pas 2: adauga_registratura'
|
|
LOCAL lnId_reg
|
|
lnId_reg = 0
|
|
lnId_reg = adauga_registratura('cRegistratura', lcNumarIntern)
|
|
IF EMPTY(lnId_reg)
|
|
DO tlog WITH 'ESEC: adauga_registratura a intors ' + TRANSFORM(lnId_reg) + ;
|
|
' (pack_registratura lipseste din schema de test?) - STOP curat, nimic de sters'
|
|
DO tfinal
|
|
ENDIF
|
|
DO tlog WITH 'OK document adaugat, id_reg=' + TRANSFORM(lnId_reg)
|
|
|
|
* pozitionare pe documentul nou + goRegistratura
|
|
DO viz_registratura IN oproceduri_roaregistratura.prg
|
|
SELECT cRegistratura
|
|
LOCATE FOR id_reg = lnId_reg
|
|
IF !FOUND()
|
|
DO tlog WITH 'ESEC: documentul nou nu apare in vregistratura'
|
|
ELSE
|
|
SCATTER NAME goRegistratura MEMO
|
|
DO tlog WITH 'Document nou gasit: nr_intern=' + TRANSFORM(NVL(numar_intern,'')) + ;
|
|
' id_part=' + TRANSFORM(goRegistratura.id_part)
|
|
ENDIF
|
|
|
|
* 3) salvare cu partener NULL - reproduce bugul P2
|
|
* (astazi: eroare "Invalid use of NULL"/sql NULL; dupa fix M1: mesaj + refuz)
|
|
DO tlog WITH '--- Pas 3: modifica_reg_dg cu id_part NULL (se asteapta refuz/eroare)'
|
|
goRegistratura.descriere = 'TEST AUTOMAT - nu folositi'
|
|
DO modifica_reg_dg WITH goRegistratura IN oproceduri_roaregistratura.prg
|
|
DO tlog WITH 'Pas 3 incheiat (vezi mai sus daca a fost eroare de executie = bug P2 nereparat)'
|
|
|
|
* 4) salvare cu partener valid (refolosesc un partener din alt document existent)
|
|
DO tlog WITH '--- Pas 4: modifica_reg_dg cu partener valid'
|
|
LOCAL llSucces
|
|
llSucces = goExecutor.oExecuta( ;
|
|
"select id_part, denumire from vregistratura where id_part is not null and rownum = 1", 'cPartTest')
|
|
IF llSucces AND USED('cPartTest') AND RECCOUNT('cPartTest') > 0
|
|
SELECT cPartTest
|
|
goRegistratura.id_part = id_part
|
|
goRegistratura.denumire = denumire
|
|
USE IN cPartTest
|
|
goRegistratura.data = DATE()
|
|
goRegistratura.numar = 'TST-' + lcNumarIntern
|
|
goRegistratura.ie = 1
|
|
goRegistratura.nr_pag = 1
|
|
DO modifica_reg_dg WITH goRegistratura IN oproceduri_roaregistratura.prg
|
|
|
|
* verificare: datele au ajuns in baza
|
|
DO viz_registratura IN oproceduri_roaregistratura.prg
|
|
SELECT cRegistratura
|
|
LOCATE FOR id_reg = lnId_reg
|
|
IF FOUND() AND !ISNULL(id_part) AND ALLTRIM(NVL(numar,'')) == 'TST-' + lcNumarIntern
|
|
DO tlog WITH 'OK salvare reusita: partener=' + TRANSFORM(NVL(denumire,'')) + ;
|
|
' numar=' + TRANSFORM(NVL(numar,''))
|
|
ELSE
|
|
DO tlog WITH 'ESEC verificare: documentul nu are datele asteptate dupa salvare'
|
|
ENDIF
|
|
ELSE
|
|
DO tlog WITH 'SKIP Pas 4: nu exista niciun partener in vregistratura pe schema de test'
|
|
ENDIF
|
|
|
|
* 5) EDITAREA documentului (fluxul Modifica -> Salveaza): modific campuri si re-salvez
|
|
DO tlog WITH '--- Pas 5: editare document (modificare descriere/nr_pag/data + re-salvare)'
|
|
SELECT cRegistratura
|
|
LOCATE FOR id_reg = lnId_reg
|
|
IF FOUND() AND !ISNULL(id_part)
|
|
SCATTER NAME goRegistratura MEMO
|
|
goRegistratura.descriere = 'TEST AUTOMAT - EDITAT'
|
|
goRegistratura.nr_pag = 5
|
|
goRegistratura.data = DATE() - 1
|
|
goRegistratura.ie = 2
|
|
DO modifica_reg_dg WITH goRegistratura IN oproceduri_roaregistratura.prg
|
|
|
|
* verificare: modificarile au ajuns in baza
|
|
DO viz_registratura IN oproceduri_roaregistratura.prg
|
|
SELECT cRegistratura
|
|
LOCATE FOR id_reg = lnId_reg
|
|
IF FOUND() AND ALLTRIM(NVL(descriere,'')) == 'TEST AUTOMAT - EDITAT' ;
|
|
AND NVL(nr_pag,0) = 5 AND ie = 2
|
|
DO tlog WITH 'OK editare reusita: descriere=' + TRANSFORM(NVL(descriere,'')) + ;
|
|
' nr_pag=' + TRANSFORM(NVL(nr_pag,0)) + ' ie=' + TRANSFORM(ie) + ;
|
|
' data=' + TRANSFORM(data)
|
|
ELSE
|
|
DO tlog WITH 'ESEC verificare editare: documentul nu are valorile modificate'
|
|
ENDIF
|
|
ELSE
|
|
DO tlog WITH 'SKIP Pas 5: documentul de test nu are partener (Pas 4 esuat/sarit)'
|
|
ENDIF
|
|
|
|
* 6) curatenie: soft-delete documentul de test
|
|
DO tlog WITH '--- Pas 6: stergere document de test'
|
|
LOCAL lcSql, lnSucces
|
|
lcSql = [begin pack_registratura.sterge_registratura(] + ALLTRIM(STR(lnId_reg)) + ;
|
|
[,] + ALLTRIM(STR(gnIdUtil)) + [); end;]
|
|
lnSucces = goExecutor.oExecute(lcSql)
|
|
IF lnSucces < 0
|
|
DO tlog WITH 'ATENTIE: stergerea a esuat: ' + TRANSFORM(goExecutor.cEroare) + ;
|
|
' - stergeti manual id_reg=' + TRANSFORM(lnId_reg)
|
|
ELSE
|
|
DO tlog WITH 'OK document de test sters (soft-delete), id_reg=' + TRANSFORM(lnId_reg)
|
|
ENDIF
|
|
|
|
DO tlog WITH '=== FINAL test_registratura_adaugare'
|
|
DO tfinal
|
|
|
|
PROCEDURE tlog
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(TRANSFORM(tcMsg) + CHR(13)+CHR(10), gcTestLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE tfinal
|
|
ON ERROR
|
|
CLOSE ALL
|
|
QUIT
|
|
ENDPROC
|