public function testUpdateOAuthAccount() { $user = new Users\UserAggregate(1); $user->addOAuthAccount('facebook', 123, 'access', 'refresh', $time = \Mockery::mock('DateTime')); $user->addOAuthAccount('facebook', 123, 'access_updated', 'refresh_updated', $time = \Mockery::mock('DateTime')); $account = $user->getOAuthAccount('facebook'); $this->assertEquals('access_updated', $account->getAccessToken()); $this->assertEquals('refresh_updated', $account->getRefreshToken()); $this->assertEquals($time, $account->getTokenExpiration()); $this->assertNull($user->getOAuthAccount('non')); }
/** * Find user with OAuth2 account or create new one and update OAuth2 tokens. * Persist only. Do not flush! * * @param $service * @param AccessToken $token * @param User $userData * * @return UserAggregate * @throws \Doctrine\ORM\NonUniqueResultException */ public function persistOAuthAccount($service, AccessToken $token, User $userData) { $uid = $userData->uid; try { $user = $this->entityManager->createQueryBuilder()->select('ua')->from('Facilis\\Users\\UserAggregate', 'ua')->innerJoin('ua.oauthAccounts', 'oaa')->where('oaa.service = :service')->andWhere('oaa.uid = :uid')->setParameter('service', $service)->setParameter('uid', $uid)->setMaxResults(1)->getQuery()->getSingleResult(); } catch (NoResultException $e) { $user = new UserAggregate(); } $user->addOAuthAccount($service, $uid, $token->accessToken, $token->refreshToken, new \DateTime('@' . $token->expires)); // Start the "circus" $this->entityManager->beginTransaction(); // Assign identity $this->entityManager->persist($user); $this->entityManager->flush(); // Callback must have identity assigned $this->onPersistOAuthAccount($user, $userData); // Update again $this->entityManager->persist($user); $this->entityManager->flush(); // Commit the whole "circus" $this->entityManager->commit(); return $user; }