1.8 KiB
1.8 KiB
Lessons Learned
Docker / Worktree Setup
- The Docker dev container mounts from
young-storkworktree, NOTivory-raccoon - Do NOT copy files to
young-storkor usedocker cp— only modify files in theivory-raccoonworktree - Do NOT use
docker execto run tests — work entirely within theivory-raccoonworktree
Policy Tests
- Policy methods have typed parameters (e.g.,
Server $server) — anonymous classes cause TypeError - Must use
Mockery::mock(Model::class)->makePartial()instead of anonymous classes for model stubs - Use
shouldReceive('getAttribute')->with('property')->andReturn(value)for model properties accessed via relationship chains
Browser Tests (Pest Browser Plugin)
- Plugin runs an in-process HTTP server (Amphp) sharing the same SQLite :memory: database as the test process
- Model boot events that call external services (e.g.,
StandaloneDocker::createdruns docker commands) WILL fail in tests — useModel::withoutEvents()to wrap creation - Livewire full-page components that fail during
mount()silently redirect to the previous URL instead of showing an error page Server::proxySet()requiresisFunctional()which requiresis_reachable=trueANDis_usable=truein ServerSetting — tests without a validated server won't show proxy controls- Application/Database/Service pages require complex model chains (Application → Environment → Project → Team, with StandaloneDocker destination) that are difficult to fully set up for browser tests due to Livewire mount() redirecting on any chain failure
- The
currentTeam()helper reads from session (data_get(session('currentTeam'), 'id')) — set during browser login flow Project::createdauto-creates a "production" environment — don't manually create one with that name