Skip to content

Platforme Management

opencode-agent edited this page Sep 27, 2026 · 3 revisions

Gestionarea Platformelor 🖥️

Ce este o Platformă?

O Platformă este un mediu specific pe care testezi aplicația:

Platforme Tipice:

Hardware:
├─ Windows 10
├─ Windows 11
├─ macOS 12
├─ macOS 13
├─ Ubuntu Linux
└─ CentOS Linux

Browsers:
├─ Chrome 120+
├─ Firefox 121+
├─ Safari 17+
└─ Edge 120+

Mobile:
├─ iOS 15
├─ iOS 16
├─ iOS 17
├─ Android 11
├─ Android 12
└─ Android 13

Combinații:
├─ Windows 11 + Chrome 120
├─ macOS 13 + Safari 17
├─ iOS 17 + Safari
├─ Android 13 + Chrome
└─ etc

Creare Platformă

Cine poate: Administrator, Project Manager

Pași:

  1. Mergi la Proiect → Setări → Platforme
  2. Apasă Adaugă Platformă Nouă
  3. Completează:
Camp Descriere Exemplu
Nume Identificator clar Windows 11 + Chrome 120
Descriere Detalii "Enterprise OS, latest Chrome"
  1. Apasă Salvează

Exemplu:

Nume: iOS 17 + Safari
Descriere: 
Latest iOS version with native Safari browser.
For iPad and iPhone testing.
Supports latest web standards.

Platforme în Test Plan

Când creezi Test Plan, selectezi platformele:

Plan: Banking v1.5 Release

Platforme Selectate:
├─ Windows 11 + Chrome 120
├─ macOS 13 + Safari 17
├─ iOS 17 (iPhone 15)
└─ Android 13 (Samsung Galaxy)

Fiecare Test Case se execută pe FIECARE platformă!

Exemplu:
TC-001 (Login) va rula pe:
├─ Windows → PASS
├─ macOS → PASS
├─ iOS → FAIL (bug: autofill)
└─ Android → PASS

Matricea Platform-Test

Fiecare combinație (test case + platform) are propriul rezultat:

Test Case | Windows | macOS | iOS | Android
-----------|---------|-------|-----|--------
TC-001    | PASS    | PASS  | FAIL| PASS
TC-002    | PASS    | PASS  | PASS| PASS
TC-050    | FAIL    | PASS  | PASS| FAIL
TC-100    | PASS    | FAIL  | N/R | PASS

Platform Coverage Report

Raport: Pe care platforme suntem bine / rău?

Platform Analysis:

Windows 11 + Chrome 120:
├─ Tests Pass: 95%
├─ Tests Fail: 3%
├─ Tests N/R: 2%
└─ Status: ✅ GOOD

macOS 13 + Safari 17:
├─ Tests Pass: 92%
├─ Tests Fail: 5%
├─ Tests N/R: 3%
└─ Status: 🟡 MEDIUM

iOS 17 + Safari:
├─ Tests Pass: 85%
├─ Tests Fail: 12%
├─ Tests N/R: 3%
└─ Status: 🔴 NEEDS WORK

Android 13 + Chrome:
├─ Tests Pass: 88%
├─ Tests Fail: 8%
├─ Tests N/R: 4%
└─ Status: 🟡 MEDIUM

Platform-Specific Bugs

Unele bug-uri apar DOAR pe anumite platforme:

BUG-2024-0045: Autofill not working
├─ Platform: iOS 17 + Safari
├─ Other platforms: N/A (works fine)
├─ Cause: Mobile Safari specific
├─ Fix: Safari custom handling
└─ Status: In Development

BUG-2024-0046: Font rendering issue
├─ Platform: Windows 10 + Chrome
├─ Other platforms: N/A (renders fine)
├─ Cause: Font cache issue
├─ Fix: Clear cache on load
└─ Status: Resolved

Edita Platformă

  1. Proiect → Platforme → [Selectează]
  2. Apasă Editează
  3. Schimbă:
    • Nume
    • Descriere
    • Status (Active/Inactive)
  4. Apasă Salvează

Șterge Platformă

⚠️ Atenție: Dacă ștergi platform, se pierd rezultatele testelor pe acea platformă!

Alternativă: Dezactivare

  1. Editează Platform
  2. Status: Inactive
  3. Rămâne în sistem, dar nu apare în teste noi

Platform Grupos

Poți grupa platforme similar:

Desktop:
├─ Windows 11 + Chrome
├─ macOS 13 + Safari
└─ Linux + Firefox

Mobile:
├─ iOS 17
├─ Android 13
└─ Android 12

Legacy (Deprecated):
├─ Windows 7 (no longer test)
├─ IE 11 (no longer test)
└─ (archived for reference)

Best Practices

✅ DO:

  • Defini clar: Ce versiune exactă?
  • Documenare: Unde testezi?
  • Coverage: Minimum 3 platforme
  • Track bugs: Platform-specific
  • Update: Adaugă noi versiuni

❌ DON'T:

  • Nu amesteca versiuni (Chrome 115 + Chrome 120)
  • Nu lansa fără testat pe principal platforme
  • Nu ștergi platforme cu rezultate
  • Nu ignora mobile testing

Platforme: Critical pentru release! Verifica totul pe fiecare! 🎯


Fixed: ArgumentCountError 500 în platforms BFF export la testproject::getName() (Issue #534)

Simptom. GET /api/platforms/index.php/export?tproject_id=<id real> fără parametrul filename întorcea HTTP 500 (ArgumentCountError: Too few arguments to function testproject::getName()). Ramura de nume de fișier implicit din exportul BFF de platforme era complet nefuncțională pentru orice consumator direct al API-ului. Ecranul Platform Management nu era afectat vizibil, pentru că modalul de export trimite întotdeauna un filename.

Cauza root. api/platforms/index.php:369 apela

$tname = str_ireplace(" ", "", $tproject_mgr->getName($tproject_id));

— apel de instanță — dar în acest codebase testproject::getName(&$dbh, $id) (librărie: lib/functions/testproject.class.php:4282) este static și primește mai întâi handler-ul de bază de date; apelul de instanță transmite un singur argument, deci PHP 8 aruncă ArgumentCountError. Exact același tipar ca bug-ul din keywords BFF reparat în issue #531.

Abordarea fix-ului. Apelul a fost schimbat în apel static corect:

$tname = str_ireplace(" ", "", testproject::getName($db, $tproject_id));

Alternative respinse: wrapper de instanță nou în clasa testproject (dublă mentenanță pentru același query) sau duplicarea SQL-ului în BFF (pierde sursa unică de adevăr). Soluția aleasă reproduce 1:1 fix-ul deja validat din api/keywords/index.php:138, deci comportamentul este consistent între cele două BFF-uri și identic cu legacy platformsExport.php doExport() (<NumeProiectFărăSpații>-platforms.xml).

Stare. Fix livrat pe branch-ul sebiboga (commit 1c2fac63b). Verificat cap-coadă: export fără filename → HTTP 200 cu Content-Disposition: filename="DemoProject-platforms.xml"; export cu filename=custom.xml → numele custom păstrat; export cu platforme definite produce documentul ADODB_XML legacy (<platforms><platform>…<is_open>); butonul Export Platforms din UI funcționează (HTTP 200); rutele surioare (list/create/delete) re-testate OK; Event Viewer fără erori noi.

Platform Management screen after the #534 fix


Task #1012 — Default-urile noii platforme trebuie să coincidă cu legacy

Ecran: Platform Management (gui/templates/platforms/platformsView.html)

Simptom

Platformele create din 2.0.1 se nășteau mereu cu toate cele trei flag-uri ACTIVE: enable_on_design=1, enable_on_execution=1, is_open=1. Legacy 1.9.20 deschide formularul de creare cu toate cele trei căsuțe debifate.

Contractul legacy (măsurat, cu file:line)

  1. lib/platforms/platformsEdit.php:364-378 init_gui() fixează explicit $gui->enable_on_design = 0; $gui->enable_on_execution = 0; $gui->is_open = 0;
  2. gui/templates/dashio/platforms/platformsEdit.tpl:60-77 randează checked doar cu {if $gui-><flag> eq 1} ⇒ formularul de creare apare gol.
  3. lib/platforms/platformsEdit.php:158-169 init_args() — o căsuță nebifată lipsește din POST, tlInputParameter::CB_BOOL întoarce null, iar toate cele trei sunt coerționate la 0.
  4. lib/platforms/platformsEdit.php:260-269 do_create() — $k2c are default 'enable_on_design' => 0, 'enable_on_execution' => 0, 'is_open' => 0.

⇒ Legacy salvează 0/0/0.

Abaterea din 2.0.1

  • gui/templates/platforms/platformsView.html:304-306 openCreate() bifa toate trei căsuțe (prop('checked', true)) ⇒ rând 1/1/1 în DB.
  • api/platforms/index.php:208-209 — câmpul is_open lipsit din body primea default 1, iar comentariul care o explica („legacy create() defaults is_open to 1") era factual greșit: el cita ramura ,1 din tlPlatform::create() (lib/functions/tlPlatform.class.php:76-80), care este inaccesibil de pe calea de creare a lui platformsEdit — do_create() atribuie întotdeauna proprietatea prin $k2c, deci property_exists($platform,'is_open') e mereu adevărat. BFF-ul re-expunea în sursă a doua ramura a modelului ca comportament viu. Ramura respectivă rămâne activă pentru XML-RPC createPlatform (lib/api/xmlrpc/v1/xmlrpc.class.php:6909-6917 construiește $plot fără is_open), motiv pentru care corecția elimină default-ul doar din ruta REST și nu atinge tlPlatform::create().

Corecția

  • openCreate() bifează acum false pentru toate trei (cu referință la sursa legacy în comentariu). Modalul de editare rămâne neatins: acolo editPlat() trebuie să continue să reflecte valorile stocate.
  • BFF-ul tratează un flag absent ca 0, exact ca pe celelalte două.

Este o schimbare de default, nu de coerție: cine bifează toate trei tot primește 1/1/1, iar flag-urile unei platforme existente nu sunt atinse niciodată. Nu e necesară nicio cheie i18n (niciun șir nou afișat utilizatorului).

Verificare

Caz Așteptat Măsurat Verdict
Creare, toate nebifate 0/0/0 {onDesign:false, onExec:false, isOpen:false}; DB Solaris 0 0 0 PASS
Creare, doar Open for Execution 0/0/1 DB LinuxOpenOnly 0 0 1 PASS
Creare, toate bifate 1/1/1 DB WinAllOn 1 1 1 PASS
Editare platformă existentă reflectă valorile stocate WinAllOn 1/1/1; după debifarea On Design → 0/1/1 PASS
POST / fără flag-uri 0/0/0 (înainte: 0/0/1) {"status":"ok","id":6}; DB OmitFlagsAfterFix 0 0 0 PASS
Toggle-uri rapide PUT /{id}/flags funcționează 3× {"status":"ok"}; DB 1/1/1 → 0/1/1 PASS
Nume gol la creare eroare inline Empty platform name is not allowed PASS
Ștergere rândul dispare listă (3) PASS
Event Viewer 0 rânduri noi ERROR/WARNING doar (log_level 16, count 1) = audit_login_succeeded PASS
Consolă browser fără erori JS fără erori PASS

Suita de teste: 16/16 PASS (tmp/TLU_Test_Cases.md, secțiunea „Task — Issue #1012"). node --check + php -l curate.

Create Platform modal after #1012 — all three flags unchecked

Clone this wiki locally