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
366 lines
14 KiB
Plaintext
366 lines
14 KiB
Plaintext
* 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
|