* 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