Testing
composer validate --no-check-publish
composer dump-autoload
php artisan awn:extensions:validate
php artisan route:list -v --name=plugin
php artisan test --compact
./vendor/bin/pint --test
php artisan view:cache
npm run build
Contract tests load every enum manifest/driver/view and exercise invalid keys, options/ranges, thumbnails, route prefixes, organization and Super Admin routes/duplicates/settings collisions, grouped navigation, page patterns, slots, capabilities, widgets, and normalized defaults.
Lifecycle tests cover install, unavailable enable rejection, normalized configure/cache invalidation, reversible disable, data-preserving global deactivate/reinstall, destructive purge, compatibility, and blocked theme switches.
Tenant tests use two organizations/members for every read/mutation and guessed ULID. Assert dashboard authorization and tenant-scoped 404. Rendering matrix covers both themes, home/CMS/static/dynamic pages, all slots, priority, navigation, publication/preview, unavailable state, and hostile/stale settings.
Current suites:
PluginEngineTest: discovery, catalogs, Contact Form, lifecycle, compatibility, isolation, normalization, cache.EventsPluginTest: CRUD isolation, dynamic pages, preview, dashboards, slot, seeding, purge.FundraisingDashboardTest: every organization dashboard surface, project creation/state changes, private proof submission/download, and attributed donation verification.PluginSuperAdminSurfaceTest: global navigation/widgets/pages, cross-organization read-only aggregation, global deactivation, authorization, and route-definition guards.DeveloperDocumentationTest: registered pages and contract terms.DocumentationAccuracyTest: allowlists, capabilities, routes, commands, contracts, config keys, and reference package paths.
Events tests verify the local/testing sample seeder runs under tenant scope and that purge removes plugin data. Fundraising tests use Storage::fake('local') to prove receipts are private and assert verified state/reviewer persistence.
For every Super Admin contribution, assert guest and ordinary-user denial, installed/active filtering, direct route middleware, absence of organization route parameters, organization labels on global rows, and no cross-tenant mutation controls.
Every configured doc page needs a readable registered path. Keep signatures exact, cache versions current, and implemented behavior out of Roadmap.