Vai al contenuto

Sviluppo locale e test

Ambiente locale

In locale GesTask gira in XAMPP, da htdocs/Gestione Servizi SPA/gestask. Il percorso contiene spazi: il codice ne tiene conto, ma va ricordato quando si scrivono script o URL a mano.

composer install
php init --env=Development --overwrite=n
php yii migrate
php yii_test migrate
  • php init crea i file *-local.php da environments/dev. In sviluppo il database è yii2advanced (utente root senza password), quello dei test yii2advanced_test; si cambiano in common/config/main-local.php e common/config/test-local.php.
  • In sviluppo le email non partono: finiscono in runtime/mail.
  • Senza Redis non c'è coda: i job girano subito (vedi Architettura) e le attività pianificate si lanciano a mano (vedi Console).
  • Per le notifiche push in XAMPP serve la configurazione OpenSSL che frontend/web/index.php cerca in C:/xampp/apache/conf/openssl.cnf.
  • Su Windows esistono anche yii.bat e yii_test.bat.

PHP in locale è 8.2, nel container 8.4: il codice deve restare compatibile con la 8.2.

Dipendenze

Pacchetto Versione A cosa serve
yiisoft/yii2 ~2.0.54 framework
yiisoft/yii2-bootstrap5 ~2.0.2 griglia e componenti di base
yiisoft/yii2-symfonymailer ~2.0.3 email
yiisoft/yii2-queue, yiisoft/yii2-redis ^2.0 coda in produzione
minishlink/web-push ^9.0 notifiche Web Push

In sviluppo: Codeception 5 con i moduli Yii2, Asserts, Filesystem e PhpBrowser; PHPStan 2; Yii2 Coding Standards; debug, gii e faker di Yii.

Prima di aggiungere una dipendenza, verificare che non basti la libreria standard o qualcosa già installato.

Test

Le suite sono di Codeception, una per applicazione:

Suite Contenuto
frontend Unit modelli e servizi del dominio (la maggior parte dei test)
frontend Functional flussi di pagina: riunioni, sotto-task, scomposizione, etichette, modelli di bacheca, menzioni, consenso OAuth
api Functional richieste HTTP alla v1: rotte, autenticazione, permessi, serializzazione, token master; server MCP (McpCest), OAuth (OAuthCest), funzioni utente (UserFeaturesCest) e amministrazione (AdminCest)
backend Functional login e token master
# tutte le suite
vendor/bin/codecept run

# una suite o un file
vendor/bin/codecept run -c frontend Unit
vendor/bin/codecept run -c api Functional TaskCest
vendor/bin/codecept run -c frontend Unit Models/TaskBreakdownTest
  • I test usano yii2advanced_test: dopo ogni migrazione nuova lanciare php yii_test migrate.
  • frontend/tests/Support/BoardScenario crea in un colpo team, utente, bacheca e stati predefiniti; i test API lo usano tramite api/tests/Support/Helper/Api (haveApiScenario(), haveTokenFor(), sendApi()).
  • Ogni test gira in una transazione annullata alla fine.
  • sendForm() invia un modulo x-www-form-urlencoded, come i client OAuth verso il token endpoint.
  • McpCest::everyRouteIsATool fallisce se api/mcp/tools.php non è allineato allo spec: dopo una modifica a openapi-v1.yaml o alle rotte va lanciato php yii mcp/tools.
  • TeamVisibility ricorda chi è supervisore per tutta la richiesta: in un test params['teamOverseers'] va impostato prima della prima chiamata.

Analisi statica e stile

composer static   # PHPStan livello 5
composer cs       # phpcs con lo standard Yii2 (phpcs.xml.dist)
composer cs-fix
composer ci       # cs, static e test in sequenza: si ferma al primo errore

Copertura

phpstan.neon e phpcs.xml.dist non includono api/, common/services, common/bootstrap e common/rbac, e citano cartelle di test che non esistono (common/tests). PHPStan scansiona api/components solo per risolvere le classi usate dalla console.

Convenzioni

  • Codice: declare(strict_types=1), classi final quando non sono pensate per essere estese, commenti in italiano che spiegano il perché.
  • Logica nei servizi: i controller leggono l'input, controllano i permessi e serializzano; le regole stanno in common/services (vedi Architettura).
  • Date nelle viste: solo i formati brevi del formatter, mai long, medium o full.
  • Immagini comuni: stanno in common/images e si servono con ImageAsset::url().
  • Commit: Conventional Commits in italiano, minuscolo, senza punto finale; tipi, ambiti e casi particolari in notes/convenzioni-commit.md.

Versioni e rilasci

  • Versionamento semantico; ogni rilascio ha un tag annotato vX.Y.Z e un commit release: vX.Y.Z. Regole in notes/gestione-versioni.md.
  • Un rilascio è una nuova voce in cima a common/data/changelog.php (versione senza v, data, titolo, sintesi, modifiche di tipo feature, improvement, fix). Da quella voce dipendono la versione nel piè di pagina, la pagina "Novità e crediti", la finestra delle novità e la versione mostrata in Sistema nel pannello. Procedura in notes/rilascio-versioni.md.
  • I crediti sono in common/data/credits.php.
  • ReleaseNotesTest verifica che il changelog sia ben formato.

Questa wiki

I sorgenti sono in docs_src/docs/ (cartella non versionata), la configurazione in mkdocs.yml, l'HTML generato in wiki/ (versionato). Serve MkDocs con il tema Material.

python -m mkdocs serve          # anteprima con ricarica automatica
python -m mkdocs build --strict # rigenera wiki/

Quando cambia un comportamento descritto qui, aggiornare la pagina nello stesso commit.