* test_s4e_registru.prg * Headless: S4e-4 - proba de neregresie a registrului, FARA COD NOU (nota_executie_s4e.md, * sectiunea "S4e-4 - proba de neregresie a registrului", ~:451). Dovedeste pe RULARE, nu pe * definitie de camp, ca do_sterge (COMUN\clase\ofacturare.vc2:20391-20458) si structura produsa * de creeaza_facturacrs (COMUN\programe\ofacturare_comun.prg:1782-1798) raman corecte. * * Trei asertiuni: * A1. Dupa APPEND BLANK pe un cursor creat de creeaza_facturacrs: id_c=0 si opt_facturare=0 * (campuri N() fara NULL, deci implicit 0 la APPEND BLANK - verificat pe rulare). * A2. crsarticole cu 3 randuri de comanda (id_c 1..3); crsfactura cu o linie de comanda (id_c=2) * si una libera (id_c=0). do_sterge pe linia LIBERA lasa Calculate Sum(cantitate) peste * crsarticole NESCHIMBAT (REPLACE ... For id_c=0 nu gaseste niciun rand in crsarticole). * do_sterge pe linia de COMANDA creste crsarticole.cantitate la id_c=2 cu exact cantitatea * stearsa - ramura atinsa: "Case (gnScadereStoc=1 And poDate.tip=23) Or Inlist(poDate.tip, * 3,4,21,25,28,42,47)" (ofacturare.vc2:20432). * A3. Sum(crsarticole.cantitate) inainte si dupa adaugarea a doua linii libere in crsfactura: * identic (liniile libere nu ating deloc crsarticole - cursoare separate). * * Sablon urmat: test_s4_5_do_sterge_garda.prg (garda Used(lcCursor) din do_sterge, deja verificata * acolo - nu se reia aici). Dupa fiecare Calculate/Sum se face GO TOP IN crsarticole (Calculate muta * Recno() la EOF pe cursorul afectat). * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4e_registru.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_registru.log * Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8 inainte de creeaza_cursor_serii; gnScadereStoc = 1. SET SAFETY OFF SET TALK OFF SET NOTIFY OFF PUBLIC gcLog, gnFail, gnPass, gnErr, gcCaz, gcErr PUBLIC gcMockApeluri, gnMockRaspuns, gcMockDuplicat, gnMockNumar PUBLIC gnPc, gnPVal, gnPPretV, gnScadereStoc, gnMemProcDisc gnMockNumar = 0 gnPc = 2 gnPVal = 2 gnPPretV = 4 gnScadereStoc = 1 gnMemProcDisc = 0 gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_registru.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 = "" 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_generator_numere.prg", &lcProc IF !actualizeaza_optiuni_program() DO AfLog WITH "FAIL: actualizeaza_optiuni_program()" DO Final ENDIF gnIdUtil = 8 gnIdSucursala = 167 goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]) gnScadereStoc = 1 DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) + " gnIdSucursala=" + TRANSFORM(gnIdSucursala) 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 IF USED('jtva_coloane') USE IN jtva_coloane ENDIF CREATE CURSOR jtva_coloane (id_jtva_coloana N(14), denumire C(50), cota_tva N(6,2)) INSERT INTO jtva_coloane VALUES (190, 'TVA 19%', 19) INSERT INTO jtva_coloane VALUES (210, 'TVA 21%', 21) INSERT INTO jtva_coloane VALUES (110, 'TVA 11%', 11) GO TOP IN jtva_coloane PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize plVizibil = .F. pnTotalDiscountAvize = 0 poDate = NULL poGeneratorNumere = CREATEOBJECT("oGeneratorMock") DO TestA1 DO TestA2 DO TestA3 DO Final *---------------------------------------------------------------------------------------- * A1: pe rulare, nu pe definitie de camp - APPEND BLANK pe crsfactura creat de creeaza_facturacrs * trebuie sa produca id_c=0 si opt_facturare=0 (ambele N() fara NULL in ofacturare_comun.prg:1782-1798). PROCEDURE TestA1 LOCAL lnIdC, lnOptFact gcCaz = "[A1: APPEND BLANK pe crsfactura din creeaza_facturacrs] " DO AfLog WITH "PAS: " + gcCaz DO Inchide WITH 'crstest_a1' DO creeaza_facturacrs WITH 'crstest_a1' DO Assert WITH USED('crstest_a1'), "cursorul a fost creat de creeaza_facturacrs" SELECT crstest_a1 APPEND BLANK lnIdC = id_c lnOptFact = opt_facturare DO Assert WITH lnIdC = 0, "id_c = 0 dupa APPEND BLANK (obtinut: " + TRANSFORM(lnIdC) + ")" DO Assert WITH lnOptFact = 0, "opt_facturare = 0 dupa APPEND BLANK (obtinut: " + TRANSFORM(lnOptFact) + ")" DO Inchide WITH 'crstest_a1' ENDPROC *---------------------------------------------------------------------------------------- * A2: do_sterge pe tip=3 (comanda), crsarticole cu 3 randuri (id_c 1..3), crsfactura cu o linie * de comanda (id_c=2) si una libera (id_c=0). * - stergerea liniei LIBERE: Calculate Sum(cantitate) peste crsarticole ramane neschimbat. * - stergerea liniei de COMANDA: crsarticole.cantitate la id_c=2 creste cu exact cantitatea stearsa. PROCEDURE TestA2 LOCAL loForm, lnSumInainte, lnSumDupa, lnCantId2Inainte, lnCantId2Dupa gcCaz = "[A2: do_sterge - linie libera vs linie de comanda] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 3 SELECT 0 CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ; gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ; preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ; Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ; codmat C(50), codbare C(50), nume_val C(20)) INSERT INTO crsarticole VALUES (1, 401, "ARTICOL 1", 5, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM401", "", "RON") INSERT INTO crsarticole VALUES (2, 402, "ARTICOL 2", 7, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM402", "", "RON") INSERT INTO crsarticole VALUES (3, 403, "ARTICOL 3", 3, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM403", "", "RON") GO TOP IN crsarticole loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' RETURN ENDIF SELECT crsfactura APPEND BLANK REPLACE id_temp WITH 1, id_c WITH 2, id_articol WITH 402, denumire WITH "ARTICOL 2", ; cantitate WITH 4, opt_facturare WITH 0 APPEND BLANK REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 999, denumire WITH "LINIE LIBERA", ; cantitate WITH 2, opt_facturare WITH 0 DO Assert WITH RECCOUNT('crsfactura') = 2, "crsfactura are 2 randuri (comanda + libera)" *-- pas 1: sterge linia LIBERA (id_c=0) - Sum(crsarticole.cantitate) ramane neschimbat SELECT crsarticole CALCULATE SUM(cantitate) TO lnSumInainte GO TOP IN crsarticole SELECT crsfactura LOCATE FOR id_c = 0 DO Assert WITH FOUND(), "linia libera (id_c=0) gasita in crsfactura" gnErr = 0 gcErr = "" gnMockRaspuns = 6 loForm.do_sterge() DO Assert WITH gnErr = 0, "do_sterge (linie libera) fara eroare" DO Assert WITH RECCOUNT('crsfactura') = 1, "linia libera a fost stearsa din crsfactura" SELECT crsarticole CALCULATE SUM(cantitate) TO lnSumDupa GO TOP IN crsarticole DO Assert WITH lnSumDupa = lnSumInainte, "Sum(crsarticole.cantitate) neschimbat dupa stergerea liniei LIBERE (inainte=" + ; TRANSFORM(lnSumInainte) + " dupa=" + TRANSFORM(lnSumDupa) + ")" *-- pas 2: sterge linia de COMANDA (id_c=2) - crsarticole.cantitate la id_c=2 creste cu exact cantitatea stearsa (4) SELECT crsarticole LOCATE FOR id_c = 2 lnCantId2Inainte = cantitate GO TOP IN crsarticole SELECT crsfactura LOCATE FOR id_c = 2 DO Assert WITH FOUND(), "linia de comanda (id_c=2) gasita in crsfactura" gnErr = 0 gcErr = "" gnMockRaspuns = 6 loForm.do_sterge() DO Assert WITH gnErr = 0, "do_sterge (linie comanda) fara eroare" DO Assert WITH RECCOUNT('crsfactura') = 0, "linia de comanda a fost stearsa din crsfactura" SELECT crsarticole LOCATE FOR id_c = 2 lnCantId2Dupa = cantitate GO TOP IN crsarticole DO Assert WITH lnCantId2Dupa = lnCantId2Inainte + 4, "crsarticole.cantitate la id_c=2 a crescut cu exact 4 (inainte=" + ; TRANSFORM(lnCantId2Inainte) + " dupa=" + TRANSFORM(lnCantId2Dupa) + ")" DO Inchide WITH 'crsarticole' loForm.Release() RELEASE loForm ENDPROC *---------------------------------------------------------------------------------------- * A3: adaugarea a doua linii libere (id_c=0) in crsfactura nu atinge deloc crsarticole - * Sum(crsarticole.cantitate) identic inainte/dupa. PROCEDURE TestA3 LOCAL lnSumInainte, lnSumDupa gcCaz = "[A3: Sum(crsarticole) neschimbat de adaugarea liniilor libere] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH 3 SELECT 0 CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ; gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ; preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ; Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ; codmat C(50), codbare C(50), nume_val C(20)) INSERT INTO crsarticole VALUES (1, 401, "ARTICOL 1", 5, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM401", "", "RON") INSERT INTO crsarticole VALUES (2, 402, "ARTICOL 2", 7, 1, 0, 100, 0, 1.19, 0, "BUC", ; 21, "371", 1, 0, 1, 1, 0, 0, "CM402", "", "RON") GO TOP IN crsarticole SELECT crsarticole CALCULATE SUM(cantitate) TO lnSumInainte GO TOP IN crsarticole SELECT crsfactura APPEND BLANK REPLACE id_temp WITH 1, id_c WITH 0, id_articol WITH 991, denumire WITH "LIBERA 1", ; cantitate WITH 6, opt_facturare WITH 0 APPEND BLANK REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 992, denumire WITH "LIBERA 2", ; cantitate WITH 9, opt_facturare WITH 0 DO Assert WITH RECCOUNT('crsfactura') = 2, "cele doua linii libere au fost adaugate in crsfactura" SELECT crsarticole CALCULATE SUM(cantitate) TO lnSumDupa GO TOP IN crsarticole DO Assert WITH lnSumDupa = lnSumInainte, "Sum(crsarticole.cantitate) identic inainte/dupa adaugarea a 2 linii libere (inainte=" + ; TRANSFORM(lnSumInainte) + " dupa=" + TRANSFORM(lnSumDupa) + ")" DO Inchide WITH 'crsarticole' ENDPROC *---------------------------------------------------------------------------------------- PROCEDURE Reseteaza LPARAMETERS tnTip 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' DO Inchide WITH 'saft_tip_facturi' 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 = "" gcErr = "" gnErr = 0 gnMockRaspuns = 6 gcMockDuplicat = "" lnIdSet = 28000 + 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 = 0 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 DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " err=" + TRANSFORM(gnErr) DO AfLog WITH "END " + TTOC(DATETIME()) QUIT ENDPROC