* test_s4d_zi_curs.prg * Headless: S4d - data cursului valutar, reactiva (frm_facturare_articole2, v2). * Acopera direct: metoda noua do_actualizeaza_vizibilitate_curs (COMUN\clase\ofacturare.vc2) * si proprietatea noua loRezultat.lForteazaCursVizibil pusa de incarca_cursor_articole * (COMUN\programe\ofacturare.prg:444-637) la eroarea Oracle -20005. * * Cazuri: * T1. incarca_cursor_articole, mock Oracle -20005 (FARA/-1/20005) -> loRezultat.lForteazaCursVizibil = .T. * T2. incarca_cursor_articole, mock succes (PLIN/1/0) -> loRezultat.lForteazaCursVizibil = .F. * T3. incarca_cursor_articole, mock alta eroare (FARA/-1/1400) -> loRezultat.lForteazaCursVizibil = .F. * T4. do_actualizeaza_vizibilitate_curs, poDate.in_valuta = 1 -> Visible = .T. * T5. do_actualizeaza_vizibilitate_curs, in_valuta=0, 0 linii tip_valuta=1 -> Visible = .F. * T6. do_actualizeaza_vizibilitate_curs, in_valuta=0, 1 linie tip_valuta=1 -> Visible = .T. (apare reactiv) * T7. dupa stergerea liniei din T6 -> Visible = .F. (dispare reactiv) * T8. do_actualizeaza_vizibilitate_curs(.T.), in_valuta=0, 0 linii tip_valuta=1 -> Visible = .T. (fortare -20005) * T9. formular pe retur (tip 8): clb_zi_curs eliminat la Init; do_actualizeaza_vizibilitate_curs() * nu arunca eroare (garda do_exista_obiect). * T10. do_incarca_articole (tip=4, mock Oracle -20005): Return .F., si daca clb_zi_curs.Visible e * citibil headless, verifica ca a devenit .T. (fortat de lForteazaCursVizibil). Citirea insasi * e proba - daca nu e citibila, cazul se raporteaza informativ, nu esec. * * Oracle NU se atinge pe calea articolelor: goExecutor -> oExecutorMock (mock_cursor_articole.prg, * deja folosit de test_s3_4_cursor_articole.prg si test_s4_3_incarca_filtrat.prg pentru exact acelasi * scenariu -20005). poGeneratorNumere -> oGeneratorMock. amessagebox/facturi_duplicate -> * mock_validare_antet.prg (T10, valideaza_antet ruleaza REAL). * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4d_zi_curs.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4d_zi_curs.log * Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8; gnScadereStoc = 1. SET SAFETY OFF SET TALK OFF SET NOTIFY OFF PUBLIC gcLog, gnFail, gnPass, gnErr, gcCaz, gcErr PUBLIC gcMockApeluri, gnMockNumar, gcMockSql, gnMockSucces, gnMockEroare, gcMockMod, gcMockCurs PUBLIC gnMockRaspuns, gcMockDuplicat, goExecutorReal gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4d_zi_curs.log" IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out") MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out" ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) gnFail = 0 gnPass = 0 gnErr = 0 gcCaz = "" gcErr = "" gcMockApeluri = "" gnMockNumar = 0 gcMockSql = "" gnMockSucces = 1 gnMockEroare = 0 gcMockMod = "PLIN" gcMockCurs = "" gnMockRaspuns = 6 gcMockDuplicat = "" ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0 DO AfLog WITH "FAIL: conexiune Oracle esuata" DO Final ENDIF LOCAL lcProc lcProc = SET("PROCEDURE") SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg", ; "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_cursor_articole.prg", ; &lcProc, "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_generator_numere.prg" IF !actualizeaza_optiuni_program() DO AfLog WITH "FAIL: actualizeaza_optiuni_program()" DO Final ENDIF gnIdUtil = 8 goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]) gnScadereStoc = 1 DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE update_jtva_coloane([JV], [jtva_coloane_temp]) PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize plVizibil = .F. pnTotalDiscountAvize = 0 poGeneratorNumere = CREATEOBJECT("oGeneratorMock") poDate = NULL goExecutorReal = goExecutor goExecutor = CREATEOBJECT("oExecutorMock") goExecutor.oReal = goExecutorReal DO TestFlagEroare WITH "T1", 1, "FARA", -1, 20005, .T. DO TestFlagEroare WITH "T2", 1, "PLIN", 1, 0, .F. DO TestFlagEroare WITH "T3", 1, "FARA", -1, 1400, .F. DO TestVizibilitate DO TestRetur DO TestIncarcaArticoleEroare DO Final *---------------------------------------------------------------------------------------- * T1-T3: proprietatea noua loRezultat.lForteazaCursVizibil pe incarca_cursor_articole. PROCEDURE TestFlagEroare LPARAMETERS tcCaz, tnTip, tcMod, tnSucces, tnEroare, tlAsteptat LOCAL loRez gcCaz = "[" + tcCaz + " mod=" + tcMod + " succes=" + TRANSFORM(tnSucces) + " eroare=" + TRANSFORM(tnEroare) + "] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH tnTip, tcMod, tnSucces, tnEroare, 0 loRez = incarca_cursor_articole(tnTip, .F., poGeneratorNumere) DO Assert WITH VARTYPE(loRez) = 'O', "incarca_cursor_articole a intors obiect" IF VARTYPE(loRez) <> 'O' RETURN ENDIF DO Assert WITH PEMSTATUS(loRez, 'lForteazaCursVizibil', 5), "lForteazaCursVizibil materializata pe loRezultat" DO Assert WITH loRez.lForteazaCursVizibil = tlAsteptat, "lForteazaCursVizibil = " + TRANSFORM(tlAsteptat) + " (obtinut: " + TRANSFORM(loRez.lForteazaCursVizibil) + ")" DO Assert WITH loRez.nSucces = tnSucces, "nSucces = " + TRANSFORM(tnSucces) + " (obtinut: " + TRANSFORM(loRez.nSucces) + ")" ENDPROC *---------------------------------------------------------------------------------------- * T4-T8: matricea de vizibilitate a do_actualizeaza_vizibilitate_curs pe formularul instantiat. PROCEDURE TestVizibilitate LOCAL loForm, llVal, lnErrAntes, llCitibil gcCaz = "[T4-T8 vizibilitate] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 1, "PLIN", 1, 0, 0 loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' RETURN ENDIF DO Assert WITH loForm.do_exista_obiect('clb_zi_curs'), "clb_zi_curs prezent (tip normal, nu retur)" * T4: in_valuta = 1 -> vizibil neconditionat poDate.in_valuta = 1 loForm.do_actualizeaza_vizibilitate_curs() DO Assert WITH gnErr = 0, "T4 fara eroare (gcErr: " + gcErr + ")" lnErrAntes = gnErr llVal = .F. llVal = loForm.clb_zi_curs.Visible llCitibil = (gnErr = lnErrAntes) IF llCitibil DO Assert WITH llVal, "T4: clb_zi_curs.Visible = .T. cu in_valuta=1" ELSE DO AfLog WITH "INFO T4: clb_zi_curs.Visible nu s-a putut citi headless (eroare la citire)" ENDIF * T5: in_valuta = 0, 0 linii tip_valuta=1 -> ascuns poDate.in_valuta = 0 loForm.do_actualizeaza_vizibilitate_curs() DO Assert WITH gnErr = 0, "T5 fara eroare (gcErr: " + gcErr + ")" IF llCitibil llVal = loForm.clb_zi_curs.Visible DO Assert WITH !llVal, "T5: clb_zi_curs.Visible = .F. cu in_valuta=0 si 0 linii valuta" ENDIF * T6: adauga o linie tip_valuta=1 -> apare reactiv SELECT crsfactura APPEND BLANK REPLACE id_temp WITH 1, id_c WITH 0, id_articol WITH 501, denumire WITH "ARTICOL VALUTA T6", ; cantitate WITH 1, cu_tva WITH 0, tip_valuta WITH 1, Curs WITH 5, multiplicator WITH 1, ; pretftva WITH 100, pretctva WITH 119, vpretftva WITH 20, vpretctva WITH 23.80, ; proc_Tvav WITH 1.19 loForm.do_actualizeaza_vizibilitate_curs() DO Assert WITH gnErr = 0, "T6 fara eroare (gcErr: " + gcErr + ")" IF llCitibil llVal = loForm.clb_zi_curs.Visible DO Assert WITH llVal, "T6: clb_zi_curs.Visible = .T. dupa adaugarea unei linii tip_valuta=1" ENDIF * T7: sterge linia -> dispare reactiv SELECT crsfactura LOCATE FOR id_articol = 501 IF FOUND() DELETE ENDIF loForm.do_actualizeaza_vizibilitate_curs() DO Assert WITH gnErr = 0, "T7 fara eroare (gcErr: " + gcErr + ")" IF llCitibil llVal = loForm.clb_zi_curs.Visible DO Assert WITH !llVal, "T7: clb_zi_curs.Visible = .F. dupa stergerea liniei tip_valuta=1" ENDIF * T8: fortare (semnal -20005) cu in_valuta=0 si 0 linii valuta -> vizibil oricum loForm.do_actualizeaza_vizibilitate_curs(.T.) DO Assert WITH gnErr = 0, "T8 fara eroare (gcErr: " + gcErr + ")" IF llCitibil llVal = loForm.clb_zi_curs.Visible DO Assert WITH llVal, "T8: clb_zi_curs.Visible = .T. cu tlForteazaVizibil=.T., indiferent de continutul grilei" ENDIF IF !llCitibil DO AfLog WITH "DATORIE: clb_zi_curs.Visible nu s-a putut verifica headless in T4-T8 (proba doar structurala: gnErr=0 pe fiecare apel)" ENDIF loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- * T9: pe retur (tip 8), clb_zi_curs e eliminat la Init; metoda noua nu trebuie sa arunce eroare. PROCEDURE TestRetur LOCAL loForm gcCaz = "[T9 retur tip=8] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 8, "PLIN", 1, 0, 0 loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2 (tip retur)" IF VARTYPE(loForm) <> 'O' RETURN ENDIF DO Assert WITH !loForm.do_exista_obiect('clb_zi_curs'), "clb_zi_curs eliminat la Init pe retur (tip 8)" loForm.do_actualizeaza_vizibilitate_curs() DO Assert WITH gnErr = 0, "do_actualizeaza_vizibilitate_curs() pe retur nu arunca eroare (gcErr: " + gcErr + ")" loForm.do_actualizeaza_vizibilitate_curs(.T.) DO Assert WITH gnErr = 0, "do_actualizeaza_vizibilitate_curs(.T.) pe retur nu arunca eroare (gcErr: " + gcErr + ")" loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- * T10: do_incarca_articole pe un tip care CHEAMA incarca_cursor_articole (nu e in llCautareInLinie), * cu mock Oracle -20005. Verifica Return .F. si, daca citibil, revenirea vizibila a campului. PROCEDURE TestIncarcaArticoleEroare LOCAL loForm, llRezultat, llVal, lnErrAntes, llCitibil gcCaz = "[T10 do_incarca_articole tip=4, mock -20005] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 4, "FARA", -1, 20005, 0 loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2 (tip=4)" IF VARTYPE(loForm) <> 'O' RETURN ENDIF llRezultat = loForm.do_incarca_articole() DO Assert WITH !llRezultat, "do_incarca_articole() Return .F. pe eroare Oracle -20005" DO Assert WITH !EMPTY(gcMockSql), "incarca_cursor_articole a fost apelat (gcMockSql nevid) pe tip=4" IF loForm.do_exista_obiect('clb_zi_curs') lnErrAntes = gnErr llVal = .F. llVal = loForm.clb_zi_curs.Visible llCitibil = (gnErr = lnErrAntes) IF llCitibil DO Assert WITH llVal, "T10: clb_zi_curs.Visible = .T. dupa -20005 in do_incarca_articole (fortat de lForteazaCursVizibil)" ELSE DO AfLog WITH "DATORIE: clb_zi_curs.Visible nu s-a putut verifica headless in T10" ENDIF ELSE DO AfLog WITH "INFO T10: clb_zi_curs nu exista pe formularul instantiat (tip=4 neasteptat sa-l elimine)" ENDIF loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- PROCEDURE Reseteaza LPARAMETERS tnTip, tcMod, tnSucces, tnEroare, tnInValuta LOCAL lnIdSet DO Inchide WITH 'crsarticole' DO Inchide WITH 'crsarticole1' DO Inchide WITH 'crsfactura' DO Inchide WITH 'crscursuri' DO Inchide WITH 'crspolitici' DO Inchide WITH 'crscontracte' DO Inchide WITH 'crsgestiunidest' DO Inchide WITH 'crsCtrTemp' DO Inchide WITH 'CrsCotaTva' SELECT 0 IF !USED('saft_tip_facturi') CREATE CURSOR saft_tip_facturi (cod N(3) NULL, tip_saftname C(200) NULL) INSERT INTO saft_tip_facturi (cod, tip_saftname) VALUES (NULL, '') INDEX ON cod TAG cod ENDIF DO creeaza_facturacrs WITH 'crsfactura' SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE USE IN crsfactura SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE USE IN crsfact_tmp gcMockApeluri = "" gcMockSql = "" gcMockCurs = "" gcErr = "" gnMockNumar = 100 gnMockRaspuns = 6 gcMockDuplicat = "" gcMockMod = tcMod gnMockSucces = tnSucces gnMockEroare = tnEroare lnIdSet = 29000 + tnTip poDate = NULL poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip) poDate.dataireg = DATE(gnAn, gnLuna, 1) poDate.dataact = poDate.dataireg poDate.zi_curs = poDate.dataireg poDate.id_fdoc = 1 poDate.fdoc = "FEL TEST" poDate.nract = 79 poDate.serie_act = "TST" poDate.id_client = 1 poDate.id_furnizor = 1 poDate.nrfactachi = 1 poDate.id_valuta = 1 poDate.in_valuta = tnInValuta poDate.listaid = "1" poGeneratorNumere.ResetNumere() poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) gcMockApeluri = "" ENDPROC PROCEDURE Inchide LPARAMETERS tcAlias IF USED(tcAlias) USE IN (tcAlias) ENDIF ENDPROC PROCEDURE Assert LPARAMETERS tlCond, tcMsg IF tlCond gnPass = gnPass + 1 DO AfLog WITH "PASS: " + gcCaz + tcMsg ELSE gnFail = gnFail + 1 DO AfLog WITH "FAIL: " + gcCaz + tcMsg ENDIF ENDPROC PROCEDURE AfLog LPARAMETERS tcMsg STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1) ENDPROC PROCEDURE AfErr LPARAMETERS tnErr, tcMsg, tcProg, tnLine gcErr = gcErr + TRANSFORM(tnErr) + " " + tcMsg + " (" + TRANSFORM(tcProg) + ":" + TRANSFORM(tnLine) + ")" + CHR(13) + CHR(10) gnErr = gnErr + 1 DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg ENDPROC PROCEDURE Final IF TYPE('goExecutorReal') = 'O' goExecutor = goExecutorReal ENDIF DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " err=" + TRANSFORM(gnErr) DO AfLog WITH "END " + TTOC(DATETIME()) QUIT ENDPROC