/** * To prepare the request, call mangopay to retrieve url and token to submit the card registration form * and register registration session's data in the storage, then prepare the url of return. * * * @param UserInterface $user * @param string $cardType * @param null|CardRegistrationSession $session * * @return CardRegistrationResult */ public function prepare(UserInterface $user, CardRegistrationSession $session, $cardType = 'CB_VISA_MASTERCARD') { if (empty($user->getMangoPayId())) { throw new BadMangoEntityException('Error, the user has not a valid mango pay id'); } $apiResult = $this->getCardRegistrationData($user, $cardType); $session->setCardRegistrationId($apiResult->Id)->setUser($user); $sessionId = $session->getSessionId(); $this->storageService->set(self::SESSION_PREFIX . $sessionId, $session); $result = new CardRegistrationResult($user); $result->setAccessKeyRef($apiResult->AccessKey); $result->setData($apiResult->PreregistrationData); $result->setCardRegistrationUrl($apiResult->CardRegistrationURL); $result->setId($apiResult->Id); $result->setReturnUrl($this->router->generate($this->returnRouteName, ['registrationSessionId' => $sessionId], UrlGeneratorInterface::ABSOLUTE_URL)); return $result; }
public function testPrepare() { $userMock = $this->getMock('Teknoo\\MangoPayBundle\\Entity\\Interfaces\\User\\UserInterface'); $userMock->expects($this->atLeastOnce())->method('getMangoPayId')->willReturn(9876); /* * @var CardRegistration */ $cardRegistrationMock = $this->getMock('MangoPay\\CardRegistration'); $cardRegistrationMock->Id = 1234; $cardRegistrationMock->Currency = 'EUR'; $cardRegistrationMock->CardType = 'CB_VISA_MASTERCARD'; $cardRegistrationMock->UserId = 9876; $cardRegistrationMock->AccessKey = 'abcdef'; $cardRegistrationMock->PreregistrationData = 'stuvxyz'; $cardRegistrationMock->CardRegistrationURL = 'https://foo.bar.com/return.php'; $this->getApiCardRegistrationsMock()->expects($this->once())->method('Create')->with($this->callback(function ($card) { $this->assertInstanceOf('MangoPay\\CardRegistration', $card); $this->assertEquals('EUR', $card->Currency); $this->assertEquals('CB_VISA_MASTERCARD', $card->CardType); $this->assertEquals(9876, $card->UserId); return true; }))->willReturn($cardRegistrationMock); $cardSessionMock = $this->getMock('Teknoo\\MangoPayBundle\\Entity\\CardRegistrationSession', [], [], '', false); $cardSessionMock->expects($this->once())->method('setCardRegistrationId')->with(1234)->willReturnSelf(); $cardSessionMock->expects($this->once())->method('setUser')->with($userMock)->willReturnSelf(); $cardSessionMock->expects($this->once())->method('getSessionId')->willReturn('fooBarId'); $this->getStorageServiceInterfaceMock()->expects($this->once())->method('set')->with('MANGO_CARD_REGISTRATIONfooBarId', $cardSessionMock)->willReturnSelf(); $this->getRouterMock()->expects($this->once())->method('generate')->with('routerNameValue', ['registrationSessionId' => 'fooBarId'], Router::ABSOLUTE_URL)->willReturn('http://foo.bar.com/return'); $result = new CardRegistrationResult($userMock); $result->setAccessKeyRef('abcdef'); $result->setData('stuvxyz'); $result->setCardRegistrationUrl('https://foo.bar.com/return.php'); $result->setId(1234); $result->setReturnUrl('http://foo.bar.com/return'); $this->assertEquals($result, $this->buildService('routerNameValue')->prepare($userMock, $cardSessionMock)); }