delete(); Setting::where('key', 'build')->delete(); $controller = new StatsController(); $response = $controller->__invoke(); $payload = $response->getData(true); expect($payload['board_version'])->toBeNull(); }); it('handles stats edge cases without crashing', function (): void { Storage::fake('public'); Setting::updateOrCreate(['key' => 'version'], ['value' => '1.0.0']); Setting::updateOrCreate(['key' => 'build'], ['value' => '9']); DB::shouldReceive('connection->getDriverName')->andReturn('sqlite'); DB::shouldReceive('selectOne')->andThrow(new RuntimeException('db fail')); $controller = new StatsController(); $response = $controller->__invoke(); $payload = $response->getData(true); expect($payload['database_size_bytes'])->toBeNull(); expect($payload['database_server'])->toBeNull(); expect($payload['board_version'])->toBe('1.0.0 (build 9)'); expect($payload['orphan_attachments'])->toBeInt(); }); it('returns null for database size and avatar size on exceptions', function (): void { DB::shouldReceive('connection->getDriverName')->andThrow(new RuntimeException('db fail')); $controller = new StatsController(); $refDb = new ReflectionMethod($controller, 'resolveDatabaseSize'); $refDb->setAccessible(true); $refAvatar = new ReflectionMethod($controller, 'resolveAvatarDirectorySize'); $refAvatar->setAccessible(true); expect($refDb->invoke($controller))->toBeNull(); \Illuminate\Support\Facades\Storage::shouldReceive('disk')->andThrow(new RuntimeException('disk fail')); expect($refAvatar->invoke($controller))->toBeNull(); }); it('sums avatar directory size', function (): void { Storage::fake('public'); Storage::disk('public')->put('avatars/a.png', 'a'); Storage::disk('public')->put('avatars/b.png', 'bb'); $controller = new StatsController(); $refAvatar = new ReflectionMethod($controller, 'resolveAvatarDirectorySize'); $refAvatar->setAccessible(true); expect($refAvatar->invoke($controller))->toBe(3); });