Add comprehensive test coverage and update notes
Some checks failed
CI/CD Pipeline / test (push) Successful in 3s
CI/CD Pipeline / deploy (push) Failing after 15s

This commit is contained in:
2026-02-08 19:04:12 +01:00
parent 160430e128
commit 88e4a70f88
43 changed files with 6114 additions and 520 deletions

View File

@@ -0,0 +1,63 @@
<?php
use App\Http\Controllers\StatsController;
use App\Models\Setting;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;
it('returns null board version when no version is set', function (): void {
Setting::where('key', 'version')->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);
});