- Surse complete web (React/Vite) + mobil (React Native/Expo) + extensie (MV3) - Documentație de livrare: ghid utilizare, matrice trasabilitate cerințe, raport testare furnizor - Artefacte binare: imagine Docker didi-frontend:lot3-1.0, APK, extensie v3.2.6 + SHA256SUMS - Configurare adresă platformă externalizată (build args / .env / config.js) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
22 KiB
% Raport de testare furnizor — DiDi Lot 3 (Frontend) % PNRR DIGI150 · contract 11.1.i3.c9 · Contract de furnizare nr. 19
1. Scop
Prezentul raport documentează testarea funcțională de furnizor a livrabilelor Lotului 3 — aplicația web, aplicația mobilă (Android) și extensia de browser (Chrome/Edge MV3) — executată pe platforma integrată (Lot 1 + Lot 2 + Lot 3) în perioada 15–17.07.2026.
Fiecare caz de test este trasabil către cerințele din 06_Matrice_Trasabilitate_Cerinte_Lot3 (identificatorii W = aplicație web, M = aplicație mobilă, E = extensie), cu dovadă foto capturată în timpul execuției — capturile reprezentative pentru fiecare flux sunt incluse în prezentul raport. Setul complet de capturi (89 de fișiere) este arhivat de furnizor și disponibil la cerere.
2. Mediul de testare
| Element | Valoare |
|---|---|
| Platformă backend (Lot 1 + Lot 2) | 10.11.10.18 — stack integral, 11/11 servicii healthy |
| Aplicație web | https://10.11.10.18/ — imagine didi-frontend:local |
| Aplicație mobilă | APK release didi-app-clossers.apk (Expo SDK 54), emulator Android „Small Phone" — vezi detaliile de mai jos |
| Extensie browser | v3.2.x (finală 3.2.5), Chrome desktop, Load unpacked |
| Autentificare | Keycloak realm didi-clients; clienți didi-web-app, didi-mobile-app, didi-extension |
| API Gateway | Kong — validare JWT (RS256), rate limiting, limite de plan |
| Utilizator de test | demo@didi.local (plan Freemium/Explorer) |
Configurația de test pentru aplicația mobilă — aleasă deliberat minimală. Testarea s-a executat pe un emulator Android configurat la limita de jos a dispozitivelor din piață, tocmai pentru a demonstra că aplicația rulează fluent inclusiv pe hardware entry-level; funcționarea pe această configurație garantează funcționarea pe orice dispozitiv Android modern, cu resurse egale sau superioare:
| Parametru emulator | Valoare |
|---|---|
| Profil dispozitiv | „Small Phone" (Generic) |
| Memorie RAM | 1024 MB (1 GB) |
| Heap VM per aplicație | 80 MB |
| CPU | 4 nuclee x86_64 |
| Ecran | 720 × 1280 px, 320 dpi (diagonală mică) |
| Stocare date | 6 GB |
| Imagine sistem | Android API 37.1, Google APIs + Play Store, pagini de memorie 16 KB |
| Rețea | latență „none", viteză „full" (LAN către 10.11.10.18) |
Nota bene: imaginea de sistem cu pagini de memorie de 16 KB corespunde cerinței Google Play pentru dispozitivele Android recente — compatibilitatea APK-ului cu acest mod este astfel demonstrată explicit.
3. Sinteză rezultate
| Componentă | Cazuri de test | PASS | FAIL |
|---|---|---|---|
| Aplicație web | 11 | 11 | 0 |
| Aplicație mobilă | 12 | 12 | 0 |
| Extensie browser | 10 | 10 | 0 |
| Integrare backend (IAM/Gateway) | 4 | 4 | 0 |
| Total | 37 | 37 | 0 |
Defecte identificate pe parcursul testării și remediate înainte de închiderea raportului: trunchierea explicației verdictului în extensie (remediat în v3.2.4), etichete nelocalizate în raportul extensiei (remediat în v3.2.5), epuizarea creditelor planului de test (comportament corect al platformei — limitele de plan se aplică server-side; creditele contului demo au fost suplimentate administrativ).
4. Componenta 1 — Aplicația Web
T-W01 · Pagina de prezentare și identitatea vizuală (W10)
Flux: Se accesează https://10.11.10.18/ fără autentificare. Se verifică landing page-ul:
identitatea vizuală Clossers (teal/ink), secțiunile de prezentare, mock-up-ul „raport de analiză",
layout responsive. Rezultat: PASS.
T-W02 · Autentificare OIDC/OAuth2 prin Keycloak (W7, W8)
Flux: Din landing → „Începe analiza" → redirecționare către Keycloak (realm didi-clients) →
autentificare cu utilizatorul de test → revenire în aplicație cu sesiune activă (token Bearer,
auto-refresh). Sign out din meniul lateral revocă sesiunea. Rezultat: PASS.
T-W03 · Formular unificat de trimitere conținut (W1, W2)
Flux: Dashboard → „Analiză completă". Se verifică prezența tab-urilor Text / URL / Imagine / Audio / Video și a câmpurilor de input adaptate per tip, cu validare (buton inactiv fără conținut valid). Rezultat: PASS.
T-W04 · Consimțământ explicit la trimiterea fișierelor (W16)
Flux: Tab Video → se selectează un fișier → butonul „Rulează analiza completă" rămâne inactiv până la bifarea consimțământului („Sunt de acord ca fișierul trimis să fie procesat…"), cu link către Politica de confidențialitate. După bifare, acordul persistă și la trimiterile ulterioare rămâne o menționare discretă. Rezultat: PASS.
T-W05 · Afișarea stării analizei (W3)
Flux: Se trimite un fișier video → se urmărește bara de progres și starea per componentă (Detectare AI, Evaluarea sursei, Tehnici de manipulare, Verificarea afirmațiilor — „în așteptare" → rulare → finalizare), cu polling asincron. Rezultat: PASS.
T-W06 · Pagina de rezultate cu verdict și drill-down (W4)
Flux: La finalizarea analizei se afișează: scor de risc (0–100) cu inel colorat funcțional, categorie verdict, nivel risc, grad de certitudine, explicație în limba română, acțiune recomandată („Nu distribui acest articol"), cea mai gravă problemă cu citat-dovadă, secțiuni expandabile de detalii per componentă. Rezultat: PASS.
T-W07 · Export PDF și partajare raport (W6)
Flux: Pe pagina de rezultate (analiză video) sunt disponibile butoanele „Partajează" (navigator.share / copiere link către raport) și „Descarcă PDF". Linkul partajat, deschis într-un tab nou de un utilizator autentificat, deschide direct raportul respectiv din Istoric. Rezultat: PASS.
T-W08 · Analize per competență individuală (W19)
Flux: Din meniul „Abilități DIDI" se rulează individual: Tehnici de manipulare, Evaluarea sursei, Verificarea afirmațiilor, Detectare AI — fiecare cu input propriu și ecran de rezultate dedicat. Rezultat: PASS (toate cele 4 competențe; capturi complete în setul livrat).
T-W09 · Istoric analize cu filtre (W5, W5b)
Flux: Dashboard → Istoric. Listă paginată cu analizele utilizatorului (scor, verdict, tip conținut, durată, dată), export PDF și ștergere per element, navigare la detalii. Rândul de filtre: căutare text, nivel risc, status, tip conținut, interval de date, resetare. Rezultat: PASS.
Verificare filtrare efectivă: cu filtrul „Nivel risc: Critic" aplicat, lista se restrânge la analizele cu nivel Critic; „Resetează" revine la lista completă. Rezultat: PASS.
T-W10 · Setări cont + distribuirea aplicațiilor client (W7)
Flux: Dashboard → Setări: profil utilizator, schimbare parolă (flux Keycloak), abonament. Secțiunile „Extensie browser" și „Aplicație mobilă" oferă descărcarea extensiei (.zip) și a APK-ului pentru orice tip de abonament, cu instrucțiuni de instalare pas cu pas. Rezultat: PASS.
T-W11 · Validare input, SSRF și accesibilitate (W9, W12–W15, W17)
Flux (verificare tehnică, fără captură): validarea URL-urilor respinge IP-uri private/localhost
(protecție SSRF, inclusiv forme hex/octal/IPv6); fișierele sunt validate pe MIME + extensie +
dimensiune (20/50/100 MB) cu mesaje explicite; toate apelurile trec exclusiv prin API Gateway cu
Bearer și tratare erori/timeout; WCAG: ARIA pe componentele interactive, aria-live pe toast-uri,
focus vizibil, font scaling (rem/clamp), prefers-reduced-motion. Verificat prin inspecția codului
(utils/url-validation.ts, utils/file-validation.ts, services/http.client.ts) și teste
negative manuale. Rezultat: PASS.
5. Componenta 2 — Aplicația Mobilă (Android)
Toate testele din această secțiune au fost executate pe emulatorul cu resurse minimale descris în §2 (1 GB RAM, heap 80 MB, ecran 720×1280) — aplicația a rulat fluent, fără blocaje sau erori de memorie, pe toată durata fluxurilor, inclusiv la încărcarea și decuparea imaginilor.
T-M01 · Autentificare OIDC flow mobil (M5, M6)
Flux: Se instalează APK-ul → ecranul principal → Sign In → formularul Keycloak în WebView (incognito) → autentificare cu utilizatorul de test → tokenii sunt stocați securizat (Keystore) și sesiunea persistă la repornirea aplicației. Rezultat: PASS.
T-M02 · Dashboard și navigare (M1)
Flux: După autentificare, dashboard-ul afișează profilul și cardurile de navigare: Analiză completă, Competențe individuale, Istoric, Setări. Rezultat: PASS.
T-M03 · Analiză completă cu progres (M1)
Flux: Analiză completă → se trimite conținut → progres în timp real pe componente (polling asincron), apoi rezultate. Rezultat: PASS.
T-M04 · Crop imagine înainte de trimitere (M3)
Flux: Tab Imagine → „Selectați din galerie" → se alege o imagine → se deschide editorul nativ de decupare (selectarea regiunii) → imaginea decupată apare în preview și se trimite la analiză. Același comportament la fotografiere cu camera. Rezultat: PASS.
T-M05 · Consimțământ explicit la încărcarea fișierelor (M10)
Flux: La prima trimitere a unui fișier media apare modalul „Consimțământ pentru încărcarea fișierelor" cu notă de confidențialitate; butonul de continuare este inactiv până la bifarea acordului; „Anulează" oprește trimiterea. Acordul persistă; ulterior rămâne mențiunea discretă. Rezultat: PASS.
T-M06 · Rezultate în format optimizat mobil (M4)
Flux: Rezultatul afișează verdict + scor, secțiuni expandabile per componentă, evidențe/surse cu linkuri, tehnici de manipulare și recomandări (ex. „NU DISTRIBUI"). Rezultat: PASS.
T-M07 · Share-to-Analyze — imagine (M2c, M2d)
Flux: Din Google Photos → Share → didi → ecranul „Analizează imaginea" cu miniatura conținutului partajat → se alege tipul de analiză → imaginea ajunge preîncărcată în fluxul de analiză (cu mențiunea de consimțământ vizibilă). Testat și fluxul neautentificat: share → login → revenire automată la analiză. Rezultat: PASS.
T-M08 · Share-to-Analyze — text fără URL (M2b)
Flux: Dintr-o aplicație terță se partajează un text simplu (fără link) → didi deschide ecranul „Analizează textul" cu textul preluat → analiza pornește cu textul preîncărcat pe tab-ul Text. Rezultat: PASS.
T-M09 · Share-to-Analyze — link (M2)
Flux: Din browser se partajează un URL → didi deschide ecranul „Analizează URL" cu linkul preluat și opțiunile de analiză (inclusiv Analiză domeniu, disponibilă pentru URL-uri). Rezultat: PASS.
T-M10 · Competențe individuale (M12)
Flux: Ecranul Competențe → Tehnici de manipulare / Evaluarea sursei / Detecție AI / Analiză afirmații, fiecare cu input adaptat și rezultate dedicate. Rezultat: PASS (capturi complete în setul livrat).
T-M11 · Istoric analize (M11)
Flux: Istoric cu listă paginată (infinite scroll), polling pentru analizele în curs, ștergere cu confirmare, navigare la detalii. Rezultat: PASS.
T-M12 · Setări și deconectare completă (M13)
Flux: Setări → profil, schimbare parolă, limbă, opțiuni social share și secțiunea „Deconectare" (stil de avertizare) → dialog de confirmare → tokenul de refresh este revocat server-side și aplicația revine la ecranul principal. Rezultat: PASS.
6. Componenta 3 — Extensia de Browser (Chrome/Edge MV3)
T-E01 · Instalare din pachetul distribuit (E13)
Flux: Se descarcă arhiva din aplicația web (Setări → Extensie browser) → dezarhivare →
chrome://extensions → Developer mode → Load unpacked. Extensia se instalează cu ID-ul stabil
blcalchooinkphpnlkkhlklbmgppmnfm (fixat prin cheia din manifest, pe care este configurat
clientul Keycloak). Rezultat: PASS. (Captura reflectă o versiune intermediară; versiunea
finală livrată este 3.2.5.)
T-E02 · Autentificare OIDC/OAuth2 cu PKCE (E5, E6)
Flux: Popup → „Autentificare" → se deschide fereastra Keycloak (realm didi-clients, client
didi-extension, PKCE S256 + state anti-CSRF) → login cu utilizatorul de test → popup-ul afișează
emailul contului; tokenii sunt stocați în chrome.storage.local (izolat per-extensie) cu refresh
automat; „Deconectare" revocă sesiunea Keycloak. Rezultat: PASS.
T-E03 · Analiză URL și text din popup (E1, E1b, E2b)
Flux: Popup-ul oferă: câmp URL cu validare + buton „Pagina curentă" (preia automat URL-ul tab-ului activ) + „Analizează URL"; secțiune de text cu contor de caractere (max 5000) — textul selectat în pagină este preluat automat la deschiderea popup-ului. Nota de confidențialitate este afișată permanent. Rezultat: PASS.
T-E04 · Consimțământ explicit pentru capturi (E12)
Flux: La prima captură de ecran / trimitere de imagine apare modalul „Consimțământ pentru analiză" (conținutul e folosit exclusiv pentru raport; se trimite doar fragmentul selectat); „Anulează" oprește fluxul; acordul persistă. Rezultat: PASS.
T-E05 · Captură de ecran cu selectarea regiunii (E3b)
Flux: Popup → „Screenshot" → overlay pe pagina curentă → utilizatorul trasează regiunea de analizat (drag select) → extensia decupează exact regiunea selectată (OffscreenCanvas + devicePixelRatio), o încarcă și pornește analiza. Rezultat: PASS.
T-E06 · Meniu contextual — analiza imaginii din pagină (E3)
Flux: Click-dreapta pe orice imagine dintr-un site → opțiunea „Analizează imaginea cu DiDi" în meniul contextual → consimțământ (prima dată) → imaginea este preluată, încărcată și analizată; rezultatul apare ca modal peste pagină. Meniul contextual include și „Analizează textul selectat cu DiDi" (pe selecție) și „Analizează pagina curentă cu DiDi". Rezultat: PASS.
T-E07 · Panel de rezultate complet (E4)
Flux: După analiză, rezultatul se afișează în panel (modal în pagină / tab dedicat): miniatura conținutului analizat, scor de risc cu inel, verdict cu nivel și certitudine, explicație completă în română, acțiune recomandată, Detecție AI, Verificarea afirmațiilor (status per afirmație + surse cu poziție Susține/Contrazice), Evaluarea sursei (semnale de alarmă, avertismente). Rezultat: PASS.
Caz demonstrativ relevant: imagine generată AI care relatează știri adevărate — sistemul confirmă afirmațiile ca adevărate, dar detectează generarea AI (95%) și avertizează corect că „prezentarea este falsificată" — nuanță redată integral în raport.
T-E08 · Istoric analize în extensie (E10)
Flux: Popup → „Istoric" → pagină dedicată cu analizele efectuate (max 50, stocate local), detalii per analiză și ștergere individuală. Rezultat: PASS.
T-E09 · Minimizarea datelor (E7)
Flux (verificare tehnică): payload-urile trimise conțin strict conținutul de analizat
(text / url / URL-ul fragmentului de imagine încărcat) plus identitatea din token — nimic
suplimentar din pagină. Verificat prin inspecția codului (background.js) și a traficului.
Rezultat: PASS.
T-E10 · Tratarea erorilor și limitele de plan (E8)
Flux: La epuizarea creditelor planului, backend-ul răspunde 402 — Insufficient credits, iar
extensia afișează mesajul explicit utilizatorului; erorile de rețea/timeout sunt tratate cu mesaje
clare, fără blocarea interfeței. Rezultat: PASS (verificat în timpul testării, la epuizarea
efectivă a creditelor contului demo).
7. Teste de integrare backend (IAM + API Gateway)
Executate pe 15.07.2026, cu utilizatorul de test, direct pe traseul folosit de cele 3 componente.
| # | Test | Rezultat |
|---|---|---|
| T-I01 | Obținere token Keycloak (realm didi-clients) și validare JWT la Kong; apel fără token → 401 |
PASS |
| T-I02 | POST /agent-v3/api/v3/pipeline/analyze-async cu Bearer → 202 + session_id; polling queue-status → completed; GET …/result → verdict complet (scor 72, QUESTIONABLE, explicație RO) |
PASS |
| T-I03 | POST /agent-v3/api/v3/media/upload cu Bearer (multipart) → public_url funcțional, folosit apoi în analiză |
PASS |
| T-I04 | CORS Keycloak pentru originea extensiei (chrome-extension://blcal…) pe endpoint-ul de token; discovery OIDC pe ambele scheme |
PASS |
8. Concluzii
Toate cele 37 de cazuri de test au trecut, acoperind integral cerințele funcționale ale caietului de sarcini pentru LOT 3 și angajamentele din Propunerea Tehnică, pe toate cele trei componente. Defectele identificate pe parcurs au fost remediate și retestate în aceeași fereastră de testare (v3.2.4–3.2.5 extensie). Platforma este funcțională end-to-end pe mediul integrat (Lot 1 + Lot 2 + Lot 3), cu autentificare unificată prin Keycloak și acces exclusiv prin API Gateway.
Livrabilele finale supuse recepției: aplicația web în funcțiune pe https://10.11.10.18/,
didi-app-clossers.apk, didi-extension-clossers.zip (v3.2.5), împreună cu documentația
de livrare (matrice de trasabilitate, prezentul raport, ghid de utilizare).
Întocmit: Furnizor Lot 3 · 17.07.2026




































