* test_todo21_mesaj_meniu.prg * TODO #21: regresie pentru D6/D7 (mesajul de detalii grupat pe sectiuni) si D10 (meniul * scurtat de verificare cod fiscal), ca schimbari ulterioare in formular sa nu le strice tacut. * Fara HTTP, fara ANAF live, fara Oracle - GetMeniuVerificareCodFiscal/GetOptiuneVerificareCodFiscal/ * verifica_partener_show_info nu depind de ele (doar de parametri si de variabila globala crlf, * setata mai jos ca in test_init_env_auto.prg). * * Pas 1-2: GetMeniuVerificareCodFiscal / GetOptiuneVerificareCodFiscal apelate DIRECT (functii * pure, fara XMENU in interior). * Pas 3: aritmetica optiuni_meniu_ante - copiata LITERAL din VerificaCodFiscal * (COMUN\programe\oproceduri_comune.prg:4960-4967: "lnOptiuneVerificare = m.lnOptiune" apoi * "lnOptiuneVerificare = m.lnOptiuneVerificare - Occurs(';', m.lcOptiuniMeniuAnte)"), aplicata pe * o pozitie FABRICATA (nu se apeleaza VerificaCodFiscal, care ar deschide XMENU si ar bloca * headless-ul). * Pas 4: verifica_partener_show_info, apelata prin umbra (copie a oproceduri_comune.prg cu * amessagebox redenumit, ca in test_todo21_perioade_anaf.prg) - amessagebox e inlocuit de * mock_amessagebox.prg, textul se captureaza in gcMockUltimMesaj fara dialog modal. Obiectele * partener sunt fabricate (CREATEOBJECT("empty") + ADDPROPERTY), fara verificare reala. * * Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu.prg" * Verdict in log: TOTAL OK / TOTAL FAIL: n pas(i). SET SAFETY OFF SET TALK OFF SET DELETED ON SET EXACT ON SET CENTURY ON SET DATE DMY SET NULLDISPLAY TO '' CLOSE DATABASES PUBLIC gcLog, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, crlf gcLog = "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu_log.txt" gcMockUltimMesaj = '' gnMockUltimTip = 0 gnMockRaspuns = 6 crlf = CHR(13) + CHR(10) STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) PUBLIC gnEsecuri gnEsecuri = 0 ON ERROR DO WriteTestErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT TRY *-- umbra: copie a oproceduri_comune.prg cu FUNCTION amessagebox redenumita, ca apelul din *-- verifica_partener_show_info sa cada pe mock_amessagebox.prg (fara conflict de nume) si *-- niciun dialog modal sa nu apara. VFP rezolva numele duplicate de procedura in favoarea *-- fisierului deschis PRIMUL cu SET PROCEDURE - de-asta mock-ul si umbra se incarca aici, *-- inaintea oricarui alt cod. LOCAL lcSrc, lcUmbra lcUmbra = ADDBS(SYS(2023)) + 'oproceduri_comune_umbra_mesajmeniu.prg' lcSrc = FILETOSTR("D:\ROA\ROACONT\COMUN\programe\oproceduri_comune.prg") lcSrc = STRTRAN(lcSrc, CHR(13) + CHR(10) + 'Function amessagebox' + CHR(13) + CHR(10), ; CHR(13) + CHR(10) + 'Function amessagebox_umbrit_mm' + CHR(13) + CHR(10)) STRTOFILE(lcSrc, lcUmbra) ERASE (FORCEEXT(lcUmbra, 'fxp')) SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE SET PROCEDURE TO (lcUmbra) ADDITIVE DO WriteTestLog WITH 'mock si umbra incarcate (fara Oracle - functiile testate nu depind de el)' *================================================================== * Pas 1: GetMeniuVerificareCodFiscal - cele 5 pozitii, in ordine, cu cod fiscal prezent *================================================================== LOCAL lcMenu, lcMenuAsteptat, lcMenuFaraCod, lcMenuFaraCodAsteptat lcMenu = GetMeniuVerificareCodFiscal('RO1890420') lcMenuAsteptat = "VERIFICARE ANAF;VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;DESCHIDE FISA PE MFINANTE.RO" IF m.lcMenu == m.lcMenuAsteptat DO WriteTestLog WITH 'OK P1a: meniul cu cod fiscal are exact cele 5 pozitii, in ordine' ELSE DO WriteTestLog WITH 'FAIL P1a: meniu=[' + m.lcMenu + '] asteptat=[' + m.lcMenuAsteptat + ']' gnEsecuri = gnEsecuri + 1 ENDIF *-- Pas 3 (partial aici): fara cod fiscal, pozitiile dezactivabile au prefixul "\"; *-- ISTORIC (pozitia 3) ramane activa oricum. lcMenuFaraCod = GetMeniuVerificareCodFiscal('') lcMenuFaraCodAsteptat = "\VERIFICARE ANAF;\VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;\DESCHIDE FISA PE MFINANTE.RO" IF m.lcMenuFaraCod == m.lcMenuFaraCodAsteptat DO WriteTestLog WITH 'OK P1b: fara cod fiscal, ANAF/VIES/MFINANTE dezactivate (\), ISTORIC ramane activ' ELSE DO WriteTestLog WITH 'FAIL P1b: meniu=[' + m.lcMenuFaraCod + '] asteptat=[' + m.lcMenuFaraCodAsteptat + ']' gnEsecuri = gnEsecuri + 1 ENDIF *================================================================== * Pas 2: GetOptiuneVerificareCodFiscal - 1/2/3/5 mapate, 4 (separator) si restul goale *================================================================== LOCAL lnI, lcOptRezultat, lcOptAsteptat DIMENSION laOptiuni(7,2) laOptiuni(1,1) = 0 laOptiuni(1,2) = '' laOptiuni(2,1) = 1 laOptiuni(2,2) = 'ANAF_SERVICIU_WEB' laOptiuni(3,1) = 2 laOptiuni(3,2) = 'VIES_AUTO' laOptiuni(4,1) = 3 laOptiuni(4,2) = 'ISTORIC' laOptiuni(5,1) = 4 laOptiuni(5,2) = '' laOptiuni(6,1) = 5 laOptiuni(6,2) = 'MFIN_MANUAL_COD' laOptiuni(7,1) = 6 laOptiuni(7,2) = '' FOR lnI = 1 TO 7 lcOptRezultat = GetOptiuneVerificareCodFiscal(laOptiuni(m.lnI,1)) lcOptAsteptat = laOptiuni(m.lnI,2) IF m.lcOptRezultat == m.lcOptAsteptat DO WriteTestLog WITH 'OK P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + ']' ELSE DO WriteTestLog WITH 'FAIL P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + '], asteptat [' + m.lcOptAsteptat + ']' gnEsecuri = gnEsecuri + 1 ENDIF ENDFOR *================================================================== * Pas 3: aritmetica optiuni_meniu_ante - formula copiata din VerificaCodFiscal:4960-4967 *================================================================== LOCAL lcOptiuniMeniuAnte, lcMenuCombinat, lcMenuCombinatAsteptat, lnOptiuneSimulat, lnOptiuneVerificare, lcTip lcOptiuniMeniuAnte = "MODIFICARE PARTENER - X;\-;" *-- meniul combinat trebuie sa fie exact prepandatul + submeniul de verificare neschimbat lcMenuCombinat = GetMeniuVerificareCodFiscal('RO1890420', m.lcOptiuniMeniuAnte) lcMenuCombinatAsteptat = m.lcOptiuniMeniuAnte + m.lcMenuAsteptat IF m.lcMenuCombinat == m.lcMenuCombinatAsteptat DO WriteTestLog WITH 'OK P3a: meniul combinat = prepandate (2 pozitii) + submeniul de verificare neschimbat' ELSE DO WriteTestLog WITH 'FAIL P3a: combinat=[' + m.lcMenuCombinat + '] asteptat=[' + m.lcMenuCombinatAsteptat + ']' gnEsecuri = gnEsecuri + 1 ENDIF *-- pozitia 3 din meniul COMBINAT (dupa cele 2 prepandate: "MODIFICARE PARTENER - X" si "\-") *-- e primul element din submeniul de verificare -> trebuie sa cada pe ANAF_SERVICIU_WEB lnOptiuneSimulat = 3 lnOptiuneVerificare = m.lnOptiuneSimulat IF !EMPTY(m.lcOptiuniMeniuAnte) lnOptiuneVerificare = m.lnOptiuneVerificare - OCCURS(';', m.lcOptiuniMeniuAnte) ENDIF lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare) IF m.lcTip == 'ANAF_SERVICIU_WEB' DO WriteTestLog WITH 'OK P3b: pozitia 3 din meniul combinat (dupa cele 2 prepandate) = ANAF_SERVICIU_WEB' ELSE DO WriteTestLog WITH 'FAIL P3b: pozitia 3 combinata a dat [' + m.lcTip + '], asteptat ANAF_SERVICIU_WEB' gnEsecuri = gnEsecuri + 1 ENDIF *-- pozitia 7 (ultima din meniul combinat) e ultimul element din submeniu -> MFIN_MANUAL_COD lnOptiuneSimulat = 7 lnOptiuneVerificare = m.lnOptiuneSimulat - OCCURS(';', m.lcOptiuniMeniuAnte) lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare) IF m.lcTip == 'MFIN_MANUAL_COD' DO WriteTestLog WITH 'OK P3c: pozitia 7 din meniul combinat = MFIN_MANUAL_COD' ELSE DO WriteTestLog WITH 'FAIL P3c: pozitia 7 combinata a dat [' + m.lcTip + '], asteptat MFIN_MANUAL_COD' gnEsecuri = gnEsecuri + 1 ENDIF *================================================================== * Pas 4: verifica_partener_show_info - structura mesajului, pe obiecte fabricate *================================================================== LOCAL loPart *-- 4a: sursa ANAF, atribut RO nepotrivit (neplatitor + cod RO) -> *** ATENTIE ***, *-- Mesaj ANAF completat, identificare PARTIALA (telefon/fax/cod postal goale -> absente) loPart = CREATEOBJECT("empty") ADDPROPERTY(loPart, "firma", "FIRMA UNU SRL") ADDPROPERTY(loPart, "sursa", "ANAF") ADDPROPERTY(loPart, "data_sursa", {}) ADDPROPERTY(loPart, "platitortvamfin", .F.) ADDPROPERTY(loPart, "datatvamfin", "") ADDPROPERTY(loPart, "PlatitorTVA", .F.) ADDPROPERTY(loPart, "tvaincasare", .T.) ADDPROPERTY(loPart, "splittva", .F.) ADDPROPERTY(loPart, "inactiv", .F.) ADDPROPERTY(loPart, "stare", "ANULAT DIN OFICIU - TEST") ADDPROPERTY(loPart, "adresa", "STR TEST NR 1") ADDPROPERTY(loPart, "judet", "BUCURESTI") ADDPROPERTY(loPart, "regcom", "J40/1/2020") ADDPROPERTY(loPart, "codpostal", "") ADDPROPERTY(loPart, "telefon", "") ADDPROPERTY(loPart, "fax", "") ADDPROPERTY(loPart, "eroare", "") gcMockUltimMesaj = '' verifica_partener_show_info(m.loPart, 'RO1234567', 'FIRMA UNU SRL', '') IF 'ANAF: FIRMA UNU SRL' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4a1: prefix sursa "ANAF: " pe linia denumirii' ELSE DO WriteTestLog WITH 'FAIL P4a1: prefixul ANAF lipseste din mesaj' gnEsecuri = gnEsecuri + 1 ENDIF IF '*** ATENTIE ***' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4a2: *** ATENTIE *** prezent (atribut RO nepotrivit)' ELSE DO WriteTestLog WITH 'FAIL P4a2: *** ATENTIE *** lipseste pentru atribut RO nepotrivit' gnEsecuri = gnEsecuri + 1 ENDIF IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj AND '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4a3: cele 3 titluri de sectiune sunt prezente' ELSE DO WriteTestLog WITH 'FAIL P4a3: lipseste cel putin un titlu de sectiune - [' + m.gcMockUltimMesaj + ']' gnEsecuri = gnEsecuri + 1 ENDIF IF 'Mesaj ANAF: ANULAT DIN OFICIU - TEST' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4a4: Mesaj ANAF completat cand stare e nevida' ELSE DO WriteTestLog WITH 'FAIL P4a4: linia Mesaj ANAF lipseste sau e gresita' gnEsecuri = gnEsecuri + 1 ENDIF IF NOT ('Cod postal:' $ m.gcMockUltimMesaj) AND NOT ('Telefon:' $ m.gcMockUltimMesaj) AND NOT ('Fax:' $ m.gcMockUltimMesaj) DO WriteTestLog WITH 'OK P4a5: liniile pentru campurile goale (cod postal/telefon/fax) lipsesc' ELSE DO WriteTestLog WITH 'FAIL P4a5: cel putin un camp gol si-a pastrat linia - [' + m.gcMockUltimMesaj + ']' gnEsecuri = gnEsecuri + 1 ENDIF IF 'Adresa: STR TEST NR 1' $ m.gcMockUltimMesaj AND 'Judet: BUCURESTI' $ m.gcMockUltimMesaj AND 'Reg. comertului: J40/1/2020' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4a6: campurile completate (adresa/judet/reg. comertului) apar' ELSE DO WriteTestLog WITH 'FAIL P4a6: lipseste cel putin un camp completat de identificare' gnEsecuri = gnEsecuri + 1 ENDIF *-- 4b: sursa CACHE cu data, platitor+cod RO potrivite dar INACTIV -> *** ATENTIE *** pt. inactiv, *-- fara proprietatile de perioada ANAF (ramura Else din verifica_partener_show_info), *-- identificare COMPLETA (toate cele 6 campuri completate) loPart = CREATEOBJECT("empty") ADDPROPERTY(loPart, "firma", "FIRMA DOI SRL") ADDPROPERTY(loPart, "sursa", "CACHE") ADDPROPERTY(loPart, "data_sursa", {^2026-08-21}) ADDPROPERTY(loPart, "platitortvamfin", .T.) ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") ADDPROPERTY(loPart, "PlatitorTVA", .T.) ADDPROPERTY(loPart, "tvaincasare", .F.) ADDPROPERTY(loPart, "splittva", .F.) ADDPROPERTY(loPart, "inactiv", .T.) ADDPROPERTY(loPart, "stare", "") ADDPROPERTY(loPart, "adresa", "STR DOI NR 2") ADDPROPERTY(loPart, "judet", "CLUJ") ADDPROPERTY(loPart, "regcom", "J12/2/2015") ADDPROPERTY(loPart, "codpostal", "400000") ADDPROPERTY(loPart, "telefon", "0264000000") ADDPROPERTY(loPart, "fax", "0264000001") ADDPROPERTY(loPart, "eroare", "") gcMockUltimMesaj = '' verifica_partener_show_info(m.loPart, 'RO7654321', 'FIRMA DOI SRL', '') IF 'CACHE 21/08/2026: FIRMA DOI SRL' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4b1: prefix sursa "CACHE dd/mm/yyyy: " pe linia denumirii' ELSE DO WriteTestLog WITH 'FAIL P4b1: prefixul CACHE lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']' gnEsecuri = gnEsecuri + 1 ENDIF IF '*** ATENTIE ***' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4b2: *** ATENTIE *** prezent (inactiv)' ELSE DO WriteTestLog WITH 'FAIL P4b2: *** ATENTIE *** lipseste pentru partener inactiv' gnEsecuri = gnEsecuri + 1 ENDIF IF 'Mesaj ANAF:' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'FAIL P4b3: linia Mesaj ANAF apare desi stare e goala' gnEsecuri = gnEsecuri + 1 ELSE DO WriteTestLog WITH 'OK P4b3: linia Mesaj ANAF lipseste cand stare e goala' ENDIF IF 'Cod postal: 400000' $ m.gcMockUltimMesaj AND 'Telefon: 0264000000' $ m.gcMockUltimMesaj AND 'Fax: 0264000001' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4b4: identificare completa (cod postal/telefon/fax completate) apare integral' ELSE DO WriteTestLog WITH 'FAIL P4b4: lipseste cel putin un camp de identificare completat' gnEsecuri = gnEsecuri + 1 ENDIF *-- 4c: sursa CACHE_INDISP, fara atentie, IDENTIFICARE complet goala -> sectiunea lipseste loPart = CREATEOBJECT("empty") ADDPROPERTY(loPart, "firma", "FIRMA TREI SRL") ADDPROPERTY(loPart, "sursa", "CACHE_INDISP") ADDPROPERTY(loPart, "data_sursa", {^2026-08-20}) ADDPROPERTY(loPart, "platitortvamfin", .T.) ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") ADDPROPERTY(loPart, "PlatitorTVA", .T.) ADDPROPERTY(loPart, "tvaincasare", .F.) ADDPROPERTY(loPart, "splittva", .F.) ADDPROPERTY(loPart, "inactiv", .F.) ADDPROPERTY(loPart, "stare", "") ADDPROPERTY(loPart, "adresa", "") ADDPROPERTY(loPart, "judet", "") ADDPROPERTY(loPart, "regcom", "") ADDPROPERTY(loPart, "codpostal", "") ADDPROPERTY(loPart, "telefon", "") ADDPROPERTY(loPart, "fax", "") ADDPROPERTY(loPart, "eroare", "") gcMockUltimMesaj = '' verifica_partener_show_info(m.loPart, 'RO1112223', 'FIRMA TREI SRL', '') IF 'CACHE 20/08/2026 (ANAF indisponibil): FIRMA TREI SRL' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4c1: prefix "CACHE dd/mm/yyyy (ANAF indisponibil): " pe linia denumirii' ELSE DO WriteTestLog WITH 'FAIL P4c1: prefixul CACHE_INDISP lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']' gnEsecuri = gnEsecuri + 1 ENDIF IF '*** ATENTIE ***' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'FAIL P4c2: *** ATENTIE *** apare desi codul si starea sunt consistente' gnEsecuri = gnEsecuri + 1 ELSE DO WriteTestLog WITH 'OK P4c2: *** ATENTIE *** absent cand nu e cazul' ENDIF IF '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'FAIL P4c3: sectiunea IDENTIFICARE apare desi toate campurile ei sunt goale' gnEsecuri = gnEsecuri + 1 ELSE DO WriteTestLog WITH 'OK P4c3: sectiunea IDENTIFICARE lipseste cand toate campurile ei sunt goale' ENDIF IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj DO WriteTestLog WITH 'OK P4c4: sectiunile TVA/STARE FIRMA raman prezente' ELSE DO WriteTestLog WITH 'FAIL P4c4: lipseste sectiunea TVA sau STARE FIRMA' gnEsecuri = gnEsecuri + 1 ENDIF *-- 4d: fara proprietatea sursa (stil mfinante.ro) -> fara prefix pe linia denumirii loPart = CREATEOBJECT("empty") ADDPROPERTY(loPart, "firma", "FIRMA PATRU SRL") ADDPROPERTY(loPart, "platitortvamfin", .T.) ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") ADDPROPERTY(loPart, "PlatitorTVA", .T.) ADDPROPERTY(loPart, "tvaincasare", .F.) ADDPROPERTY(loPart, "splittva", .F.) ADDPROPERTY(loPart, "inactiv", .F.) ADDPROPERTY(loPart, "stare", "") ADDPROPERTY(loPart, "adresa", "") ADDPROPERTY(loPart, "judet", "") ADDPROPERTY(loPart, "regcom", "") ADDPROPERTY(loPart, "codpostal", "") ADDPROPERTY(loPart, "telefon", "") ADDPROPERTY(loPart, "fax", "") ADDPROPERTY(loPart, "eroare", "") gcMockUltimMesaj = '' verifica_partener_show_info(m.loPart, 'RO4445556', 'FIRMA PATRU SRL', '') IF 'FIRMA PATRU SRL' $ m.gcMockUltimMesaj AND NOT ('ANAF:' $ m.gcMockUltimMesaj) AND NOT ('CACHE' $ m.gcMockUltimMesaj) DO WriteTestLog WITH 'OK P4d: fara proprietatea sursa, linia denumirii nu are niciun prefix' ELSE DO WriteTestLog WITH 'FAIL P4d: mesajul are un prefix desi obiectul nu are proprietatea sursa' gnEsecuri = gnEsecuri + 1 ENDIF DO WriteTestLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)') CATCH TO loEx DO WriteTestLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure DO WriteTestLog WITH 'TOTAL FAIL: exceptie neasteptata' ENDTRY QUIT ********************************************************** PROCEDURE WriteTestLog LPARAMETERS tcMsg LOCAL lcL SET SAFETY OFF lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '') STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog) ENDPROC ********************************************************** PROCEDURE WriteTestErr LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo DO WriteTestLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo) ENDPROC