* test_s4e_2_verifica_articol.prg * Headless: do_verifica_articol pe frm_facturare_articole2 (COMUN\clase\ofacturare.vc2) primeste * articolul ca parametru explicit (toArticol), decizia 44 - in loc sa citeasca Private-ul poArticol * populat de apelant. Testul construieste poArticol ad-hoc (CREATEOBJECT('Empty') + AddProperty), * FARA sa declare Private poArticol in scopul apelant, si verifica ca metoda produce acelasi verdict * ca inainte de schimbare pe un tabel de cazuri care acopera dimensiunile din nota_executie_s4e.md ยง8: * gestionabil (0/1), cantitate (<=0 / >0), opt_facturare (0/3), poDate.tip (3/8/2). * * Conditia din cod (neschimbata ca logica, doar poArticol -> toArticol): * (cantitate>=0 SI tip IN(8,9)) -> refuz (stoc) * SAU (cantitate<=0 SI NOT(tip=2 SI opt_facturare=3) SI tip NOT IN(8,9) * SI gestionabil=1 SI gnScadereStoc=1 SI NOT llFacturareFaraStoc) -> refuz (stoc) * altfel -> accept * * Cazuri (tlContract = .F., gnScadereStoc = 1, gnRF_FACTURARE_FARA_STOC nesetat): * C1. RETUR_POZITIV tip=8 cant=5 gest=1 opt=0 -> refuz (cantitate pozitiva pe retur) * C2. STOC_INSUFICIENT tip=3 cant=-1 gest=1 opt=0 -> refuz (cazul normal de "nu e pe stoc") * C3. NEGESTIONABIL tip=3 cant=-1 gest=0 opt=0 -> accept (articol negestionabil, fara plafon) * C4. CANTITATE_POZITIVA tip=3 cant=5 gest=1 opt=0 -> accept (cantitate pozitiva pe tip normal) * C5. CONTRACT_OPT3 tip=2 cant=-1 gest=1 opt=3 -> accept (exceptia pret fixat prin contract) * C6. CONTRACT_OPT0 tip=2 cant=-1 gest=1 opt=0 -> refuz (fara exceptia opt_facturare=3) * C7. RETUR_NEPOZITIV tip=8 cant=-1 gest=1 opt=0 -> accept (retur cu cantitate nepozitiva) * * amessagebox e mocat (mock_validare_antet.prg, ADITIV inainte in SET PROCEDURE) ca sa nu apara * dialogul real "Acest articol nu este pe stoc!" - apelul se verifica prin gcMockApeluri, nu vizual. * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4e_2_verifica_articol.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_2_verifica_articol.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_s4e_2_verifica_articol.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 Caz WITH "C1_RETUR_POZITIV", 8, 1, 0, 5, .T. DO Caz WITH "C2_STOC_INSUFICIENT", 3, 1, 0, -1, .T. DO Caz WITH "C3_NEGESTIONABIL", 3, 0, 0, -1, .F. DO Caz WITH "C4_CANTITATE_POZITIVA", 3, 1, 0, 5, .F. DO Caz WITH "C5_CONTRACT_OPT3", 2, 1, 3, -1, .F. DO Caz WITH "C6_CONTRACT_OPT0", 2, 1, 0, -1, .T. DO Caz WITH "C7_RETUR_NEPOZITIV", 8, 1, 0, -1, .F. DO Final *---------------------------------------------------------------------------------------- * tnTip, tnGestionabil, tnOptFacturare, tnCantitate, tlAsteptatRefuz (.T. = trebuie refuzat) PROCEDURE Caz LPARAMETERS tcCaz, tnTip, tnGestionabil, tnOptFacturare, tnCantitate, tlAsteptatRefuz LOCAL loForm, llRezultat, loArticol gcCaz = "[" + tcCaz + "] " DO AfLog WITH "PAS: " + gcCaz DO Reseteaza WITH tnTip loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' RETURN ENDIF loArticol = CREATEOBJECT('Empty') AddProperty(loArticol, 'gestionabil', tnGestionabil) AddProperty(loArticol, 'opt_facturare', tnOptFacturare) AddProperty(loArticol, 'id_articol', 1) AddProperty(loArticol, 'denumire', 'ARTICOL TEST') AddProperty(loArticol, 'nume_lista_preturi', 'LISTA TEST') gcMockApeluri = "" llRezultat = loForm.do_verifica_articol(loArticol, .F., tnCantitate) IF tlAsteptatRefuz DO Assert WITH !llRezultat, "Return .F. (refuz) asteptat" DO Assert WITH "amessagebox(" $ gcMockApeluri, "mesaj de stoc afisat (mocat)" ELSE DO Assert WITH llRezultat, "Return .T. (accept) asteptat" DO Assert WITH !("amessagebox(" $ gcMockApeluri), "niciun mesaj de stoc afisat" ENDIF loForm.Release() RELEASE loForm 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' SELECT 0 * cboTipFactura (frm_facturare_articole2) cere RowSource pe saft_tip_facturi la constructie 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 = "PLIN" gnMockSucces = 1 gnMockEroare = 0 lnIdSet = 25000 + 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 = 77 poDate.serie_act = "TST" poDate.id_client = 1 poDate.id_furnizor = 1 poDate.nrfactachi = 1 poDate.id_valuta = 1 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