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 initcrea i file*-local.phpdaenvironments/dev. In sviluppo il database èyii2advanced(utenterootsenza password), quello dei testyii2advanced_test; si cambiano incommon/config/main-local.phpecommon/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.phpcerca inC:/xampp/apache/conf/openssl.cnf. - Su Windows esistono anche
yii.bateyii_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 |
|
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 lanciarephp yii_test migrate. frontend/tests/Support/BoardScenariocrea in un colpo team, utente, bacheca e stati predefiniti; i test API lo usano tramiteapi/tests/Support/Helper/Api(haveApiScenario(),haveTokenFor(),sendApi()).- Ogni test gira in una transazione annullata alla fine.
sendForm()invia un modulox-www-form-urlencoded, come i client OAuth verso il token endpoint.McpCest::everyRouteIsAToolfallisce seapi/mcp/tools.phpnon è allineato allo spec: dopo una modifica aopenapi-v1.yamlo alle rotte va lanciatophp yii mcp/tools.TeamVisibilityricorda chi è supervisore per tutta la richiesta: in un testparams['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), classifinalquando 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, mailong,mediumofull. - Immagini comuni: stanno in
common/imagese si servono conImageAsset::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.Ze un commitrelease: vX.Y.Z. Regole innotes/gestione-versioni.md. - Un rilascio è una nuova voce in cima a
common/data/changelog.php(versione senzav, data, titolo, sintesi, modifiche di tipofeature,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 innotes/rilascio-versioni.md. - I crediti sono in
common/data/credits.php. ReleaseNotesTestverifica 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.