Files
comun/utile/Teste/facturare_unificat/test_s4_3_neregresie_masa.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
2026-09-09 21:38:25 +03:00

234 lines
8.4 KiB
Plaintext

* test_s4_3_neregresie_masa.prg
* Headless: do_incarca_articole pe frm_facturare_articole2 PASTREAZA apelul incarca_cursor_articole pe
* tipurile care nu sunt lista de preturi (comanda 3, avize 4, contract 2) - comportament identic cu S3-4b.
* Verifica ramificarea introdusa de S4-3: pe aceste tipuri se executa incarcarea in masa (probat prin
* gcMockSql care contine {call pack_facturare.cursor_comanda/cursor_avize/cursor_contract}), crsfactura se
* populeaza din cursorul mockuit, lArticoleIncarcate devine .T. si butonul se ascunde.
*
* Cazuri (toate cu listaid = "1", ca sa treaca valideaza_antet - aceste tipuri cer comanda/avizul/contractul):
* C1. tip 3 (comanda) -> Return .T., 'cursor_comanda' $ gcMockSql, crsfactura populat, lArticoleIncarcate=.T., buton .F.
* C2. tip 4 (avize) -> Return .T., 'cursor_avize' $ gcMockSql, la fel.
* C3. tip 2 (contract) -> Return .T., 'cursor_contract' $ gcMockSql, la fel (mock PLIN2: crsarticole1 pentru
* Insert Into crscontracte din incarca_cursor_articole).
*
* Oracle NU se atinge pe calea articolelor/generatorului: goExecutor -> oExecutorMock (mock_cursor_articole.prg),
* poGeneratorNumere -> oGeneratorMock (mock_generator_numere.prg). amessagebox/facturi_duplicate ->
* mock_validare_antet.prg. oAntetFacturare.valideaza_antet ruleaza REAL.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4_3_neregresie_masa.prg"
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4_3_neregresie_masa.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_s4_3_neregresie_masa.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_TIP3", 3, "PLIN", "cursor_comanda"
DO Caz WITH "C2_TIP4", 4, "PLIN", "cursor_avize"
DO Caz WITH "C3_TIP2", 2, "PLIN2", "cursor_contract"
DO Final
*----------------------------------------------------------------------------------------
PROCEDURE Caz
LPARAMETERS tcCaz, tnTip, tcMockMod, tcCursorSql
LOCAL loForm, llRezultat
gcCaz = "[" + tcCaz + "] "
DO AfLog WITH "PAS: " + gcCaz
DO Reseteaza WITH tnTip, tcMockMod
loForm = CREATEOBJECT('frm_facturare_articole2')
DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2"
IF VARTYPE(loForm) <> 'O'
RETURN
ENDIF
DO Assert WITH PEMSTATUS(loForm, 'lArticoleIncarcate', 5), "lArticoleIncarcate materializata"
DO Assert WITH !loForm.lArticoleIncarcate, "lArticoleIncarcate = .F. la Createobject"
DO Assert WITH ObjExists(loForm, 'but_incarca_articole'), "but_incarca_articole prezent"
DO Assert WITH loForm.but_incarca_articole.Visible, "but_incarca_articole vizibil la Createobject"
DO Assert WITH USED('crsfactura') AND RECCOUNT('crsfactura') = 0, "crsfactura deschis dar gol inainte de do_incarca_articole"
llRezultat = loForm.do_incarca_articole()
DO Assert WITH llRezultat, "Return .T. pe antet valid"
DO Assert WITH !EMPTY(gcMockSql), "incarca_cursor_articole a fost apelat - gcMockSql nevid"
DO Assert WITH tcCursorSql $ gcMockSql, "apel pe " + tcCursorSql + " in gcMockSql: " + STRTRAN(ALLTRIM(gcMockSql), CHR(13) + CHR(10), " | ")
DO Assert WITH USED('crsarticole') AND RECCOUNT('crsarticole') > 0, "crsarticole populat dupa succes (sursa incarcarii in masa)"
DO Assert WITH loForm.lArticoleIncarcate, "lArticoleIncarcate = .T. dupa succes"
DO Assert WITH !loForm.but_incarca_articole.Visible, "but_incarca_articole invizibil dupa succes"
DO Assert WITH UPPER(loForm.grd_factura.RecordSource) == 'CRSFACTURA', "grd_factura.RecordSource = crsfactura"
loForm.Release()
RELEASE loForm
ENDPROC
*----------------------------------------------------------------------------------------
PROCEDURE Reseteaza
LPARAMETERS tnTip, tcMockMod
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 = tcMockMod
gnMockSucces = 1
gnMockEroare = 0
lnIdSet = 25000 + tnTip - 1 + gnScadereStoc * 10
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
FUNCTION ObjExists
LPARAMETERS toForm, tcName
LOCAL i
FOR i = 1 TO toForm.Objects.Count
IF UPPER(toForm.Objects(i).Name) == UPPER(tcName)
RETURN .T.
ENDIF
ENDFOR
RETURN .F.
ENDFUNC
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