nimuli/tests/Feature
boban deb5f310a1 fix(bio): plan-aware URL + plan-seeder + ulid→slug fix
- Migration: add bio_pages_limit to plans, make limit cols nullable (agency=unlimited)
- PlanSeeder: 4 plans (free/pro/business/agency) with tier/features/bio_pages_limit
- workspaces:assign-default-plan command: assigns free plan to unassigned workspaces
- BioPage::publicUrl(): free=apex-path, pro+=subdomain, custom=custom-domain
  - Security: str_ends_with check uses '.'.$apex to prevent evilnimu.li bypass
- BioPage::shortPublicUrl(): URL without scheme for display
- PlanLimitsService: use bio_pages_limit column (was features['bio_pages']), null=unlimited
- BioPageController: fix $bio → $page variable (view expects $page)
- Bio index/edit views: use publicUrl()/shortPublicUrl(), not hardcoded ULID URLs
- Bio edit view: publicUrlBase/displayUrlBase from component (plan-aware prefix)
- Create-bio modal: plan-aware URL prefix display
- PlanFactory/WorkspaceFactory: free()/pro() states for tests
- Tests: PublicUrlTest (5 cases), Free404FixTest (3 cases)

Known pre-existing failure (not caused by this change):
- Tests\Feature\Auth\EmailVerificationTest::email can be verified

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 22:44:54 +02:00
..
Analytics feat(analytics): click recording job with IP hashing, device detection, Redis counters 2026-05-16 00:56:52 +02:00
Api/V1 fix(quality): PHPStan level 6 compliance, Pint formatting 2026-05-16 08:28:10 +02:00
Auth style: apply Pint formatting to modal files and tests 2026-05-16 12:42:16 +02:00
Billing fix(quality): PHPStan level 6 compliance, Pint formatting 2026-05-16 08:28:10 +02:00
Bio fix(bio): plan-aware URL + plan-seeder + ulid→slug fix 2026-05-17 22:44:54 +02:00
Domain feat(domains): Domain model, DNS TXT verification action, pending verifier job 2026-05-16 08:14:33 +02:00
Livewire fix(modals): make create/edit/delete modals actually save + auto-refresh lists 2026-05-16 15:13:44 +02:00
Redirect feat(redirect): hot-path redirect controller with Redis cache, 302/404/410 2026-05-16 00:52:16 +02:00
Routing fix(bio): plan-aware URL + plan-seeder + ulid→slug fix 2026-05-17 22:44:54 +02:00
Security test(security): assert Permissions-Policy header 2026-05-16 07:52:20 +02:00
Seeders fix(ui+seed): FOUC eliminated + persistent dev-user 2026-05-16 12:53:29 +02:00
Settings feat(auth): TOTP 2FA enable/disable with recovery codes 2026-05-16 08:08:31 +02:00
Translation fix(i18n): remove stale redis del pattern, drop dead singleton 2026-05-16 01:29:45 +02:00
Webhook feat(webhooks): outgoing webhooks with HMAC signature, SSRF protection, retry 2026-05-16 07:46:57 +02:00
Workspace feat(workspace): create action, middleware, policies 2026-05-16 00:41:32 +02:00
ExampleTest.php feat: initial Nimuli scaffold with Laravel 12, Livewire 3, Octane, Reverb, Docker 2026-05-15 23:51:57 +02:00
ProfileTest.php fix: tests green + logout route + smoke test 2026-05-16 11:57:32 +02:00
RouteSmokeTest.php fix(sidebar+types): mobile slide animation, close-on-navigate, PHPStan clean 2026-05-16 15:47:17 +02:00