Add comprehensive test coverage and update notes
This commit is contained in:
63
tests/Unit/StatsControllerUnitTest.php
Normal file
63
tests/Unit/StatsControllerUnitTest.php
Normal 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);
|
||||
});
|
||||
Reference in New Issue
Block a user