entityManager = $this->createMock(EntityManagerInterface::class); $this->subscriber = new LoginStatsSubscriber($this->entityManager); } public function testOnLoginSuccessWithAccount() { $user = $this->createMock(Account::class); $request = new Request([], [], [], [], [], ['REMOTE_ADDR' => '127.0.0.1']); $request->headers->set('User-Agent', 'TestAgent'); // Manually setting client IP on Request is tricky without relying on 'REMOTE_ADDR' server var or trusted proxies // But getClientIp() defaults to null or 127.0.0.1 depending on setup. // We can just rely on the default behavior for this test or mock the request if it was an interface/mockable. // Since Request is a concrete class, we use it as is. $event = $this->createMock(LoginSuccessEvent::class); $event->method('getUser')->willReturn($user); $event->method('getRequest')->willReturn($request); $this->entityManager->expects($this->once()) ->method('persist') ->with($this->isInstanceOf(AccountLoginRegister::class)); $this->entityManager->expects($this->once())->method('flush'); $this->subscriber->onLoginSuccess($event); } public function testOnLoginSuccessWithNonAccountUser() { $user = $this->createMock(UserInterface::class); $event = $this->createMock(LoginSuccessEvent::class); $event->method('getUser')->willReturn($user); $this->entityManager->expects($this->never())->method('persist'); $this->entityManager->expects($this->never())->method('flush'); $this->subscriber->onLoginSuccess($event); } }