create(); $userB = User::factory()->create(); $session = OnboardingSession::factory()->create([ 'locked_by_user_id' => null, 'locked_until' => null, ]); $locks = app(OnboardingLockService::class); expect($locks->acquire($session, $userA, ttlSeconds: 600))->toBeTrue(); $session->refresh(); expect((int) $session->locked_by_user_id)->toBe((int) $userA->getKey()); expect($session->locked_until)->not->toBeNull(); expect($locks->acquire($session, $userB, ttlSeconds: 600))->toBeFalse(); }); it('allows takeover', function (): void { $userA = User::factory()->create(); $userB = User::factory()->create(); $session = OnboardingSession::factory()->create([ 'locked_by_user_id' => $userA->getKey(), 'locked_until' => now()->addMinutes(5), ]); $locks = app(OnboardingLockService::class); $locks->takeover($session, $userB, ttlSeconds: 600); $session->refresh(); expect((int) $session->locked_by_user_id)->toBe((int) $userB->getKey()); });