urlGenerator = $this->createMock(UrlGeneratorInterface::class); $this->entityManager = $this->createMock(EntityManagerInterface::class); $this->authenticator = new CustomerAuthenticator($this->urlGenerator, $this->entityManager); } public function testSupports() { $request = Request::create('/reservation/login', 'POST'); $request->attributes->set('_route', 'reservation_login'); $this->assertTrue($this->authenticator->supports($request)); $requestInvalid = Request::create('/reservation/login', 'GET'); $requestInvalid->attributes->set('_route', 'reservation_login'); $this->assertFalse($this->authenticator->supports($requestInvalid)); } public function testAuthenticate() { $request = Request::create('/login', 'POST', [ '_username' => 'test@test.com', '_password' => 'password', '_csrf_token' => 'token' ]); $session = $this->createMock(SessionInterface::class); $request->setSession($session); $repository = $this->createMock(EntityRepository::class); $this->entityManager->method('getRepository')->with(Customer::class)->willReturn($repository); $repository->method('findOneBy')->with(['email' => 'test@test.com'])->willReturn(new Customer()); $passport = $this->authenticator->authenticate($request); $this->assertInstanceOf(Passport::class, $passport); $this->assertTrue($passport->hasBadge(UserBadge::class)); $this->assertTrue($passport->hasBadge(CsrfTokenBadge::class)); } public function testOnAuthenticationSuccessRedirectsToReservation() { $request = Request::create('/login'); $session = $this->createMock(SessionInterface::class); $request->setSession($session); $token = $this->createMock(TokenInterface::class); $this->urlGenerator->expects($this->once()) ->method('generate') ->with('reservation') ->willReturn('/reservation'); $response = $this->authenticator->onAuthenticationSuccess($request, $token, 'main'); $this->assertInstanceOf(RedirectResponse::class, $response); $this->assertEquals('/reservation', $response->getTargetUrl()); } }