Verificare ANAF: raspunsul 404 citit, intrerupator cand serviciul nu raspunde
Serviciul ANAF intoarce HTTP 404 cu corp complet pentru codurile inexistente
({"found":[],"notFound":[...]}), iar wrapper-ul citea corpul doar pe 200 - deci
verdictul "cod inexistent" nu aparea niciodata. Corpul se citeste acum la orice
status, iar verdictul se da doar cand notFound contine chiar codul interogat;
orice alt corp neinteles inseamna "nu a raspuns", nu acuzatie.
Timeout-uri reale pe apelurile web (2/2/3/3): garda Pemstatus din jurul lui
SetTimeouts intoarce .F. pe obiectul COM legat tarziu, deci timeout-urile nu se
aplicau, iar o gazda care inghite pachetele bloca interfata ~21 s per rand.
Aceleasi timeout-uri si pe drumul batch. Fallback-ul Microsoft.XMLHTTP, fara
timeout, a fost scos de pe calea single.
Cand serviciul nu raspunde, verificarile se opresc 10 minute si banda arata ca
au fost sarite, in loc sa taca. La deschiderea formularului pleaca o sonda
asincrona de disponibilitate, cu termen de viata, guard de reintrare si Abort()
la inchidere; randul care asteapta verdictul nu face apel propriu. Cache doar pe
rezultate pozitive. Codul fiscal nenumeric primeste mesaj propriu, in banda si
in detaliile F4.
ParseJsonANAFv8 restaureaza formatul datei si pe calea de eroare (o exceptie
lasa toata sesiunea pe YMD).
Teste: suita headless 70/70, cu sonda si clasele de esec mock-uite (fara retea)
si fixture peste corpurile 404 masurate pe serviciul real.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
This commit is contained in:
@@ -13,9 +13,17 @@
|
||||
* verifica intai goCacheANAF_Sesiune - cache-hit NU ajunge aici).
|
||||
* runda 12: tdData (data documentului, trimisa de ANAF_StarePartener) e retinuta in gdANAFUltimaData,
|
||||
* ca testul sa poata verifica ca data ajunge efectiv la wrapper.
|
||||
* T7/lane E (handoff_anaf_404.md): al 4-lea parametru tcClasaEsec, prin referinta, identic cu wrapper-ul
|
||||
* real ('' / 'FARA_RASPUNS' / 'RASPUNS_NEINTELES'). Simulare clasa de esec: daca valoarea din
|
||||
* goANAFMockData pentru o cheie e STRING (nu obiect), e tratata ca nume de clasa de esec - mock-ul
|
||||
* intoarce .NULL. cu tcClasaEsec = acea valoare, fara sa atinga tlNegasit (ramane .F., ca la wrapper-ul
|
||||
* real pe caile FARA_RASPUNS/RASPUNS_NEINTELES). Restul (CUI neconfigurat = "cod inexistent" simulat) e
|
||||
* neschimbat.
|
||||
FUNCTION ANAF_VerificaCuiSingle
|
||||
LPARAMETERS tcCui, tdData
|
||||
LOCAL lcCui, lcKey
|
||||
LPARAMETERS tcCui, tdData, tlNegasit, tcClasaEsec
|
||||
LOCAL lcCui, lcKey, luItem
|
||||
tlNegasit = .F.
|
||||
tcClasaEsec = ''
|
||||
IF TYPE('goANAFMockData') <> 'O'
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
@@ -28,7 +36,54 @@ FUNCTION ANAF_VerificaCuiSingle
|
||||
lcCui = NormalizeazaCUI(m.tcCui)
|
||||
lcKey = 'C' + m.lcCui
|
||||
IF goANAFMockData.GetKey(m.lcKey) = 0
|
||||
RETURN .NULL. && CUI neconfigurat - simuleaza "fara raspuns" (degradare tacuta)
|
||||
tlNegasit = .T. && CUI neconfigurat - simuleaza raspunsul ANAF "cod inexistent"
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
RETURN goANAFMockData.Item(m.lcKey)
|
||||
luItem = goANAFMockData.Item(m.lcKey)
|
||||
IF VARTYPE(m.luItem) = 'C'
|
||||
tcClasaEsec = m.luItem && simuleaza esecul wrapper-ului (FARA_RASPUNS / RASPUNS_NEINTELES)
|
||||
RETURN .NULL.
|
||||
ENDIF
|
||||
RETURN m.luItem
|
||||
ENDFUNC
|
||||
|
||||
* T7/lane E, dupa T5/sonda (handoff_anaf_404.md): mock peste sonda asincrona de disponibilitate
|
||||
* (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste, validare.prg) - fara mock, Activeaza()
|
||||
* ar face un apel HTTP real (winHTTP async) la fiecare test cu starea NECUNOSCUT. Globalele de
|
||||
* control (gcMockSondaModo, glMockSondaActiva, gnMockSondaPornireCount, glMockSondaGataManual,
|
||||
* glMockSondaReusitaManual) se construiesc INLINE in programul principal (acelasi motiv ca mai sus).
|
||||
* Mod 'AUTO' (implicit): sonda "raspunde" instant cu succes la primul ANAF_SondaVerifica() - transparent
|
||||
* pentru scenariile care nu testeaza explicit sonda. Mod 'MANUAL': testul controleaza explicit daca/cand
|
||||
* "a sosit raspunsul" (glMockSondaGataManual) si cu ce rezultat (glMockSondaReusitaManual) - foloseste
|
||||
* pentru S2 (sonda in aer)/S3 (sonda reuseste)/S4 (sonda expira).
|
||||
FUNCTION ANAF_SondaPorneste
|
||||
IF TYPE('gnMockSondaPornireCount') = 'N'
|
||||
gnMockSondaPornireCount = gnMockSondaPornireCount + 1
|
||||
ENDIF
|
||||
glMockSondaActiva = .T.
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION ANAF_SondaAuSositRaspunsul
|
||||
IF TYPE('glMockSondaActiva') <> 'L' OR !glMockSondaActiva
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
|
||||
RETURN glMockSondaGataManual
|
||||
ENDIF
|
||||
RETURN .T. && AUTO: raspunde imediat
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION ANAF_SondaAReusit
|
||||
IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
|
||||
RETURN glMockSondaReusitaManual
|
||||
ENDIF
|
||||
RETURN .T. && AUTO: succes implicit
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION ANAF_SondaOpreste
|
||||
LOCAL llOprita
|
||||
llOprita = (TYPE('glMockSondaActiva') = 'L' AND glMockSondaActiva)
|
||||
glMockSondaActiva = .F.
|
||||
RETURN m.llOprita
|
||||
ENDFUNC
|
||||
|
||||
@@ -24,12 +24,22 @@
|
||||
* 1234567890128 TEST ANAF PERSFIZ - CNP valid, persoana fizica - fara verificare ANAF
|
||||
* 1234567890123 TEST ANAF CNP INVALID - persoana fizica cu CNP invalid
|
||||
* 1234567 TEST ANAF CIF INVALID - persoana juridica cu CIF invalid
|
||||
* RO9000055 TEST ANAF CADERE SRL - S5 (handoff_anaf_404.md): esec ANAF simulat, apoi verdict
|
||||
* normal dupa revenirea serviciului (gnIdCadere)
|
||||
* TEST NENUMERIC OIL MARKET SRL TEST ANAF NENUMERIC SRL - cod fiscal nenumeric in loc de CIF, acelasi
|
||||
* tipar ca (dar NU acelasi text ca) cazul real FANALEX din
|
||||
* design-alegere-partener-anaf.md, gnIdNenumeric. ATENTIE: nu
|
||||
* refolosi textul EXACT "FANALEX OIL MARKET S.R.L." - coincide
|
||||
* cu un partener real preexistent in schema (ID_PART=2026,
|
||||
* STERS=0, cu randuri CORESP_TIP_PART reale) folosit la
|
||||
* investigatia initiala a bug-ului - un DELETE pe acel text
|
||||
* sterge date reale, nu de test (descoperit 27.07.2026).
|
||||
*
|
||||
* NOTA ID_PART: NOM_PARTENERI are trigger BEFORE INSERT (trg_NOM_PARTENERI_befoins) care
|
||||
* SUPRASCRIE ID_PART cu seq_NOM_PARTENERI.nextval, indiferent de valoarea din INSERT - ID-urile
|
||||
* nu pot fi alese explicit. Testul insereaza FARA ID_PART si citeste ID-ul real alocat dupa
|
||||
* insert (dupa COD_FISCAL, care e sub controlul testului) - gnIdConcord/gnIdDiscord/gnIdPereche/
|
||||
* gnIdNopereche/gnIdPersfiz (PUBLIC).
|
||||
* gnIdNopereche/gnIdPersfiz/gnIdCadere/gnIdNenumeric (PUBLIC).
|
||||
*
|
||||
* Scenarii de decizie (RUNDA 11): dialogul propriu (anaf_dialog) a fost inlocuit cu AMESSAGEBOX
|
||||
* tip 3+48 (Da/Nu/Abandon) si 1+48 (OK/Abandon) cand nu exista pereche. Raspunsul se impune prin
|
||||
@@ -113,10 +123,31 @@ ADDPROPERTY(loRespNoPereche, 'statusInactivi', .F.)
|
||||
ADDPROPERTY(loRespNoPereche, 'denumire', 'NOPERECHE SRL ANAF')
|
||||
ADDPROPERTY(loRespNoPereche, 'mesaj', '')
|
||||
goANAFMockData.Add(loRespNoPereche, 'C9000004')
|
||||
DO VpaLog WITH 'mock ANAF: 3 CUI-uri configurate (1112223, 7654320, 9000004)'
|
||||
LOCAL loRespInactiv
|
||||
loRespInactiv = CREATEOBJECT('Empty')
|
||||
ADDPROPERTY(loRespInactiv, 'cui', '9000012')
|
||||
ADDPROPERTY(loRespInactiv, 'scpTVA', .F.)
|
||||
ADDPROPERTY(loRespInactiv, 'statusInactivi', .T.)
|
||||
ADDPROPERTY(loRespInactiv, 'denumire', 'INACTIV SRL ANAF')
|
||||
ADDPROPERTY(loRespInactiv, 'mesaj', '')
|
||||
goANAFMockData.Add(loRespInactiv, 'C9000012')
|
||||
DO VpaLog WITH 'mock ANAF: 4 CUI-uri configurate (1112223, 7654320, 9000004, 9000012)'
|
||||
|
||||
PUBLIC gnIdConcord, gnIdDiscord, gnIdPereche, gnIdNopereche, gnIdPersfiz, gnIdSpatiu
|
||||
*-- T5/sonda (handoff_anaf_404.md): Activeaza() porneste sonda REALA (ANAF_SondaPorneste, validare.prg)
|
||||
*-- ori de cate ori starea e NECUNOSCUT - fara mock ar insemna apel HTTP real la fiecare test. Mod 'AUTO'
|
||||
*-- (implicit): sonda "raspunde" instant cu succes la primul ANAF_SondaVerifica() - transparent pentru
|
||||
*-- toate scenariile vechi (AsteaptaTimer cheama acum ANAF_SondaVerifica() inainte de VerificaRand, ca
|
||||
*-- anaf_timer.Timer). Mod 'MANUAL': S2/S3/S4 controleaza explicit gcMockSondaGataManual/ReusitaManual.
|
||||
PUBLIC gcMockSondaModo, glMockSondaActiva, gnMockSondaPornireCount, glMockSondaGataManual, glMockSondaReusitaManual
|
||||
gcMockSondaModo = 'AUTO'
|
||||
glMockSondaActiva = .F.
|
||||
gnMockSondaPornireCount = 0
|
||||
glMockSondaGataManual = .F.
|
||||
glMockSondaReusitaManual = .T.
|
||||
|
||||
PUBLIC gnIdConcord, gnIdDiscord, gnIdPereche, gnIdNopereche, gnIdPersfiz, gnIdSpatiu, gnIdInactiv, gnIdInexistent
|
||||
PUBLIC gnIdCnpInv, gnIdCifInv, gnMockInputBox, gnMockInputCount, gcMockUltimPrompt, gcMockInputSecventa
|
||||
PUBLIC gnIdCadere, gnIdNenumeric
|
||||
gnMockInputBox = 1
|
||||
gnMockInputCount = 0
|
||||
gcMockUltimPrompt = ''
|
||||
@@ -261,6 +292,21 @@ TRY
|
||||
DO RuleazaIzolat WITH 'VerificaDiscriminatorDocumente'
|
||||
DO RuleazaIzolat WITH 'VerificaB1LabelGolit'
|
||||
DO RuleazaIzolat WITH 'VerificaComutareOptiune'
|
||||
DO RuleazaIzolat WITH 'VerificaInactivCodCorect'
|
||||
DO RuleazaIzolat WITH 'VerificaCodInexistentANAF'
|
||||
|
||||
*=========================================================================
|
||||
* Scenariile T7 (handoff_anaf_404.md / plan-reparatie-anaf-404-breaker.md): intrerupatorul de
|
||||
* disponibilitate ANAF (S1, S5, S6) si codul fiscal nenumeric (P8)
|
||||
*=========================================================================
|
||||
DO RuleazaIzolat WITH 'VerificaStareCazutaZeroApeluri'
|
||||
DO RuleazaIzolat WITH 'VerificaBandaCazutDistinctaDePrompt'
|
||||
DO RuleazaIzolat WITH 'VerificaEsecNuSeCacheaza'
|
||||
DO RuleazaIzolat WITH 'VerificaCodNenumeric'
|
||||
DO RuleazaIzolat WITH 'VerificaFixtureContract404'
|
||||
DO RuleazaIzolat WITH 'VerificaSondaInAer'
|
||||
DO RuleazaIzolat WITH 'VerificaSondaReuseste'
|
||||
DO RuleazaIzolat WITH 'VerificaSondaExpira'
|
||||
|
||||
DO VpaLog WITH 'GATA - toate scenariile executate'
|
||||
DO HarnessStep WITH 4, 'toate scenariile executate'
|
||||
@@ -277,10 +323,14 @@ QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE CurataDateTest
|
||||
LOCAL lnOk
|
||||
lnOk = goExecutor.oExecuta([DELETE FROM NOM_PARTENERI WHERE COD_FISCAL IN ('RO1112223','7654320','RO7654320','RO 7654320','9000004','1234567890128','1234567890123','1234567')])
|
||||
*-- CORESP_TIP_PART are FK_CORESP_TIP_PART_001 catre NOM_PARTENERI - copilul se sterge inaintea
|
||||
*-- parintelui (ORA-02292), aceeasi lista de coduri in ambele instructiuni (lcCoduri).
|
||||
LOCAL lnOk, lnOkCoresp, lcCoduri
|
||||
lcCoduri = ['RO1112223','7654320','RO7654320','RO 7654320','9000004','9000012','9000039','1234567890128','1234567890123','1234567','RO9000055','TEST NENUMERIC OIL MARKET SRL']
|
||||
lnOkCoresp = goExecutor.oExecuta([DELETE FROM CORESP_TIP_PART WHERE ID_PART IN (SELECT ID_PART FROM NOM_PARTENERI WHERE COD_FISCAL IN (] + m.lcCoduri + [))])
|
||||
lnOk = goExecutor.oExecuta([DELETE FROM NOM_PARTENERI WHERE COD_FISCAL IN (] + m.lcCoduri + [)])
|
||||
=goExecutor.oExecuta('COMMIT')
|
||||
DO VpaLog WITH 'CurataDateTest: sters=' + TRANSFORM(m.lnOk)
|
||||
DO VpaLog WITH 'CurataDateTest: sters coresp_tip_part=' + TRANSFORM(m.lnOkCoresp) + ' nom_parteneri=' + TRANSFORM(m.lnOk)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaDateTest
|
||||
@@ -302,6 +352,12 @@ PROCEDURE CreeazaDateTest
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF NOPERECHE SRL','TEST ANAF NOPERECHE SRL','9000004',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF INACTIV SRL','TEST ANAF INACTIV SRL','9000012',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF INEXISTENT SRL','TEST ANAF INEXISTENT SRL','9000039',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF PERSFIZ','TEST ANAF PERSFIZ','1234567890128',0,0,0,2,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
@@ -311,27 +367,42 @@ PROCEDURE CreeazaDateTest
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF CIF INVALID SRL','TEST ANAF CIF INVALID SRL','1234567',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF CADERE SRL','TEST ANAF CADERE SRL','RO9000055',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||
[('TEST ANAF NENUMERIC SRL','TEST ANAF NENUMERIC SRL','TEST NENUMERIC OIL MARKET SRL',0,0,0,1,0,0)]
|
||||
=goExecutor.oExecuta(m.lcIns)
|
||||
=goExecutor.oExecuta('COMMIT')
|
||||
|
||||
gnIdConcord = 0
|
||||
gnIdDiscord = 0
|
||||
gnIdPereche = 0
|
||||
gnIdNopereche = 0
|
||||
gnIdInactiv = 0
|
||||
gnIdInexistent = 0
|
||||
gnIdPersfiz = 0
|
||||
gnIdSpatiu = 0
|
||||
gnIdCnpInv = 0
|
||||
gnIdCifInv = 0
|
||||
gnIdCadere = 0
|
||||
gnIdNenumeric = 0
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO 7654320'], @gnIdSpatiu)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO1112223'], @gnIdConcord)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '7654320'], @gnIdDiscord)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO7654320'], @gnIdPereche)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000004'], @gnIdNopereche)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000012'], @gnIdInactiv)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000039'], @gnIdInexistent)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890128'], @gnIdPersfiz)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890123'], @gnIdCnpInv)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567'], @gnIdCifInv)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO9000055'], @gnIdCadere)
|
||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'TEST NENUMERIC OIL MARKET SRL'], @gnIdNenumeric)
|
||||
DO VpaLog WITH 'CreeazaDateTest: id-uri alocate concord=' + TRANSFORM(gnIdConcord) + ' discord=' + TRANSFORM(gnIdDiscord) + ;
|
||||
' pereche=' + TRANSFORM(gnIdPereche) + ' spatiu=' + TRANSFORM(gnIdSpatiu) + ;
|
||||
' nopereche=' + TRANSFORM(gnIdNopereche) + ' persfiz=' + TRANSFORM(gnIdPersfiz)
|
||||
' nopereche=' + TRANSFORM(gnIdNopereche) + ' persfiz=' + TRANSFORM(gnIdPersfiz) + ;
|
||||
' cadere=' + TRANSFORM(gnIdCadere) + ' nenumeric=' + TRANSFORM(gnIdNenumeric)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE PornesteCautare
|
||||
@@ -369,24 +440,13 @@ PROCEDURE PornesteCautare
|
||||
goFormT.Show()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- RUNDA 17 (B3): cu cmd_select prezent labelul ii ia coordonatele, iar inaltimea formei NU mai creste
|
||||
IF TYPE('goFormT.cmd_select') = 'O'
|
||||
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala ;
|
||||
AND goFormT.lb_anaf.Top = goFormT.cmd_select.Top ;
|
||||
AND goFormT.lb_anaf.Left = goFormT.cmd_select.Left ;
|
||||
AND goFormT.lb_anaf.Height = goFormT.cmd_select.Height ;
|
||||
AND goFormT.lb_anaf.Anchor = 14
|
||||
DO VpaLog WITH 'PASS activare: lb_anaf pe coordonatele cmd_select, inaltimea formei neschimbata (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL activare: lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height) + ;
|
||||
' (initiala=' + TRANSFORM(m.lnInaltimeInitiala) + ')'
|
||||
ENDIF
|
||||
*-- labelul primeste banda lui proprie sub grid: forma creste cu 54, iar banda are fundal propriu
|
||||
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala + 54 ;
|
||||
AND goFormT.lb_anaf.Anchor = 14 AND goFormT.lb_anaf.BackStyle = 1
|
||||
DO VpaLog WITH 'PASS activare: lb_anaf creat in banda proprie, forma marita cu 54px (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
||||
ELSE
|
||||
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala + 38
|
||||
DO VpaLog WITH 'PASS activare (fara cmd_select): lb_anaf creat, forma marita cu 38px (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL activare (fara cmd_select): lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height)
|
||||
ENDIF
|
||||
DO VpaLog WITH 'FAIL activare: lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height) + ;
|
||||
' (initiala=' + TRANSFORM(m.lnInaltimeInitiala) + ')'
|
||||
ENDIF
|
||||
|
||||
*-- RUNDA 11: geometria label-ului DUPA Show() - bug-ul live era ca Anchor setat inainte de Top
|
||||
@@ -412,8 +472,12 @@ PROCEDURE AsteaptaTimer
|
||||
*-- intern), nu pompari discrete. Apel DIRECT VerificaRand(.F.) - echivalent functional cu
|
||||
*-- "timerul s-a declansat" - ca sa testez restul logicii (verdict/cache/dialog). Debounce-ul
|
||||
*-- PROPRIU-ZIS (timerul reseteaza la fiecare navigare) e verificat separat, fara acest apel.
|
||||
*-- T5/sonda: ANAF_SondaVerifica() INAINTE de VerificaRand, exact ca anaf_timer.Timer (ocautare.prg) -
|
||||
*-- altfel o sonda pornita de Activeaza() (stare NECUNOSCUT) n-ar mai fi rezolvata niciodata in acest
|
||||
*-- runtime headless si ar bloca toate scenariile vechi in banda "se verifica...".
|
||||
LOCAL loV
|
||||
loV = IIF(VARTYPE(m.toVerif) = 'O', m.toVerif, poVerifAlegere)
|
||||
ANAF_SondaVerifica()
|
||||
IF VARTYPE(m.loV) = 'O'
|
||||
m.loV.VerificaRand(.F.)
|
||||
ENDIF
|
||||
@@ -454,7 +518,7 @@ PROCEDURE VerificaCodInvalid
|
||||
DO AsteaptaTimer
|
||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||
*-- runda 17 (B2): eticheta primeste sufixul "F4 = detalii" si e BOLD (avertisment), ca discordanta ANAF
|
||||
IF m.lcCap == 'CIF invalid (1234567) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold ;
|
||||
IF m.lcCap == CHR(149) + ' CIF invalid (1234567) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold ;
|
||||
AND gnANAFCallCount = m.lnInainte
|
||||
DO VpaLog WITH 'PASS cod-invalid-cif (B2): [' + m.lcCap + '] rosu, bold, fara apel ANAF'
|
||||
ELSE
|
||||
@@ -467,7 +531,7 @@ PROCEDURE VerificaCodInvalid
|
||||
goFormT._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer
|
||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||
IF m.lcCap == 'CNP invalid (1234567890123) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold
|
||||
IF m.lcCap == CHR(149) + ' CNP invalid (1234567890123) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold
|
||||
DO VpaLog WITH 'PASS cod-invalid-cnp (B2): [' + m.lcCap + '] rosu, bold'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-invalid-cnp (B2): [' + m.lcCap + '] ForeColor=' + TRANSFORM(goFormT.lb_anaf.ForeColor) + ' Bold=' + TRANSFORM(goFormT.lb_anaf.FontBold)
|
||||
@@ -478,10 +542,10 @@ PROCEDURE VerificaCodInvalid
|
||||
goFormT._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer
|
||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||
IF EMPTY(m.lcCap)
|
||||
DO VpaLog WITH 'PASS cod-valid-cnp: persoana fizica cu CNP valid - fara label, fara verificare ANAF'
|
||||
IF m.lcCap == CHR(149) + ' Verificare ANAF la alegerea partenerului (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(112,112,112)
|
||||
DO VpaLog WITH 'PASS cod-valid-cnp: persoana fizica cu CNP valid - banda revine la text neutru, fara verificare ANAF'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-valid-cnp: label neasteptat [' + m.lcCap + ']'
|
||||
DO VpaLog WITH 'FAIL cod-valid-cnp: label neasteptat [' + m.lcCap + '] ForeColor=' + TRANSFORM(goFormT.lb_anaf.ForeColor)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
@@ -553,10 +617,15 @@ PROCEDURE VerificaDebounce
|
||||
LOCATE FOR id_part = gnIdNopereche
|
||||
goFormT._GRID1.AfterRowColChange(1)
|
||||
DOEVENTS FORCE
|
||||
IF gnANAFCallCount = m.lnInainte
|
||||
DO VpaLog WITH 'PASS debounce: 3 navigari rapide, 0 apeluri ANAF noi (timer resetat de fiecare data)'
|
||||
*-- randurile intermediare (concord, discord) NU se verifica; banda isi face acum repaint la fiecare
|
||||
*-- schimbare de rand, iar repaint-ul pompeaza mesaje, deci timerul poate apuca sa se declanseze
|
||||
*-- pentru randul CURENT (nopereche) inainte de AsteaptaTimer - un singur apel, tot pe randul oprit.
|
||||
IF gnANAFCallCount <= m.lnInainte + 1 AND (gnANAFCallCount = m.lnInainte OR ALLTRIM(poVerifAlegere.cCui) == '9000004')
|
||||
DO VpaLog WITH 'PASS debounce: 3 navigari rapide, niciun apel pe randurile intermediare (apeluri noi=' + ;
|
||||
TRANSFORM(gnANAFCallCount - m.lnInainte) + ', CUI curent=' + ALLTRIM(poVerifAlegere.cCui) + ')'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL debounce: gnANAFCallCount a crescut cu ' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ' in timpul navigarii rapide'
|
||||
DO VpaLog WITH 'FAIL debounce: gnANAFCallCount a crescut cu ' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ;
|
||||
' in timpul navigarii rapide, CUI curent=' + ALLTRIM(poVerifAlegere.cCui)
|
||||
ENDIF
|
||||
DO AsteaptaTimer
|
||||
IF gnANAFCallCount = m.lnInainte + 1
|
||||
@@ -625,6 +694,13 @@ PROCEDURE VerificaDetalii
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL detalii-click: click simplu pe label nu a deschis detaliile'
|
||||
ENDIF
|
||||
*-- Detalii se incheie cu do_termin() (dupa Da/Nu se inchide cautarea) - formularul e Release-uit,
|
||||
*-- deci scenariile urmatoare au nevoie de unul nou.
|
||||
DO PregatesteFormularD1a
|
||||
SELECT ctestparteneri
|
||||
LOCATE FOR id_part = gnIdDiscord
|
||||
goFormT._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer
|
||||
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||
poVerifAlegere.Detalii()
|
||||
lcLog = FILETOSTR(gcUILog)
|
||||
@@ -644,6 +720,8 @@ ENDPROC
|
||||
PROCEDURE VerificaAlegereRapidaD2
|
||||
*-- D2: alege un rand FARA sa astepte timerul (VerificaRand(.T.) sincron in VerificaAlegere)
|
||||
LOCAL lnInainte
|
||||
*-- formularul precedent a fost inchis de Detalii (do_termin) - reia cu unul nou
|
||||
DO PregatesteFormularD1a
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection') && reset - CUI 1112223 nu a mai fost verificat "proaspat" pt. acest test
|
||||
ENDIF
|
||||
@@ -1101,6 +1179,121 @@ PROCEDURE VerificaDataPoAct
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaInactivCodCorect
|
||||
*-- cod fiscal corect (fara RO, ANAF neplatitor), discordanta doar din "inactiv la ANAF":
|
||||
*-- nu se mai cauta perechi si nu se mai sugereaza crearea unui partener cu acelasi cod.
|
||||
LOCAL loFormI, loVerifI, lnOk, llRez, lcCapI
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdInactiv), 'ctestinactiv')
|
||||
loFormI = CREATEOBJECT('cauta_alfa_form', 'ctestinactiv', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormI.crs_cursor = 'ctestinactiv'
|
||||
loFormI.lAles = .F.
|
||||
loVerifI = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormI, 'oVerifAlegere', loVerifI)
|
||||
loVerifI.Activeaza(loFormI)
|
||||
loVerifI.nNivel = 3
|
||||
loFormI.WindowType = 0
|
||||
loFormI.Show()
|
||||
SELECT ctestinactiv
|
||||
GO TOP
|
||||
loFormI._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifI
|
||||
lcCapI = ALLTRIM(loFormI.lb_anaf.Caption)
|
||||
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 1 && De acord
|
||||
llRez = loVerifI.VerificaAlegere(loFormI)
|
||||
IF m.llRez AND gnMockUltimTip = 49 AND 'Neplatitor TVA, Inactiv' $ gcMockUltimMesaj ;
|
||||
AND !('butonul Nou' $ gcMockUltimMesaj) AND !('Parteneri ROA cu CUI' $ gcMockUltimMesaj) ;
|
||||
AND 'Neplatitor TVA, Inactiv' $ m.lcCapI
|
||||
DO VpaLog WITH 'PASS inactiv-cod-corect: confirmare fara sugestia de creare - [' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL inactiv-cod-corect: llRez=' + TRANSFORM(m.llRez) + ' tip=' + TRANSFORM(gnMockUltimTip) + ;
|
||||
' label=[' + m.lcCapI + '] mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||
ENDIF
|
||||
|
||||
gcMockUltimMesaj = ''
|
||||
loVerifI.Detalii()
|
||||
IF 'Nu exista alta varianta de partener de ales.' $ gcMockUltimMesaj AND !('butonul Nou' $ gcMockUltimMesaj) ;
|
||||
AND !('Parteneri ROA cu CUI' $ gcMockUltimMesaj)
|
||||
DO VpaLog WITH 'PASS inactiv-detalii: F4 arata doar starea, fara lista de variante'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL inactiv-detalii: mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifI.Dezactiveaza()
|
||||
loFormI.Release()
|
||||
IF USED('ctestinactiv')
|
||||
USE IN ctestinactiv
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaCodInexistentANAF
|
||||
*-- cod fiscal valid ca structura, dar pe care ANAF nu il gaseste: se semnaleaza in banda, nu se
|
||||
*-- mai trece tacut peste el (deosebit de "ANAF nu a raspuns", care ramane tacut).
|
||||
LOCAL loFormX, loVerifX, lnOk, lcCapX, lnInainte
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdInexistent), 'ctestinexistent')
|
||||
loFormX = CREATEOBJECT('cauta_alfa_form', 'ctestinexistent', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormX.crs_cursor = 'ctestinexistent'
|
||||
loFormX.lAles = .F.
|
||||
loVerifX = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormX, 'oVerifAlegere', loVerifX)
|
||||
loVerifX.Activeaza(loFormX)
|
||||
loFormX.WindowType = 0
|
||||
loFormX.Show()
|
||||
SELECT ctestinexistent
|
||||
GO TOP
|
||||
loFormX._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifX
|
||||
lcCapX = ALLTRIM(loFormX.lb_anaf.Caption)
|
||||
|
||||
IF 'Cod fiscal inexistent la ANAF (9000039)' $ m.lcCapX AND loFormX.lb_anaf.ForeColor = RGB(192,0,0) ;
|
||||
AND loFormX.lb_anaf.FontBold AND loVerifX.lNegasit
|
||||
DO VpaLog WITH 'PASS cod-inexistent: banda semnaleaza codul negasit la ANAF - [' + m.lcCapX + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-inexistent: label=[' + m.lcCapX + '] ForeColor=' + TRANSFORM(loFormX.lb_anaf.ForeColor) + ;
|
||||
' Bold=' + TRANSFORM(loFormX.lb_anaf.FontBold) + ' lNegasit=' + TRANSFORM(loVerifX.lNegasit)
|
||||
ENDIF
|
||||
|
||||
*-- al doilea rand pe acelasi cod: verdictul "inexistent" NU se mai retine in cache (T4/handoff_anaf_404
|
||||
*-- - doar rezultatele POZITIVE se cacheaza) - fiecare verificare noua face iar apel ANAF, acelasi verdict.
|
||||
lnInainte = gnANAFCallCount
|
||||
loVerifX.nIdPart = 0
|
||||
loFormX._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifX
|
||||
IF gnANAFCallCount = m.lnInainte + 1 AND 'Cod fiscal inexistent la ANAF' $ ALLTRIM(loFormX.lb_anaf.Caption)
|
||||
DO VpaLog WITH 'PASS cod-inexistent-fara-cache: verdictul "inexistent" nu se cacheaza - apel ANAF nou (' + ;
|
||||
TRANSFORM(gnANAFCallCount - m.lnInainte) + '), acelasi verdict'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-inexistent-fara-cache: apeluri noi=' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ;
|
||||
' label=[' + ALLTRIM(loFormX.lb_anaf.Caption) + ']'
|
||||
ENDIF
|
||||
|
||||
gcMockUltimMesaj = ''
|
||||
loVerifX.Detalii()
|
||||
IF 'Codul fiscal nu exista la ANAF.' $ gcMockUltimMesaj
|
||||
DO VpaLog WITH 'PASS cod-inexistent-detalii: F4 explica de ce nu exista verdict'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-inexistent-detalii: mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifX.Dezactiveaza()
|
||||
loFormX.Release()
|
||||
IF USED('ctestinexistent')
|
||||
USE IN ctestinexistent
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE RuleazaIzolat
|
||||
*-- izoleaza fiecare scenariu nou REVIZIA 4 - o eroare neasteptata intr-unul singur nu opreste
|
||||
*-- restul suitei (spre deosebire de eroarea din TRY-ul principal, care oricum face QUIT).
|
||||
@@ -1114,6 +1307,447 @@ PROCEDURE RuleazaIzolat
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaStareCazutaZeroApeluri
|
||||
*-- S1 (handoff_anaf_404.md): stare de serviciu CAZUT -> randul NU face niciun apel ANAF nou,
|
||||
*-- banda arata "ANAF nu a raspuns - verificare sarita" (gri, fara bold). ANAF_SeteazaStareServiciu
|
||||
*-- e functia reala din ocautare.prg (nu un global impins direct), ca sceanariul sa treaca prin
|
||||
*-- acelasi mecanism ca in productie.
|
||||
LOCAL loFormS, loVerifS, lnOk, lnInainte, lcCapS
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('CAZUT', 'test S1')
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests1')
|
||||
loFormS = CREATEOBJECT('cauta_alfa_form', 'ctests1', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormS.crs_cursor = 'ctests1'
|
||||
loFormS.lAles = .F.
|
||||
loVerifS = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormS, 'oVerifAlegere', loVerifS)
|
||||
loVerifS.Activeaza(loFormS)
|
||||
loFormS.WindowType = 0
|
||||
loFormS.Show()
|
||||
SELECT ctests1
|
||||
GO TOP
|
||||
lnInainte = gnANAFCallCount
|
||||
loFormS._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifS
|
||||
lcCapS = ALLTRIM(loFormS.lb_anaf.Caption)
|
||||
IF gnANAFCallCount = lnInainte AND 'ANAF nu a raspuns - verificare sarita' $ lcCapS ;
|
||||
AND loFormS.lb_anaf.ForeColor = RGB(112,112,112) AND !loFormS.lb_anaf.FontBold
|
||||
DO VpaLog WITH 'PASS stare-cazuta-zero-apeluri (S1): stare CAZUT -> 0 apeluri ANAF, banda gri [' + lcCapS + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL stare-cazuta-zero-apeluri (S1): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||
' label=[' + lcCapS + '] ForeColor=' + TRANSFORM(loFormS.lb_anaf.ForeColor) + ' Bold=' + TRANSFORM(loFormS.lb_anaf.FontBold)
|
||||
ENDIF
|
||||
loVerifS.Dezactiveaza()
|
||||
loFormS.Release()
|
||||
IF USED('ctests1')
|
||||
USE IN ctests1
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa test S1')
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaBandaCazutDistinctaDePrompt
|
||||
*-- S6 (handoff_anaf_404.md): banda gri "ANAF nu a raspuns - verificare sarita" (stare CAZUT) e
|
||||
*-- DISTINCTA de promptul gri generic "Verificare ANAF la alegerea partenerului (F4 = detalii)" -
|
||||
*-- regresia care ascundea initial defectul (fara ea, utilizatorul nu distinge "inca neverificat"
|
||||
*-- de "ANAF picat").
|
||||
LOCAL loFormB, loVerifB, lnOk, lcPromptGeneric, lcBandaCazut
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests6')
|
||||
loFormB = CREATEOBJECT('cauta_alfa_form', 'ctests6', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormB.crs_cursor = 'ctests6'
|
||||
loFormB.lAles = .F.
|
||||
loVerifB = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormB, 'oVerifAlegere', loVerifB)
|
||||
loVerifB.Activeaza(loFormB) && Activeaza cheama AfiseazaPrompt() - captureaza promptul generic
|
||||
loFormB.WindowType = 0
|
||||
loFormB.Show()
|
||||
lcPromptGeneric = ALLTRIM(loFormB.lb_anaf.Caption)
|
||||
|
||||
ANAF_SeteazaStareServiciu('CAZUT', 'test S6')
|
||||
SELECT ctests6
|
||||
GO TOP
|
||||
loFormB._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifB
|
||||
lcBandaCazut = ALLTRIM(loFormB.lb_anaf.Caption)
|
||||
|
||||
IF !(m.lcPromptGeneric == m.lcBandaCazut) AND 'Verificare ANAF la alegerea partenerului' $ m.lcPromptGeneric ;
|
||||
AND 'ANAF nu a raspuns - verificare sarita' $ m.lcBandaCazut
|
||||
DO VpaLog WITH 'PASS banda-cazut-distincta (S6): prompt generic=[' + m.lcPromptGeneric + '] vs banda CAZUT=[' + m.lcBandaCazut + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL banda-cazut-distincta (S6): prompt=[' + m.lcPromptGeneric + '] banda=[' + m.lcBandaCazut + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifB.Dezactiveaza()
|
||||
loFormB.Release()
|
||||
IF USED('ctests6')
|
||||
USE IN ctests6
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa test S6')
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaEsecNuSeCacheaza
|
||||
*-- S5 (handoff_anaf_404.md): esecul (FARA_RASPUNS) NU se scrie in cache; dupa ce serviciul revine
|
||||
*-- (stare VIU), ACELASI CUI se verifica din nou si primeste verdict - blocheaza regresia "verdict
|
||||
*-- lipsa pana la repornirea programului". goANAFMockData primeste STRING 'FARA_RASPUNS' pt. cheia
|
||||
*-- CUI-ului de test (vezi mock_anaf_verificare.prg), apoi e inlocuita cu obiectul de succes.
|
||||
LOCAL lnOk, loFormE1, loVerifE1, loFormE2, loVerifE2, lnInainte, lcCap1, lcCap2, loRespCadere
|
||||
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
IF goANAFMockData.GetKey('C9000055') <> 0
|
||||
goANAFMockData.Remove('C9000055')
|
||||
ENDIF
|
||||
goANAFMockData.Add('FARA_RASPUNS', 'C9000055')
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S5')
|
||||
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdCadere), 'ctests5a')
|
||||
loFormE1 = CREATEOBJECT('cauta_alfa_form', 'ctests5a', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormE1.crs_cursor = 'ctests5a'
|
||||
loFormE1.lAles = .F.
|
||||
loVerifE1 = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormE1, 'oVerifAlegere', loVerifE1)
|
||||
loVerifE1.Activeaza(loFormE1)
|
||||
loFormE1.WindowType = 0
|
||||
loFormE1.Show()
|
||||
SELECT ctests5a
|
||||
GO TOP
|
||||
lnInainte = gnANAFCallCount
|
||||
loFormE1._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifE1
|
||||
lcCap1 = ALLTRIM(loFormE1.lb_anaf.Caption)
|
||||
|
||||
IF gnANAFCallCount = lnInainte + 1 AND 'ANAF nu a raspuns - verificare sarita' $ lcCap1 ;
|
||||
AND goCacheANAF_Sesiune.GetKey('C9000055_' + DTOS(DATE())) = 0
|
||||
DO VpaLog WITH 'PASS esec-nu-se-cacheaza (S5, pas 1): apel ANAF esuat (' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||
' apel nou), banda=[' + lcCap1 + '], NU s-a scris in cache'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL esec-nu-se-cacheaza (S5, pas 1): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||
' banda=[' + lcCap1 + '] cache-key=' + TRANSFORM(goCacheANAF_Sesiune.GetKey('C9000055_' + DTOS(DATE())))
|
||||
ENDIF
|
||||
loVerifE1.Dezactiveaza()
|
||||
loFormE1.Release()
|
||||
IF USED('ctests5a')
|
||||
USE IN ctests5a
|
||||
ENDIF
|
||||
|
||||
*-- serviciul revine: inlocuieste intrarea mock cu un obiect de succes real + stare VIU (fara sa
|
||||
*-- astepte cele 10 minute de expirare CAZUT - vezi ANAF_SeteazaStareServiciu, ocautare.prg)
|
||||
goANAFMockData.Remove('C9000055')
|
||||
loRespCadere = CREATEOBJECT('Empty')
|
||||
ADDPROPERTY(loRespCadere, 'cui', '9000055')
|
||||
ADDPROPERTY(loRespCadere, 'scpTVA', .T.)
|
||||
ADDPROPERTY(loRespCadere, 'statusInactivi', .F.)
|
||||
ADDPROPERTY(loRespCadere, 'denumire', 'CADERE SRL ANAF')
|
||||
ADDPROPERTY(loRespCadere, 'mesaj', '')
|
||||
goANAFMockData.Add(loRespCadere, 'C9000055')
|
||||
ANAF_SeteazaStareServiciu('VIU', 'revenire S5')
|
||||
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdCadere), 'ctests5b')
|
||||
loFormE2 = CREATEOBJECT('cauta_alfa_form', 'ctests5b', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormE2.crs_cursor = 'ctests5b'
|
||||
loFormE2.lAles = .F.
|
||||
loVerifE2 = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormE2, 'oVerifAlegere', loVerifE2)
|
||||
loVerifE2.Activeaza(loFormE2)
|
||||
loFormE2.WindowType = 0
|
||||
loFormE2.Show()
|
||||
SELECT ctests5b
|
||||
GO TOP
|
||||
lnInainte = gnANAFCallCount
|
||||
loFormE2._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifE2
|
||||
lcCap2 = ALLTRIM(loFormE2.lb_anaf.Caption)
|
||||
|
||||
IF gnANAFCallCount = lnInainte + 1 AND 'ANAF: Platitor TVA' $ lcCap2 AND 'CADERE SRL ANAF' $ lcCap2
|
||||
DO VpaLog WITH 'PASS esec-nu-se-cacheaza (S5, pas 2): dupa revenire (VIU), acelasi CUI 9000055 se re-verifica (' + ;
|
||||
TRANSFORM(gnANAFCallCount - lnInainte) + ' apel nou) si primeste verdict [' + lcCap2 + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL esec-nu-se-cacheaza (S5, pas 2): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' banda=[' + lcCap2 + ']'
|
||||
ENDIF
|
||||
loVerifE2.Dezactiveaza()
|
||||
loFormE2.Release()
|
||||
IF USED('ctests5b')
|
||||
USE IN ctests5b
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaCodNenumeric
|
||||
*-- P8 (handoff_anaf_404.md, acelasi tipar ca si cazul real FANALEX din design-alegere-partener-anaf.md,
|
||||
*-- dar cu text disponibil pentru testare - textul EXACT real coincide cu un partener preexistent in
|
||||
*-- schema, vezi nota din antetul fisierului): cod fiscal nenumeric dupa normalizare (litere in loc de
|
||||
*-- cifre) -> banda gri distincta, fara apel ANAF si fara tacere completa (comportamentul dinainte de reparatie).
|
||||
LOCAL loFormN, loVerifN, lnOk, lcCapN, lnInainte
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV, TIP_PERSOANA FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdNenumeric), 'ctestnenum')
|
||||
loFormN = CREATEOBJECT('cauta_alfa_form', 'ctestnenum', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormN.crs_cursor = 'ctestnenum'
|
||||
loFormN.lAles = .F.
|
||||
loVerifN = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormN, 'oVerifAlegere', loVerifN)
|
||||
loVerifN.Activeaza(loFormN)
|
||||
loFormN.WindowType = 0
|
||||
loFormN.Show()
|
||||
SELECT ctestnenum
|
||||
GO TOP
|
||||
lnInainte = gnANAFCallCount
|
||||
loFormN._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer WITH loVerifN
|
||||
lcCapN = ALLTRIM(loFormN.lb_anaf.Caption)
|
||||
IF gnANAFCallCount = lnInainte AND lcCapN == CHR(149) + ' Cod fiscal nenumeric - nu se poate verifica la ANAF' ;
|
||||
AND loFormN.lb_anaf.ForeColor = RGB(112,112,112) AND !loFormN.lb_anaf.FontBold
|
||||
DO VpaLog WITH 'PASS cod-nenumeric (P8): cod fiscal "TEST NENUMERIC OIL MARKET SRL" (tiparul cazului real FANALEX) -> banda gri distincta, fara apel ANAF - [' + lcCapN + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-nenumeric (P8): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' label=[' + lcCapN + ']'
|
||||
ENDIF
|
||||
|
||||
*-- F4 (Detalii) pe cod nenumeric: text nou dedicat (cClasaEsec == 'COD_NENUMERIC'), distinct de
|
||||
*-- "Codul fiscal nu exista la ANAF." si "ANAF nu a raspuns - verificarea a fost sarita." (ocautare.prg)
|
||||
LOCAL lnLenInainte, lcLog
|
||||
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||
loVerifN.Detalii()
|
||||
lcLog = SUBSTR(FILETOSTR(gcUILog), lnLenInainte + 1)
|
||||
IF 'MOCK amessagebox' $ lcLog AND 'Codul fiscal nu este numeric - nu se poate verifica la ANAF.' $ lcLog ;
|
||||
AND !('Codul fiscal nu exista la ANAF.' $ lcLog) AND !('verificarea a fost sarita' $ lcLog)
|
||||
DO VpaLog WITH 'PASS cod-nenumeric-detalii (P8): F4 arata textul dedicat codului nenumeric, distinct de negasit/fara-raspuns'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL cod-nenumeric-detalii (P8): log=[' + lcLog + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifN.Dezactiveaza()
|
||||
loFormN.Release()
|
||||
IF USED('ctestnenum')
|
||||
USE IN ctestnenum
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaFixtureContract404
|
||||
*-- F1 (handoff_anaf_404.md), REVIZUIT dupa T5/sonda: logica de verdict a fost extrasa in
|
||||
*-- ANAF_VerdictDinCursor (validare.prg) - fixture-ul apeleaza acum FUNCTIA REALA (nu o replica
|
||||
*-- locala), peste cursorul produs de ParseJsonANAFv8 (tot cod real, fara HTTP), cu cele doua
|
||||
*-- corpuri MASURATE pe serviciul ANAF real (plan-reparatie-anaf-404-breaker.md, cauza 1).
|
||||
LOCAL loVerif, lcJson404, lcJsonStrain, loObj404, loObjStrain, lcAlias404, lcAliasStrain
|
||||
LOCAL lnCuiCautat, loResult404, loResultStrain, llNegasit404, llNegasitStrain, lcClasa404, lcClasaStrain
|
||||
|
||||
loVerif = CREATEOBJECT("VerificareANAF")
|
||||
lnCuiCautat = 123456789
|
||||
|
||||
*=== corp masurat, status 404: {"found":[],"notFound":[123456789]} -> verdict "inexistent" ===
|
||||
lcJson404 = '{"found":[],"notFound":[123456789]}'
|
||||
lcAlias404 = 'crsFixtureF1a'
|
||||
IF USED(lcAlias404)
|
||||
USE IN (lcAlias404)
|
||||
ENDIF
|
||||
loObj404 = nfjsonread(lcJson404)
|
||||
loVerif.ParseJsonANAFv8(loObj404, lcAlias404)
|
||||
llNegasit404 = .F.
|
||||
lcClasa404 = ''
|
||||
loResult404 = ANAF_VerdictDinCursor(lcAlias404, lnCuiCautat, @llNegasit404, @lcClasa404)
|
||||
IF ISNULL(loResult404) AND llNegasit404 AND EMPTY(lcClasa404)
|
||||
DO VpaLog WITH 'PASS fixture-404-inexistent (F1): ANAF_VerdictDinCursor REALA, corp {"found":[],"notFound":[123456789]} -> tlNegasit=.T., clasa=[]'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL fixture-404-inexistent (F1): rezultat=' + TRANSFORM(VARTYPE(loResult404)) + ' llNegasit=' + TRANSFORM(llNegasit404) + ' clasa=[' + lcClasa404 + ']'
|
||||
ENDIF
|
||||
IF USED(lcAlias404)
|
||||
USE IN (lcAlias404)
|
||||
ENDIF
|
||||
|
||||
*=== corp strain (proxy/mentenanta/eroare) - NU trebuie sa dea verdict "inexistent" ===
|
||||
lcJsonStrain = '{"message":"service unavailable"}'
|
||||
lcAliasStrain = 'crsFixtureF1b'
|
||||
IF USED(lcAliasStrain)
|
||||
USE IN (lcAliasStrain)
|
||||
ENDIF
|
||||
loObjStrain = nfjsonread(lcJsonStrain)
|
||||
loVerif.ParseJsonANAFv8(loObjStrain, lcAliasStrain)
|
||||
llNegasitStrain = .F.
|
||||
lcClasaStrain = ''
|
||||
loResultStrain = ANAF_VerdictDinCursor(lcAliasStrain, lnCuiCautat, @llNegasitStrain, @lcClasaStrain)
|
||||
IF ISNULL(loResultStrain) AND !llNegasitStrain AND lcClasaStrain == 'RASPUNS_NEINTELES'
|
||||
DO VpaLog WITH 'PASS fixture-corp-strain (F1): ANAF_VerdictDinCursor REALA, corp {"message":"service unavailable"} -> clasa=RASPUNS_NEINTELES'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL fixture-corp-strain (F1): rezultat=' + TRANSFORM(VARTYPE(loResultStrain)) + ' llNegasit=' + TRANSFORM(llNegasitStrain) + ' clasa=[' + lcClasaStrain + ']'
|
||||
ENDIF
|
||||
IF USED(lcAliasStrain)
|
||||
USE IN (lcAliasStrain)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaSondaInAer
|
||||
*-- S2 (handoff_anaf_404.md, T5/sonda): sonda in aer (stare SE_TESTEAZA) -> randul NU face apel
|
||||
*-- propriu (gnANAFCallCount neschimbat), banda "ANAF: se verifica <cod>...". Plus (tabelul de
|
||||
*-- moduri de esec): formular inchis CU sonda inca in aer -> starea revine la NECUNOSCUT, nu CAZUT
|
||||
*-- (Dezactiveaza: ANAF_SondaOpreste() + ANAF_SeteazaStareServiciu, ocautare.prg).
|
||||
LOCAL loFormS2, loVerifS2, lnOk, lnInainte, lcCap
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S2')
|
||||
gcMockSondaModo = 'MANUAL'
|
||||
glMockSondaGataManual = .F. && sonda pleaca si NU raspunde inca
|
||||
gnMockSondaPornireCount = 0
|
||||
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests2')
|
||||
loFormS2 = CREATEOBJECT('cauta_alfa_form', 'ctests2', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormS2.crs_cursor = 'ctests2'
|
||||
loFormS2.lAles = .F.
|
||||
loVerifS2 = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormS2, 'oVerifAlegere', loVerifS2)
|
||||
loVerifS2.Activeaza(loFormS2) && stare NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||
loFormS2.WindowType = 0
|
||||
loFormS2.Show()
|
||||
SELECT ctests2
|
||||
GO TOP
|
||||
lnInainte = gnANAFCallCount
|
||||
loFormS2._GRID1.AfterRowColChange(1) && DupaRand -> EvalueazaRand(.F.) - vede SE_TESTEAZA, NU cheama AsteaptaTimer
|
||||
DOEVENTS FORCE
|
||||
lcCap = ALLTRIM(loFormS2.lb_anaf.Caption)
|
||||
IF gnANAFCallCount = lnInainte AND ANAF_StareServiciu() == 'SE_TESTEAZA' ;
|
||||
AND 'ANAF: se verifica' $ lcCap AND 'RO1112223' $ lcCap AND gnMockSondaPornireCount = 1
|
||||
DO VpaLog WITH 'PASS sonda-in-aer (S2): sonda in aer -> 0 apeluri ANAF, banda [' + lcCap + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL sonda-in-aer (S2): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' stare=' + ANAF_StareServiciu() + ;
|
||||
' banda=[' + lcCap + '] porniri-sonda=' + TRANSFORM(gnMockSondaPornireCount)
|
||||
ENDIF
|
||||
|
||||
*-- inchide formularul CU sonda inca in aer (glMockSondaGataManual ramane .F.) - starea trebuie sa
|
||||
*-- revina la NECUNOSCUT, nu sa ramana blocata (fals) in SE_TESTEAZA sau sa treaca in CAZUT
|
||||
loVerifS2.Dezactiveaza()
|
||||
IF ANAF_StareServiciu() == 'NECUNOSCUT'
|
||||
DO VpaLog WITH 'PASS sonda-inchisa-in-aer (S2): formular inchis cu sonda in aer -> stare revine la NECUNOSCUT'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL sonda-inchisa-in-aer (S2): stare=' + ANAF_StareServiciu()
|
||||
ENDIF
|
||||
|
||||
loFormS2.Release()
|
||||
IF USED('ctests2')
|
||||
USE IN ctests2
|
||||
ENDIF
|
||||
gcMockSondaModo = 'AUTO'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaSondaReuseste
|
||||
*-- S3 (handoff_anaf_404.md, T5/sonda): sonda reuseste -> stare devine VIU si randul CURENT se
|
||||
*-- re-evalueaza SINGUR (fara navigare noua) - EvalueazaRand nu comite This.nIdPart cat timp
|
||||
*-- lcClasaEsec=='SE_TESTEAZA' (ocautare.prg), deci a doua evaluare pe acelasi rand nu iese
|
||||
*-- devreme pe "acelasi rand" si ajunge la verdictul real. Blocheaza verdictul lipit pe rand.
|
||||
LOCAL loFormS3, loVerifS3, lnOk, lcCap1, lcCap2
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S3')
|
||||
gcMockSondaModo = 'MANUAL'
|
||||
glMockSondaGataManual = .F.
|
||||
glMockSondaReusitaManual = .T.
|
||||
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests3')
|
||||
loFormS3 = CREATEOBJECT('cauta_alfa_form', 'ctests3', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormS3.crs_cursor = 'ctests3'
|
||||
loFormS3.lAles = .F.
|
||||
loVerifS3 = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormS3, 'oVerifAlegere', loVerifS3)
|
||||
loVerifS3.Activeaza(loFormS3) && NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||
loFormS3.WindowType = 0
|
||||
loFormS3.Show()
|
||||
SELECT ctests3
|
||||
GO TOP
|
||||
loFormS3._GRID1.AfterRowColChange(1)
|
||||
DOEVENTS FORCE
|
||||
lcCap1 = ALLTRIM(loFormS3.lb_anaf.Caption)
|
||||
|
||||
*-- raspunsul soseste, cu succes - FARA sa navighez randul din nou (acelasi rand, acelasi id_part)
|
||||
glMockSondaGataManual = .T.
|
||||
glMockSondaReusitaManual = .T.
|
||||
ANAF_SondaVerifica() && acelasi apel ca in anaf_timer.Timer, inaintea lui EvalueazaRand
|
||||
loVerifS3.VerificaRand(.F.)
|
||||
DOEVENTS FORCE
|
||||
lcCap2 = ALLTRIM(loFormS3.lb_anaf.Caption)
|
||||
|
||||
IF 'ANAF: se verifica' $ lcCap1 AND ANAF_StareServiciu() == 'VIU' AND 'ANAF:' $ lcCap2 AND !('se verifica' $ lcCap2)
|
||||
DO VpaLog WITH 'PASS sonda-reuseste (S3): sonda reusita -> stare VIU, randul curent re-evaluat SINGUR (fara navigare noua) - [' + lcCap1 + '] -> [' + lcCap2 + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL sonda-reuseste (S3): banda1=[' + lcCap1 + '] stare=' + ANAF_StareServiciu() + ' banda2=[' + lcCap2 + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifS3.Dezactiveaza()
|
||||
loFormS3.Release()
|
||||
IF USED('ctests3')
|
||||
USE IN ctests3
|
||||
ENDIF
|
||||
gcMockSondaModo = 'AUTO'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaSondaExpira
|
||||
*-- S4 (handoff_anaf_404.md, T5/sonda): sonda ramane in aer peste termenul de viata (10s, masurat
|
||||
*-- fata de gtANAF_StareServiciuMoment, PUBLIC in ocautare.prg) -> stare CAZUT, nu ramane blocata
|
||||
*-- in SE_TESTEAZA. "Time travel" pe gtANAF_StareServiciuMoment (global de sesiune expus explicit
|
||||
*-- pentru asta), fara sa astept efectiv 10 secunde reale.
|
||||
LOCAL loFormS4, loVerifS4, lnOk, lcCap
|
||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S4')
|
||||
gcMockSondaModo = 'MANUAL'
|
||||
glMockSondaGataManual = .F. && sonda ramane in aer, nu raspunde niciodata
|
||||
|
||||
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests4')
|
||||
loFormS4 = CREATEOBJECT('cauta_alfa_form', 'ctests4', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||
loFormS4.crs_cursor = 'ctests4'
|
||||
loFormS4.lAles = .F.
|
||||
loVerifS4 = CREATEOBJECT('anaf_verif_cautare')
|
||||
ADDPROPERTY(loFormS4, 'oVerifAlegere', loVerifS4)
|
||||
loVerifS4.Activeaza(loFormS4) && NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||
loFormS4.WindowType = 0
|
||||
loFormS4.Show()
|
||||
|
||||
*-- da timpul inapoi cu 15s fata de momentul tranzitiei, ca sa simulez expirarea celor 10s fara
|
||||
*-- sa astept efectiv
|
||||
gtANAF_StareServiciuMoment = DATETIME() - 15
|
||||
|
||||
ANAF_SondaVerifica() && acelasi apel ca in anaf_timer.Timer - constata expirarea si inchide sonda
|
||||
SELECT ctests4
|
||||
GO TOP
|
||||
loFormS4._GRID1.AfterRowColChange(1)
|
||||
DOEVENTS FORCE
|
||||
lcCap = ALLTRIM(loFormS4.lb_anaf.Caption)
|
||||
|
||||
IF ANAF_StareServiciu() == 'CAZUT' AND 'ANAF nu a raspuns - verificare sarita' $ lcCap
|
||||
DO VpaLog WITH 'PASS sonda-expira (S4): sonda in aer peste 10s -> stare CAZUT, nu ramane blocata in SE_TESTEAZA - [' + lcCap + ']'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL sonda-expira (S4): stare=' + ANAF_StareServiciu() + ' banda=[' + lcCap + ']'
|
||||
ENDIF
|
||||
|
||||
loVerifS4.Dezactiveaza()
|
||||
loFormS4.Release()
|
||||
IF USED('ctests4')
|
||||
USE IN ctests4
|
||||
ENDIF
|
||||
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa S4')
|
||||
gcMockSondaModo = 'AUTO'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaCascadaOptiuni
|
||||
*-- REVIZIA 4 pct.1: ini '0' bate tot; utilizator bate firma; firma bate hardcodatul;
|
||||
*-- absent != 0 (H7); fara crsOptiuni/crsOptiuniUtilizator -> fara eroare (nivel hardcodat).
|
||||
@@ -1440,6 +2074,16 @@ PROCEDURE VerificaDiscriminatorDocumente
|
||||
poVerifAlegere.Detalii()
|
||||
lcLog1 = SUBSTR(FILETOSTR(gcUILog), lnLenInainte + 1)
|
||||
|
||||
*-- primul Detalii s-a incheiat cu do_termin() - reface formularul inainte de al doilea
|
||||
goExecutor = loReal
|
||||
DO PregatesteFormularD1a
|
||||
SELECT ctestparteneri
|
||||
LOCATE FOR id_part = gnIdDiscord
|
||||
goFormT._GRID1.AfterRowColChange(1)
|
||||
DO AsteaptaTimer
|
||||
goExecutor = CREATEOBJECT('dummyexecutordoctest')
|
||||
goExecutor.oReal = loReal
|
||||
|
||||
goExecutor.nIdsConDocumente = gnIdPereche
|
||||
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||
poVerifAlegere.Detalii()
|
||||
@@ -1480,8 +2124,9 @@ PROCEDURE VerificaB1LabelGolit
|
||||
poVerifAlegere.VerificaRand(.F.)
|
||||
lcCapDupa = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||
|
||||
IF !EMPTY(lcCapInainte) AND EMPTY(lcCapDupa)
|
||||
DO VpaLog WITH 'PASS B1-label-golit (9): verdict anterior [' + lcCapInainte + '] -> golit dupa cautare fara rezultate'
|
||||
*-- banda nu ramane goala: fara rezultate revine la textul neutru, nu la verdictul anterior
|
||||
IF !EMPTY(lcCapInainte) AND lcCapDupa == CHR(149) + ' Verificare ANAF la alegerea partenerului (F4 = detalii)'
|
||||
DO VpaLog WITH 'PASS B1-label-golit (9): verdict anterior [' + lcCapInainte + '] -> text neutru dupa cautare fara rezultate'
|
||||
ELSE
|
||||
DO VpaLog WITH 'FAIL B1-label-golit (9): inainte=[' + lcCapInainte + '] dupa=[' + lcCapDupa + ']'
|
||||
ENDIF
|
||||
|
||||
Reference in New Issue
Block a user