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
234 lines
9.7 KiB
Plaintext
234 lines
9.7 KiB
Plaintext
* test_s5c_rutare_copiere.prg
|
|
* Headless (-A -T), static, FARA Oracle: probeaza RUTAREA copierii unui document, nu formularul.
|
|
* Testul UI existent instantiaza frm_facturare_articole2 direct si sare peste rutarea din
|
|
* factureaza() - de aceea nu a prins ca scrie_legatura_proforma() lipsea de pe calea reala (v1).
|
|
* R1 - copiere_factura cheama factureaza(toFactura.Tip, toFactura), fara plFacturareNoua
|
|
* R2 - plFacturareNoua e declarat Private numai in Clase\ofundal_facturare.vc2 (doua situri)
|
|
* si nu apare deloc in COMUN\programe\oproceduri_facturare.prg
|
|
* R3 - deci pe calea de copiere llFacturareNoua = .F. -> se emite pe frm_facturare_articole (v1)
|
|
* R4 - completeaza_setari_document(toFactura, .T.) se cheama INAINTE de comutarea v1/v2,
|
|
* deci poDate.lProformaSursa se ridica si pe traseul v1
|
|
* R5 - scrie_legatura_proforma() apare de doua ori in ofacturare.vc2: o data in v1, o data in v2
|
|
* R6 - in do_scrie_factura din v1 apelul e conditionat de If m.llReturn si e inainte de
|
|
* do_inchide_tranzactie(1) (aceeasi tranzactie)
|
|
* R7 - acelasi lucru in do_scrie_factura din v2 (neregresie fata de S5c)
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s5c_rutare_copiere.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s5c_rutare_copiere.log
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
PUBLIC gcLog, gnFail, gnPass, gnSarit, gcCaz, gcVc2, gcPrgRut, gcPrgFact, gcFundal
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s5c_rutare_copiere.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
|
|
gnSarit = 0
|
|
gcCaz = ""
|
|
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
|
|
gcVc2 = "D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vc2"
|
|
gcPrgRut = "D:\ROA\ROAFACTURARE\COMUN\programe\oproceduri_facturare.prg"
|
|
gcPrgFact = "D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare.prg"
|
|
gcFundal = "D:\ROA\ROAFACTURARE\Clase\ofundal_facturare.vc2"
|
|
|
|
DO TestCopiereFaraSteagulNou
|
|
DO TestSteagulNouDoarPeButoaneleNoi
|
|
DO TestSemnalulSeSeteazaInainteDeRutare
|
|
DO TestApelPeAmbeleFormulare
|
|
DO TestApelInV1
|
|
DO TestApelInV2
|
|
|
|
DO Final
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* R1: copiere_factura ruteaza catre factureaza fara sa ridice plFacturareNoua
|
|
PROCEDURE TestCopiereFaraSteagulNou
|
|
LOCAL lcTxt, lcProc
|
|
gcCaz = "[R1 copiere_factura -> factureaza fara plFacturareNoua] "
|
|
lcTxt = FILETOSTR(gcPrgRut)
|
|
IF EMPTY(lcTxt)
|
|
DO Assert WITH .F., "FILETOSTR oproceduri_facturare.prg a esuat/gol"
|
|
RETURN
|
|
ENDIF
|
|
lcProc = Fereastra(lcTxt, "PROCEDURE copiere_factura", "ENDPROC")
|
|
IF EMPTY(lcProc)
|
|
DO Assert WITH .F., "nu s-a putut izola PROCEDURE copiere_factura"
|
|
RETURN
|
|
ENDIF
|
|
DO AfLog WITH "DIAG R1: copiere_factura len=" + TRANSFORM(LEN(lcProc))
|
|
DO Assert WITH "factureaza(toFactura.Tip, toFactura)" $ lcProc, ;
|
|
"copiere_factura cheama factureaza(toFactura.Tip, toFactura)"
|
|
DO Assert WITH OCCURS("plFacturareNoua", lcTxt) = 0, ;
|
|
"plFacturareNoua nu apare in oproceduri_facturare.prg, ocurente=" + ;
|
|
TRANSFORM(OCCURS("plFacturareNoua", lcTxt))
|
|
ENDPROC
|
|
|
|
* R2 + R3: steagul e ridicat numai de butoanele "Facturare (nou)" / "Avize (nou)"
|
|
PROCEDURE TestSteagulNouDoarPeButoaneleNoi
|
|
LOCAL lcFundal, lcFact
|
|
gcCaz = "[R2/R3 plFacturareNoua ridicat numai in ofundal_facturare] "
|
|
lcFundal = FILETOSTR(gcFundal)
|
|
lcFact = FILETOSTR(gcPrgFact)
|
|
IF EMPTY(lcFundal) OR EMPTY(lcFact)
|
|
DO Assert WITH .F., "FILETOSTR ofundal_facturare.vc2 / ofacturare.prg a esuat/gol"
|
|
RETURN
|
|
ENDIF
|
|
DO Assert WITH OCCURS("Private plFacturareNoua", lcFundal) = 2, ;
|
|
"doua declaratii Private plFacturareNoua in ofundal_facturare.vc2, ocurente=" + ;
|
|
TRANSFORM(OCCURS("Private plFacturareNoua", lcFundal))
|
|
DO Assert WITH OCCURS("Private plFacturareNoua", lcFact) = 0, ;
|
|
"ofacturare.prg doar citeste steagul, nu il declara"
|
|
DO Assert WITH "llFacturareNoua = (Type('plFacturareNoua') = 'L'" $ lcFact, ;
|
|
"factureaza decide v1/v2 dupa Type('plFacturareNoua')"
|
|
* fara declaratie pe lantul de apel, Type() da 'U' -> llFacturareNoua = .F. -> v1
|
|
DO Assert WITH "ofrmdetaliifactura = Createobject('frm_facturare_articole2')" $ lcFact, ;
|
|
"ramura llFacturareNoua = .T. instantiaza v2 (deci ramura .F. ramane pe v1)"
|
|
ENDPROC
|
|
|
|
* R4: semnalul lProformaSursa se ridica inaintea comutarii v1/v2, deci si pe traseul v1
|
|
PROCEDURE TestSemnalulSeSeteazaInainteDeRutare
|
|
LOCAL lcTxt, lnSetare, lnComutare
|
|
gcCaz = "[R4 completeaza_setari_document inainte de comutarea v1/v2] "
|
|
lcTxt = FILETOSTR(gcPrgFact)
|
|
IF EMPTY(lcTxt)
|
|
DO Assert WITH .F., "FILETOSTR ofacturare.prg a esuat/gol"
|
|
RETURN
|
|
ENDIF
|
|
lnSetare = AT("poDate.completeaza_setari_document(m.toFactura, .T.)", lcTxt)
|
|
lnComutare = AT("llFacturareNoua = (Type('plFacturareNoua')", lcTxt)
|
|
DO Assert WITH lnSetare > 0, "completeaza_setari_document(m.toFactura, .T.) prezent, poz=" + TRANSFORM(lnSetare)
|
|
DO Assert WITH lnComutare > 0, "comutarea v1/v2 prezenta, poz=" + TRANSFORM(lnComutare)
|
|
IF lnSetare > 0 AND lnComutare > 0
|
|
DO Assert WITH lnSetare < lnComutare, ;
|
|
"semnalul se ridica INAINTE de rutare (comun ambelor formulare), setare=" + ;
|
|
TRANSFORM(lnSetare) + " comutare=" + TRANSFORM(lnComutare)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
* R5: apelul exista pe ambele formulare, cate o singura data
|
|
PROCEDURE TestApelPeAmbeleFormulare
|
|
LOCAL lcTxt, lcV1, lcV2
|
|
gcCaz = "[R5 apelul e si pe v1 si pe v2] "
|
|
lcTxt = FILETOSTR(gcVc2)
|
|
IF EMPTY(lcTxt)
|
|
DO Assert WITH .F., "FILETOSTR ofacturare.vc2 a esuat/gol"
|
|
RETURN
|
|
ENDIF
|
|
DO Assert WITH OCCURS("scrie_legatura_proforma()", lcTxt) = 2, ;
|
|
"doua apeluri scrie_legatura_proforma() in ofacturare.vc2, ocurente=" + ;
|
|
TRANSFORM(OCCURS("scrie_legatura_proforma()", lcTxt))
|
|
lcV1 = FereastraClasa(lcTxt, 1)
|
|
lcV2 = FereastraClasa(lcTxt, 2)
|
|
DO Assert WITH !EMPTY(lcV1), "clasa frm_facturare_articole (v1) izolata"
|
|
DO Assert WITH !EMPTY(lcV2), "clasa frm_facturare_articole2 (v2) izolata"
|
|
IF !EMPTY(lcV1)
|
|
DO Assert WITH OCCURS("scrie_legatura_proforma()", lcV1) = 1, ;
|
|
"un apel in clasa v1, ocurente=" + TRANSFORM(OCCURS("scrie_legatura_proforma()", lcV1))
|
|
ENDIF
|
|
IF !EMPTY(lcV2)
|
|
DO Assert WITH OCCURS("scrie_legatura_proforma()", lcV2) = 1, ;
|
|
"un apel in clasa v2, ocurente=" + TRANSFORM(OCCURS("scrie_legatura_proforma()", lcV2))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
* R6: pozitia si conditia apelului in do_scrie_factura din v1
|
|
PROCEDURE TestApelInV1
|
|
gcCaz = "[R6 v1: apel conditionat, inainte de COMMIT] "
|
|
DO VerificaMetoda WITH 1, "If m.llReturn"
|
|
ENDPROC
|
|
|
|
* R7: acelasi lucru in v2 (neregresie)
|
|
PROCEDURE TestApelInV2
|
|
gcCaz = "[R7 v2: apel conditionat, inainte de COMMIT] "
|
|
DO VerificaMetoda WITH 2, "If llReturn"
|
|
ENDPROC
|
|
|
|
PROCEDURE VerificaMetoda
|
|
LPARAMETERS tnVersiune, tcGarda
|
|
LOCAL lcTxt, lcClasa, lcMetoda, lnApel, lnCommit, lcSecventa
|
|
lcTxt = FILETOSTR(gcVc2)
|
|
lcClasa = FereastraClasa(lcTxt, tnVersiune)
|
|
IF EMPTY(lcClasa)
|
|
DO Assert WITH .F., "clasa nu s-a putut izola"
|
|
RETURN
|
|
ENDIF
|
|
lcMetoda = Fereastra(lcClasa, CHR(9) + "PROCEDURE do_scrie_factura" + CHR(13), CHR(9) + "ENDPROC")
|
|
IF EMPTY(lcMetoda)
|
|
DO Assert WITH .F., "nu s-a putut izola do_scrie_factura"
|
|
RETURN
|
|
ENDIF
|
|
DO AfLog WITH "DIAG: do_scrie_factura v" + TRANSFORM(tnVersiune) + " len=" + TRANSFORM(LEN(lcMetoda))
|
|
lnApel = AT("scrie_legatura_proforma()", lcMetoda)
|
|
lnCommit = AT("Thisform.do_inchide_tranzactie(1)", lcMetoda)
|
|
DO Assert WITH lnApel > 0, "apelul e in do_scrie_factura, poz=" + TRANSFORM(lnApel)
|
|
DO Assert WITH lnCommit > 0, "do_inchide_tranzactie(1) prezent, poz=" + TRANSFORM(lnCommit)
|
|
IF lnApel > 0 AND lnCommit > 0
|
|
DO Assert WITH lnApel < lnCommit, ;
|
|
"apelul e INAINTE de do_inchide_tranzactie(1), apel=" + TRANSFORM(lnApel) + ;
|
|
" commit=" + TRANSFORM(lnCommit)
|
|
ENDIF
|
|
lcSecventa = tcGarda + CHR(13) + CHR(10) + REPLICATE(CHR(9), 4) + "llReturn = scrie_legatura_proforma()"
|
|
DO Assert WITH lcSecventa $ lcMetoda, ;
|
|
"apelul e in ramura " + tcGarda + " (nu neconditionat)"
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* felie de text intre un marcaj de start si primul marcaj de sfarsit de dupa el
|
|
FUNCTION Fereastra
|
|
LPARAMETERS tcTxt, tcStart, tcEnd
|
|
LOCAL lnStart, lnEnd
|
|
lnStart = AT(tcStart, tcTxt)
|
|
IF lnStart = 0
|
|
RETURN ""
|
|
ENDIF
|
|
lnEnd = AT(tcEnd, SUBSTR(tcTxt, lnStart))
|
|
IF lnEnd = 0
|
|
RETURN ""
|
|
ENDIF
|
|
RETURN SUBSTR(tcTxt, lnStart, lnEnd + LEN(tcEnd) - 1)
|
|
ENDFUNC
|
|
|
|
* corpul clasei frm_facturare_articole (tnVersiune = 1) sau frm_facturare_articole2 (tnVersiune = 2)
|
|
FUNCTION FereastraClasa
|
|
LPARAMETERS tcTxt, tnVersiune
|
|
LOCAL lnV1, lnV2
|
|
lnV1 = AT("DEFINE CLASS frm_facturare_articole AS", tcTxt)
|
|
lnV2 = AT("DEFINE CLASS frm_facturare_articole2 AS", tcTxt)
|
|
IF lnV1 = 0 OR lnV2 = 0 OR lnV1 >= lnV2
|
|
RETURN ""
|
|
ENDIF
|
|
IF tnVersiune = 1
|
|
RETURN SUBSTR(tcTxt, lnV1, lnV2 - lnV1)
|
|
ENDIF
|
|
RETURN SUBSTR(tcTxt, lnV2)
|
|
ENDFUNC
|
|
|
|
PROCEDURE Assert
|
|
LPARAMETERS tlCond, tcMsg
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
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
|
|
gnFail = gnFail + 1
|
|
DO AfLog WITH "ERROR " + gcCaz + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
|
ENDPROC
|
|
PROCEDURE Final
|
|
DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " sarit=" + TRANSFORM(gnSarit)
|
|
DO AfLog WITH "END " + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|