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
194 lines
9.2 KiB
Plaintext
194 lines
9.2 KiB
Plaintext
* test_registratura_ui.prg
|
|
* Test UI VIZUAL (harness + screenshots): fluxul REAL al utilizatorului in fereastra
|
|
* principala (Ferestre\fundal.scx) - lista documentelor, adaugare cu intrare directa
|
|
* in editare (M3), fara prompt de salvare la bara laterala (M2), refuz elegant la
|
|
* partener NULL (M1/M2), salvare + editare reala, filtrul "ultimul document" (M4),
|
|
* fonturi Arial 10 (M5).
|
|
* Rulare cu capturi:
|
|
* powershell -File COMUN\utile\Teste\vfp_ui_harness.ps1 -TestPrg Teste\test_registratura_ui.prg ^
|
|
* -Steps @('lista','adaugare_editare_directa','bara_fara_prompt','salvare_fara_partener','salvare_cu_partener','editare','lista_ultimul')
|
|
* Log: Teste\test_registratura_ui_log.txt ; PNG: Teste\screenshots\
|
|
* ATENTIE: doar pe schema de test (CENTRAL/MARIUSM_AUTO); documentul de test se sterge la final.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcUILog, gcSyncDir, gnMockRaspuns, gnPass, gnFail
|
|
gcUILog = 'D:\ROA\ROAREGISTRATURA\Teste\test_registratura_ui_log.txt'
|
|
gcSyncDir = 'D:\ROA\ROAREGISTRATURA\Teste\uisync\'
|
|
IF !DIRECTORY(gcSyncDir)
|
|
MD (gcSyncDir)
|
|
ENDIF
|
|
STORE 0 TO gnPass, gnFail
|
|
gnMockRaspuns = 6
|
|
|
|
* mock amessagebox PRIMUL in lista de proceduri (la nume duplicat castiga PRIMUL)
|
|
SET PROCEDURE TO D:\ROA\ROAREGISTRATURA\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
|
SET PROCEDURE TO D:\ROA\ROAREGISTRATURA\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
|
|
|
STRTOFILE('=== test_registratura_ui ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
|
|
|
ON ERROR DO HarnessLog WITH '*** EROARE ' + TRANSFORM(ERROR()) + ': ' + MESSAGE() + ;
|
|
' | ' + MESSAGE(1) + ' | prg=' + PROGRAM() + ' lin=' + TRANSFORM(LINENO())
|
|
|
|
DO HarnessLog WITH 'Init mediu...'
|
|
DO D:\ROA\ROAREGISTRATURA\Teste\test_init_env_registratura.prg
|
|
IF TYPE('gnHandle') # 'N' OR gnHandle <= 0
|
|
DO HarnessLog WITH 'ESEC conectare - STOP'
|
|
DO HarnessDone WITH 'esec_conectare'
|
|
QUIT
|
|
ENDIF
|
|
DO HarnessLog WITH 'Conectat, schema=' + gcS
|
|
|
|
* globale suplimentare cerute de fundal.scx / Show
|
|
PUBLIC gcUserNameApp, primadata, goCw, goHelp, oTool
|
|
gcUserNameApp = 'MARIUS M'
|
|
primadata = .T.
|
|
STORE '' TO goCw, goHelp, oTool
|
|
|
|
* ------------- Pas 0: fereastra principala + lista (M4: doar ultimul document)
|
|
DO viz_registratura IN oproceduri_roaregistratura.prg
|
|
* NOSHOW: ocolesc Form.Show -> arata_meniu_fluna -> start_firma (init de aplicatie, nu de test);
|
|
* Visible=.T. afiseaza formularul FARA sa ruleze metoda Show suprascrisa.
|
|
DO FORM D:\ROA\ROAREGISTRATURA\Ferestre\fundal.scx NAME goFundal LINKED NOSHOW
|
|
goFundal._pgfrmbase1.Page2.Ct_registratura1.do_initializeaza_cursor()
|
|
goFundal.Visible = .T.
|
|
goFundal.WindowState = 2
|
|
goFundal._pgfrmbase1.ActivePage = 2
|
|
DO verif WITH USED('cRegistratura') AND RECCOUNT('cRegistratura') = 1, ;
|
|
'M4: lista initiala contine DOAR ultimul document (reccount=' + TRANSFORM(RECCOUNT('cRegistratura')) + ')'
|
|
SELECT cRegistratura
|
|
GO TOP
|
|
SCATTER NAME goRegistratura MEMO
|
|
DO HarnessLog WITH 'Ultimul document afisat: id_reg=' + TRANSFORM(NVL(id_reg,0))
|
|
LOCAL loGrid
|
|
loGrid = goFundal._pgfrmbase1.Page2.Ct_registratura1.grid_registratura
|
|
DO verif WITH loGrid.FontName == 'Arial' AND loGrid.FontSize = 10, ;
|
|
'M5: grid font=' + loGrid.FontName + ' ' + TRANSFORM(loGrid.FontSize)
|
|
DO verif WITH loGrid.Columns(1).FontName == 'Arial' AND loGrid.Columns(1).FontSize = 10, ;
|
|
'M5: coloana1 font=' + loGrid.Columns(1).FontName + ' ' + TRANSFORM(loGrid.Columns(1).FontSize)
|
|
DO verif WITH loGrid.Columns(1).Header1.FontName == 'Arial' AND loGrid.Columns(1).Header1.FontSize = 10, ;
|
|
'M5: header1 font=' + loGrid.Columns(1).Header1.FontName + ' ' + TRANSFORM(loGrid.Columns(1).Header1.FontSize)
|
|
DO HarnessStep WITH 0, 'lista: doar ultimul document, fonturi Arial 10'
|
|
|
|
* ------------- Pas 1: adaugare -> intra DIRECT in editare (M3)
|
|
LOCAL lnId_reg, loPnd
|
|
goFundal._pgfrmbase1.Page2.Ct_registratura1.But_nou1.Click()
|
|
lnId_reg = goRegistratura.id_reg
|
|
loPnd = goFundal._pgfrmbase1.Page3.ct_part_nr_data1
|
|
DO verif WITH goFundal._pgfrmbase1.ActivePage = 3, ;
|
|
'M3: dupa adaugare s-a comutat pe Page3 (ActivePage=' + TRANSFORM(goFundal._pgfrmbase1.ActivePage) + ')'
|
|
DO verif WITH !loPnd.llock, 'M3: documentul nou este DIRECT in editare (llock=' + TRANSFORM(loPnd.llock) + ')'
|
|
DO verif WITH loPnd.Command2.Caption == 'Salveaza', ;
|
|
'M3: butonul arata "Salveaza" (caption=' + loPnd.Command2.Caption + ')'
|
|
DO verif WITH !EMPTY(lnId_reg), 'Adaugare: id_reg nou=' + TRANSFORM(NVL(lnId_reg,0))
|
|
DO verif WITH loPnd.txtClient.FontName == 'Arial' AND loPnd.txtClient.FontSize = 10, ;
|
|
'M5: txtClient font=' + loPnd.txtClient.FontName + ' ' + TRANSFORM(loPnd.txtClient.FontSize)
|
|
DO HarnessStep WITH 1, 'adaugare: direct in editare, buton Salveaza'
|
|
|
|
* ------------- Pas 2: click pe bara laterala cu partener NULL -> FARA prompt de salvare (M2)
|
|
LOCAL lcLogInainte
|
|
lcLogInainte = FILETOSTR(gcUILog)
|
|
goFundal._pgfrmbase1.Page3.ct_date_generale1.outlook2003bar1.Panel.button3.Click()
|
|
LOCAL lcLogNou
|
|
lcLogNou = SUBSTR(FILETOSTR(gcUILog), LEN(lcLogInainte) + 1)
|
|
DO verif WITH !('Doriti sa salvati' $ lcLogNou), ;
|
|
'M2: barei laterale NU i-a aparut promptul "Doriti sa salvati..." cu partener NULL'
|
|
DO verif WITH !loPnd.llock, 'M2: raman in editare dupa click pe bara (llock=' + TRANSFORM(loPnd.llock) + ')'
|
|
DO HarnessStep WITH 2, 'bara laterala: fara prompt, raman in editare'
|
|
|
|
* ------------- Pas 3: Salveaza cu partener NULL -> refuz elegant (M1/M2)
|
|
lcLogInainte = FILETOSTR(gcUILog)
|
|
loPnd.Command2.Click()
|
|
lcLogNou = SUBSTR(FILETOSTR(gcUILog), LEN(lcLogInainte) + 1)
|
|
DO verif WITH ('Alegeti partenerul' $ lcLogNou), 'M2: mesaj "Alegeti partenerul!" la salvare fara partener'
|
|
DO verif WITH !loPnd.llock AND loPnd.Command2.Caption == 'Salveaza', ;
|
|
'M2: campurile raman DEBLOCATE dupa refuz (llock=' + TRANSFORM(loPnd.llock) + ', caption=' + loPnd.Command2.Caption + ')'
|
|
DO HarnessStep WITH 3, 'salvare fara partener: refuz, raman in editare'
|
|
|
|
* ------------- Pas 4: aleg partener + Salveaza -> salvare reusita (M1/M2)
|
|
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 = 'TSTUI'
|
|
goRegistratura.descriere = 'TEST UI AUTOMAT'
|
|
goRegistratura.nr_pag = 1
|
|
loPnd.Refresh()
|
|
loPnd.Command2.Click()
|
|
DO verif WITH loPnd.llock AND loPnd.Command2.Caption == 'Modifica', ;
|
|
'M2: dupa salvare campurile sunt blocate (llock=' + TRANSFORM(loPnd.llock) + ', caption=' + loPnd.Command2.Caption + ')'
|
|
* verificare in baza
|
|
llSucces = goExecutor.oExecuta("select numar, descriere from vregistratura where id_reg = " + ;
|
|
ALLTRIM(STR(lnId_reg)), 'cVerif')
|
|
IF llSucces AND USED('cVerif') AND RECCOUNT('cVerif') > 0
|
|
SELECT cVerif
|
|
DO verif WITH ALLTRIM(NVL(numar,'')) == 'TSTUI', ;
|
|
'M1: salvarea a ajuns in baza (numar=' + TRANSFORM(NVL(numar,'')) + ')'
|
|
USE IN cVerif
|
|
ELSE
|
|
DO verif WITH .F., 'verificare in baza dupa salvare'
|
|
ENDIF
|
|
ELSE
|
|
DO HarnessLog WITH 'SKIP Pas 4: niciun partener disponibil pe schema de test'
|
|
ENDIF
|
|
DO HarnessStep WITH 4, 'salvare cu partener: reusita, campuri blocate'
|
|
|
|
* ------------- Pas 5: editare (Modifica -> schimb descriere -> Salveaza)
|
|
loPnd.Command2.Click() && Modifica -> deblocare
|
|
DO verif WITH !loPnd.llock, 'Editare: campuri deblocate (llock=' + TRANSFORM(loPnd.llock) + ')'
|
|
goRegistratura.descriere = 'TEST UI AUTOMAT - EDITAT'
|
|
goRegistratura.nr_pag = 3
|
|
loPnd.Command2.Click() && Salveaza
|
|
llSucces = goExecutor.oExecuta("select descriere, nr_pag from vregistratura where id_reg = " + ;
|
|
ALLTRIM(STR(lnId_reg)), 'cVerif2')
|
|
IF llSucces AND USED('cVerif2') AND RECCOUNT('cVerif2') > 0
|
|
SELECT cVerif2
|
|
DO verif WITH ALLTRIM(NVL(descriere,'')) == 'TEST UI AUTOMAT - EDITAT' AND NVL(nr_pag,0) = 3, ;
|
|
'Editare: modificarile au ajuns in baza (descriere=' + ALLTRIM(NVL(descriere,'')) + ', nr_pag=' + TRANSFORM(NVL(nr_pag,0)) + ')'
|
|
USE IN cVerif2
|
|
ELSE
|
|
DO verif WITH .F., 'verificare in baza dupa editare'
|
|
ENDIF
|
|
DO HarnessStep WITH 5, 'editare document: re-salvare verificata in baza'
|
|
|
|
* ------------- Pas 6: inapoi pe lista -> tot ultimul document (M4 pe do_cauta/Page2.Activate)
|
|
goFundal._pgfrmbase1.ActivePage = 2
|
|
DO verif WITH RECCOUNT('cRegistratura') = 1, ;
|
|
'M4: revenirea pe lista pastreaza filtrul ultimului document (reccount=' + TRANSFORM(RECCOUNT('cRegistratura')) + ')'
|
|
SELECT cRegistratura
|
|
GO TOP
|
|
DO verif WITH id_reg = lnId_reg, 'M4: ultimul document afisat este cel de test (id_reg=' + TRANSFORM(id_reg) + ')'
|
|
DO HarnessStep WITH 6, 'lista dupa: doar documentul de test'
|
|
|
|
* ------------- curatenie
|
|
LOCAL lcSql, lnSucces
|
|
lcSql = [begin pack_registratura.sterge_registratura(] + ALLTRIM(STR(lnId_reg)) + ;
|
|
[,] + ALLTRIM(STR(gnIdUtil)) + [); end;]
|
|
lnSucces = goExecutor.oExecute(lcSql)
|
|
DO HarnessLog WITH IIF(lnSucces < 0, ;
|
|
'ATENTIE: stergerea documentului de test a esuat - stergeti manual id_reg=' + TRANSFORM(lnId_reg), ;
|
|
'Curatenie OK: document de test sters (soft-delete), id_reg=' + TRANSFORM(lnId_reg))
|
|
|
|
DO HarnessLog WITH '=== REZULTAT: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
DO HarnessDone WITH IIF(gnFail = 0, 'done', 'fail')
|
|
ON ERROR
|
|
CLOSE ALL
|
|
QUIT
|
|
|
|
PROCEDURE verif
|
|
LPARAMETERS tlOk, tcMsg
|
|
IF tlOk
|
|
gnPass = gnPass + 1
|
|
DO HarnessLog WITH 'PASS: ' + tcMsg
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO HarnessLog WITH 'FAIL: ' + tcMsg
|
|
ENDIF
|
|
ENDPROC
|