Files
roaauto/Programe/test_autopass_driver.prg

197 lines
7.7 KiB
Plaintext
Raw Blame History

*****************************************************************************************
* test_autopass_driver.prg
* Driver .prg fara forma pentru US-003 (client AutopassClient) - PRD ROAAUTO-1.0,
* sectiunea "Acoperire de test": "driver .prg fara forma (1 comanda hand-built) - E2E:
* acopera encoding/headers/timeouts izolat".
*
* Ruleaza autonom din Command Window:
* DO Programe\test_autopass_driver.prg
*
* Ce face:
* (a) apeleaza autopass_test_conexiune() si afiseaza rezultatul (ping)
* (b) construieste MANUAL (fara Oracle) 2 obiecte comanda in formatul asteptat de
* AutopassClient.EnviaLot - una din ele cu operatii cu diacritice in denumire,
* ca sa acopere codepath-ul de encoding
* (c) apeleaza Valideaza (dry-run) pe cele 2 comenzi
* (d) doar cu confirmare MESSAGEBOX explicita SI doar daca mediul citit din config e
* "test", apeleaza si TrimiteLot - altfel se opreste dupa dry-run
* (e) afiseaza raspunsurile per element (index, id_ordl, status, motiv, submission_id)
*
* Nu se apeleaza din meniul aplicatiei - e un instrument de diagnostic, lansat manual.
*****************************************************************************************
CLOSE ALL
CLEAR
SET PROCEDURE TO Programe\oproceduri_autopass.prg ADDITIVE
SET PROCEDURE TO COMUN\utile\nfjson\nfjsoncreate.prg ADDITIVE
SET PROCEDURE TO COMUN\utile\nfjson\nfjsonread.prg ADDITIVE
LOCAL loPing, oClient, loComenzi, loRezValidare, loRezTrimite, loConfig
LOCAL lnAlegere, i, loItem
?'============================================================================='
?'AUTOPASS - driver de test fara forma'
?'============================================================================='
*-- (a) test conexiune (GET /v1/ping) -------------------------------------------------
?
?'--- (a) autopass_test_conexiune() ---'
loPing = autopass_test_conexiune()
?' lSucces : ' + TRANSFORM(loPing.lSucces)
?' cMediu : ' + loPing.cMediu
?' lAutentificatCuCheie : ' + TRANSFORM(loPing.lAutentificatCuCheie)
?' lAreCredsTest : ' + TRANSFORM(loPing.lAreCredsTest)
?' lAreCredsProd : ' + TRANSFORM(loPing.lAreCredsProd)
?' cEroare : ' + loPing.cEroare
IF !loPing.lSucces
?
?'Ping esuat - verifica AUTOPASS_URL/AUTOPASS_KEY in tabelul optiuni inainte de a continua.'
?'Driverul continua totusi (poate testa doar constructia payload-ului si Valideaza va esua controlat).'
ENDIF
*-- (b) construim manual 2 "comenzi", fara Oracle --------------------------------------
?
?'--- (b) construire manuala a comenzilor de test ---'
loComenzi = Createobject('Collection')
*-- comanda 1: fara diacritice, caz de baza
loItem = Createobject('empty')
AddProperty(loItem, 'id_ordl', 900001)
AddProperty(loItem, 'vin', 'WVWZZZ1KZAW000001')
AddProperty(loItem, 'nrinmat', 'B99TST01')
AddProperty(loItem, 'data_prestatie', '2026-07-01')
AddProperty(loItem, 'odometru_final', '123456')
LOCAL ARRAY laPrestatii1(2)
laPrestatii1(1) = Createobject('empty')
AddProperty(laPrestatii1(1), 'cod_op_service', 'SCH001')
AddProperty(laPrestatii1(1), 'denumire', 'Schimb ulei motor')
laPrestatii1(2) = Createobject('empty')
AddProperty(laPrestatii1(2), 'cod_op_service', 'FRN010')
AddProperty(laPrestatii1(2), 'denumire', 'Verificare frane')
AddProperty(loItem, 'prestatii(2)')
Acopy(laPrestatii1, loItem.prestatii)
AddProperty(loItem, 'obs', autopass_obs(90001, 190001))
loComenzi.Add(loItem)
*-- comanda 2: cu diacritice in denumirea operatiei - acopera codepath-ul de encoding
loItem = Createobject('empty')
AddProperty(loItem, 'id_ordl', 900002)
AddProperty(loItem, 'vin', 'WVWZZZ1KZAW000002')
AddProperty(loItem, 'nrinmat', 'B99TST02')
AddProperty(loItem, 'data_prestatie', '2026-07-02')
AddProperty(loItem, 'odometru_final', '87654')
LOCAL ARRAY laPrestatii2(2)
laPrestatii2(1) = Createobject('empty')
AddProperty(laPrestatii2(1), 'cod_op_service', 'DIAC01')
* diacritice romanesti in text sursa (comentariile raman fara diacritice, dar
* denumirea trimisa in payload TREBUIE sa contina diacriticele reale, ca sa testeze
* efectiv encoding-ul):
AddProperty(laPrestatii2(1), 'denumire', '<27>nlocuire ambreiaj - verificare etan<61>s la str<74>ngere')
laPrestatii2(2) = Createobject('empty')
AddProperty(laPrestatii2(2), 'cod_op_service', 'DIAC02')
AddProperty(laPrestatii2(2), 'denumire', 'Reglaj geometrie ro<72>i fa<66>a/spate')
AddProperty(loItem, 'prestatii(2)')
Acopy(laPrestatii2, loItem.prestatii)
AddProperty(loItem, 'obs', autopass_obs(90002, 190002))
loComenzi.Add(loItem)
?' Comenzi construite: ' + TRANSFORM(loComenzi.Count)
FOR i = 1 TO loComenzi.Count
loItem = loComenzi.Item(i)
?' [' + TRANSFORM(i) + '] id_ordl=' + TRANSFORM(loItem.id_ordl) + ;
' vin=' + loItem.vin + ' obs="' + loItem.obs + '"'
ENDFOR
*-- (c) Valideaza (dry-run) -------------------------------------------------------------
?
?'--- (c) AutopassClient.Valideaza() [dry-run, fara enqueue] ---'
oClient = Createobject('AutopassClient')
loRezValidare = .NULL.
TRY
loRezValidare = oClient.Valideaza(loComenzi)
CATCH TO loEx
?' EROARE la Valideaza(): ' + loEx.Message
ENDTRY
IF VARTYPE(loRezValidare) = 'O'
?' lSucces : ' + TRANSFORM(loRezValidare.lSucces)
?' nStatusHttp : ' + TRANSFORM(loRezValidare.nStatusHttp)
?' cDetaliu : ' + loRezValidare.cDetaliu
IF loRezValidare.lSucces AND VARTYPE(loRezValidare.oRezultate) = 'O'
?' Rezultate dry-run:'
FOR EACH loItem IN loRezValidare.oRezultate
?' index=' + TRANSFORM(loItem.index) + ;
' id_ordl=' + TRANSFORM(loItem.id_ordl) + ;
' valid=' + TRANSFORM(loItem.valid) + ;
' status_estimat=' + TRANSFORM(EVL(loItem.status_estimat,'')) + ;
' nemapate=' + IIF(TYPE('loItem.nemapate') = 'A', TRANSFORM(ALEN(loItem.nemapate,1)), '0')
ENDFOR
ENDIF
ENDIF
*-- (d) TrimiteLot - DOAR cu confirmare explicita SI DOAR daca mediul e test -------------
?
?'--- (d) AutopassClient.TrimiteLot() [enqueue real - necesita confirmare] ---'
loConfig = autopass_get_config()
IF UPPER(ALLTRIM(loConfig.cRarEnv)) <> 'TEST'
?' Mediul curent din configurare (AUTOPASS_ENV) nu este "test" (este: "' + ;
loConfig.cRarEnv + '") - TrimiteLot NU se apeleaza din driver.'
?' Seteaza AUTOPASS_ENV=test in tabelul optiuni daca vrei sa testezi enqueue-ul real.'
ELSE
lnAlegere = MESSAGEBOX('Mediul este TEST. Trimiti (enqueue real) cele ' + ;
TRANSFORM(loComenzi.Count) + ' comenzi de test la gateway-ul AUTOPASS?' + CHR(13) + ;
'Aceasta e o transmitere reala pe mediul de test (nu Productie).', 4 + 32, 'AUTOPASS - confirmare TrimiteLot')
IF lnAlegere = 6 && Yes
loRezTrimite = .NULL.
TRY
loRezTrimite = oClient.TrimiteLot(loComenzi)
CATCH TO loEx
?' EROARE la TrimiteLot(): ' + loEx.Message
ENDTRY
IF VARTYPE(loRezTrimite) = 'O'
?' lSucces : ' + TRANSFORM(loRezTrimite.lSucces)
?' nStatusHttp : ' + TRANSFORM(loRezTrimite.nStatusHttp)
?' cDetaliu : ' + loRezTrimite.cDetaliu
IF loRezTrimite.lSucces AND VARTYPE(loRezTrimite.oRezultate) = 'O'
?' Rezultate TrimiteLot:'
FOR EACH loItem IN loRezTrimite.oRezultate
?' index=' + TRANSFORM(loItem.index) + ;
' id_ordl=' + TRANSFORM(loItem.id_ordl) + ;
' status=' + TRANSFORM(loItem.status) + ;
' motiv=' + TRANSFORM(loItem.motiv) + ;
' submission_id=' + TRANSFORM(loItem.submission_id) + ;
' id_prezentare=' + TRANSFORM(loItem.id_prezentare)
ENDFOR
ENDIF
ENDIF
ELSE
?' Renuntat de utilizator - TrimiteLot nu s-a apelat.'
ENDIF
ENDIF
?
?'============================================================================='
?'Driver terminat.'
?'============================================================================='
RETURN