Files
ppeasy_vg12/tests/Unit/Repositories/Session/DbSessionTest.php
T
2026-10-09 08:21:06 +02:00

121 lines
3.1 KiB
PHP

<?php
use App\Models\User;
use App\Repositories\Session\DbSession;
use Carbon\Carbon;
use Faker\Generator;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Str;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->repo = app(DbSession::class);
});
test('get user session', function () {
$user = User::factory()->create();
Carbon::setTestNow(Carbon::now());
$data1 = getSessionStubData($user);
$data2 = getSessionStubData($user);
DB::table('sessions')->insert($data1);
DB::table('sessions')->insert($data2);
$expected = collect([
(object) addAddMissingFields($data1),
(object) addAddMissingFields($data2),
]);
$expected = $expected->sortBy('id')->keyBy('id')->toArray();
$actual = $this->repo->getUserSessions($user->id)
->sortBy('id')
->keyBy('id')
->toArray();
$this->assertEquals($expected, $actual);
});
function addAddMissingFields(array $data)
{
$agent = app('agent');
$agent->setUserAgent($data['user_agent']);
return array_merge($data, [
'browser' => $agent->browser(),
'platform' => $agent->platform(),
'device' => $agent->device(),
'last_activity' => Carbon::createFromTimestamp($data['last_activity']),
]);
}
test('if get user sessions will return active sessions only', function () {
$user = User::factory()->create();
Carbon::setTestNow(Carbon::now());
$data1 = getSessionStubData($user);
$data2 = getSessionStubData($user);
$data2['last_activity'] = Carbon::now()->subMinutes(config('session.lifetime') + 1)->timestamp;
DB::table('sessions')->insert($data1);
DB::table('sessions')->insert($data2);
$expected = collect([
(object) addAddMissingFields($data1),
]);
$expected = $expected->sortBy('id')->keyBy('id')->toArray();
$actual = $this->repo->getUserSessions($user->id)
->sortBy('id')
->keyBy('id')
->toArray();
$this->assertEquals($expected, $actual);
});
test('invalidate user session', function () {
$user = User::factory()->create([
'remember_token' => Str::random(60),
]);
$data = getSessionStubData($user);
DB::table('sessions')->insert($data);
$this->repo->invalidateSession($data['id']);
$this->assertDatabaseMissing('sessions', $data)
->assertDatabaseHas('users', ['remember_token' => null]);
});
test('invalidate all sessions for user', function () {
$user = User::factory()->create([
'remember_token' => Str::random(60),
]);
$data = getSessionStubData($user);
DB::table('sessions')->insert($data);
$this->repo->invalidateAllSessionsForUser($user->id);
$this->assertDatabaseMissing('sessions', ['user_id' => $user->id])
->assertDatabaseHas('users', ['remember_token' => null]);
});
function getSessionStubData($user)
{
$faker = app(Generator::class);
return [
'id' => Str::random(),
'user_id' => $user->id,
'ip_address' => $faker->ipv4,
'user_agent' => $faker->userAgent,
'payload' => 'foo',
'last_activity' => Carbon::now()->timestamp,
];
}