/**
  * @param string $username
  * @param string $password
  * @return AccessToken|null
  */
 public function invoke($username, $password)
 {
     $user = $this->findUser($username);
     if (!$user) {
         return false;
     }
     if ($user->getEncodedPassword() !== $this->passwordEncoder->encode($password)) {
         return false;
     }
     $token = $this->tokenGenerator->generate();
     $period = $this->now() + self::PERIOD_HOURS * 3600;
     $accessToken = new AccessToken();
     $accessToken->setUser($user)->setToken($token)->setPeriod($period);
     $this->accessTokenRepository->add($accessToken);
     $this->entityManager->flush();
     return $accessToken;
 }
 /**
  * @test
  */
 public function failIfAccessTokenIsExpired()
 {
     $userId = 42;
     $tokenString = "2hKUWekAQlAlNteA2D1gNhXLarQPDoLweuWREVen";
     $now = 1234567890;
     $period = $now - 1;
     $user = new User();
     $accessToken = new AccessToken();
     $accessToken->setUser($user)->setPeriod($period);
     $accessTokenRepo = $this->getMock("RepositoryMock");
     $em = $this->getEntityManagerMock(array("getRepository"));
     $em->expects($this->once())->method("getRepository")->with($this->equalTo(EntityConstant::ACCESS_TOKEN))->will($this->returnValue($accessTokenRepo));
     $useCase = $this->getMockBuilder('Kumatch\\BBSAPI\\UseCase\\UserTokenAuthorization')->setConstructorArgs(array($em))->setMethods(array("now", "findAccessToken"))->getMock();
     $useCase->expects($this->once())->method("findAccessToken")->with($this->equalTo($userId), $this->equalTo($tokenString))->will($this->returnValue(null));
     /** @var UserTokenAuthorization $useCase */
     $this->assertNull($useCase->invoke($userId, $tokenString));
 }