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

61 lines
1.7 KiB
PHP

<?php
use App\Http\Resources\SessionResource;
use App\Models\User;
use App\Repositories\Session\SessionRepository;
use Facades\Tests\Setup\UserFactory;
use Faker\Generator;
use Illuminate\Support\Str;
use Tests\Feature\ApiTestCase;
test('get sessions unauthenticated', function () {
$user = User::factory()->create();
$this->getJson("/api/users/{$user->id}/sessions")->assertStatus(401);
});
test('get user sessions without permission', function () {
$user = UserFactory::create();
$this->actingAs($user, ApiTestCase::API_GUARD)
->getJson("/api/users/{$user->id}/sessions")
->assertForbidden();
});
test('get user sessions', function () {
config(['session.driver' => 'database']);
$user = UserFactory::withPermissions('users.manage')->create();
$sessions = generateUserApiSessions($user);
$this->actingAs($user, ApiTestCase::API_GUARD)
->getJson("/api/users/{$user->id}/sessions")
->assertOk()
->assertJson([
'data' => SessionResource::collection($sessions)->resolve(),
]);
});
function generateUserApiSessions(User $user, $count = 5)
{
$sessions = [];
$faker = app(Generator::class);
$lifetime = config('session.lifetime') - 1;
for ($i = 0; $i < $count; $i++) {
array_push($sessions, [
'id' => Str::random(40),
'user_id' => $user->id,
'ip_address' => $faker->ipv4,
'user_agent' => $faker->userAgent,
'payload' => Str::random(),
'last_activity' => $faker->dateTimeBetween("-{$lifetime} minutes")->getTimestamp(),
]);
}
DB::table('sessions')->insert($sessions);
return app(SessionRepository::class)->getUserSessions($user->id);
}