Files
ppeasy_vg12/tests/Feature/Api/StatsControllerTest.php
T
2026-10-09 08:21:06 +02:00

63 lines
1.7 KiB
PHP

<?php
use App\Http\Resources\UserResource;
use App\Models\Role;
use App\Models\User;
use App\Repositories\User\UserRepository;
use App\Support\Enum\UserStatus;
use Carbon\Carbon;
use Tests\Feature\ApiTestCase;
test('unauthenticated', function () {
$this->getJson('/api/stats')->assertStatus(401);
});
test('get stats as admin', function () {
DB::table('users')->delete();
$adminRole = Role::whereName('Admin')->first();
$user = User::factory()->create(['role_id' => $adminRole->id]);
$this->be($user, ApiTestCase::API_GUARD);
Carbon::setTestNow(Carbon::now()->startOfYear());
User::factory()->times(4)->create(['status' => UserStatus::ACTIVE]);
Carbon::setTestNow(null);
User::factory()->times(2)->create(['status' => UserStatus::BANNED]);
User::factory()->times(7)->create(['status' => UserStatus::UNCONFIRMED]);
$users = app(UserRepository::class);
$response = $this->getJson('/api/stats');
$usersPerMonth = $users->countOfNewUsersPerMonthPerRole(
now()->subYear()->startOfMonth(),
now()->endOfMonth()
);
$latestRegistrations = $users->latest(7);
$response->assertOk()
->assertJson([
'users_per_month' => $usersPerMonth,
'users_per_status' => [
'total' => 14,
'new' => $users->newUsersCount(),
'banned' => 2,
'unconfirmed' => 7,
],
'latest_registrations' => UserResource::collection($latestRegistrations)->resolve(),
]);
});
test('non admin users cannot get user stats', function () {
$user = User::factory()->create();
$this->actingAs($user, ApiTestCase::API_GUARD)->getJson('/api/stats')->assertForbidden();
});