Skip to content

Commit

Permalink
Fixing subscrition by card_hash (#127)
Browse files Browse the repository at this point in the history
* Fixing subscrition by card_hash as described in #126

* Adding docblock in getCardInfo method

* Improving readability in test's methods
  • Loading branch information
petriuslima committed Feb 23, 2017
1 parent 298ccbc commit a4007dc
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 51 deletions.
16 changes: 15 additions & 1 deletion lib/Subscription/Request/CardSubscriptionCreate.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,22 @@ public function __construct(
public function getPayload()
{
return array_merge(
['card_id' => $this->card->getId()],
$this->getCardInfo(),
parent::getPayload()
);
}

/**
* @return array
*/
private function getCardInfo()
{
if (!is_null($this->card->getId())) {
return ['card_id' => $this->card->getId()];
}

if (!is_null($this->card->getHash())) {
return ['card_hash' => $this->card->getHash()];
}
}
}
176 changes: 126 additions & 50 deletions tests/unit/Subscription/Request/CardSubscriptionCreateTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,47 @@ class CardSubscriptionCreateTest extends \PHPUnit_Framework_TestCase
const ADDRESS_ZIPCODE = '01034020';

const CARD_ID = 123456;
/**
* @test
*/
public function mustPayloadBeCorrect()
const CARD_HASH = 'FC1mH7XLFU5fjPAzDsP0ogeAQh3qXRpHzkIrgDz64lITBUGwio67zm';

private function getConfiguredPlanMockForPayloadTest()
{
$planMock = $this->getMockBuilder('PagarMe\Sdk\Plan\Plan')
->disableOriginalConstructor()
->getMock();
$planMock->method('getId')->willReturn(self::PLAN_ID);

$cardMock = $this->getMockBuilder('PagarMe\Sdk\Card\Card')
->disableOriginalConstructor()
->getMock();
$cardMock->method('getId')->willReturn(self::CARD_ID);
return $planMock;
}

private function getConfiguredCustomerMockForPayloadTest()
{
$addressMock = $this->getConfiguredAddressMockForPayloadTest();
$phoneMock = $this->getConfiguredPhoneMockForPayloadTest();

$customerMock = $this->getMockBuilder('PagarMe\Sdk\Customer\Customer')
->disableOriginalConstructor()
->getMock();

$phoneMock = $this->getMockBuilder('PagarMe\Sdk\Customer\Phone')
->disableOriginalConstructor()
->getMock();
$customerMock->method('getName')
->willReturn(self::CUSTOMER_NAME);
$customerMock->method('getEmail')
->willReturn(self::CUSTOMER_EMAIL);
$customerMock->method('getDocumentNumber')
->willReturn(self::CUSTOMER_DOCUMENTNUMBER);
$customerMock->method('getBornAt')
->willReturn(self::CUSTOMER_BORN_AT);
$customerMock->method('getGender')
->willReturn(self::CUSTOMER_GENDER);
$customerMock->method('getAddress')
->willReturn($addressMock);
$customerMock->method('getPhone')
->willReturn($phoneMock);

$phoneMock->method('getDdd')->willReturn(self::PHONE_DDD);
$phoneMock->method('getNumber')->willReturn(self::PHONE_NUMBER);
return $customerMock;
}

private function getConfiguredAddressMockForPayloadTest()
{
$addressMock = $this->getMockBuilder('PagarMe\Sdk\Customer\Address')
->disableOriginalConstructor()
->getMock();
Expand All @@ -69,20 +83,76 @@ public function mustPayloadBeCorrect()
$addressMock->method('getZipcode')
->willReturn(self::ADDRESS_ZIPCODE);

$customerMock->method('getName')
->willReturn(self::CUSTOMER_NAME);
$customerMock->method('getEmail')
->willReturn(self::CUSTOMER_EMAIL);
$customerMock->method('getDocumentNumber')
->willReturn(self::CUSTOMER_DOCUMENTNUMBER);
$customerMock->method('getBornAt')
->willReturn(self::CUSTOMER_BORN_AT);
$customerMock->method('getGender')
->willReturn(self::CUSTOMER_GENDER);
$customerMock->method('getAddress')
->willReturn($addressMock);
$customerMock->method('getPhone')
->willReturn($phoneMock);
return $addressMock;
}

private function getConfiguredPhoneMockForPayloadTest()
{
$phoneMock = $this->getMockBuilder('PagarMe\Sdk\Customer\Phone')
->disableOriginalConstructor()
->getMock();

$phoneMock->method('getDdd')->willReturn(self::PHONE_DDD);
$phoneMock->method('getNumber')->willReturn(self::PHONE_NUMBER);

return $phoneMock;
}

private function getDefaultPayloadWithoutCardInfo()
{
return [
'plan_id' => self::PLAN_ID,
'payment_method' => self::PLAN_PAYMENT_METHOD,
'metadata' => $this->planMetadata(),
'customer' => [
'name' => self::CUSTOMER_NAME,
'email' => self::CUSTOMER_EMAIL,
'document_number' => self::CUSTOMER_DOCUMENTNUMBER,
'address' => [
'street' => self::ADDRESS_STREET,
'street_number' => self::ADDRESS_STREETNUMBER,
'neighborhood' => self::ADDRESS_NEIGHBORHOOD,
'zipcode' => self::ADDRESS_ZIPCODE
],
'phone' => [
'ddd' => self::PHONE_DDD,
'number' => self::PHONE_NUMBER
],
'born_at' => self::CUSTOMER_BORN_AT,
'gender' => self::CUSTOMER_GENDER
]
];
}

private function getExpectedPayloadWithCardId()
{
return array_merge(
$this->getDefaultPayloadWithoutCardInfo(),
['card_id' => self::CARD_ID]
);
}

private function getExpectedPayloadWithCardHash()
{
return array_merge(
$this->getDefaultPayloadWithoutCardInfo(),
['card_hash' => self::CARD_HASH]
);
}

/**
* @test
*/
public function mustPayloadBeCorrect()
{
$planMock = $this->getConfiguredPlanMockForPayloadTest();

$cardMock = $this->getMockBuilder('PagarMe\Sdk\Card\Card')
->disableOriginalConstructor()
->getMock();
$cardMock->method('getId')->willReturn(self::CARD_ID);

$customerMock = $this->getConfiguredCustomerMockForPayloadTest();

$cardSubscriptionCreateRequest = new CardSubscriptionCreate(
$planMock,
Expand All @@ -94,29 +164,35 @@ public function mustPayloadBeCorrect()

$this->assertEquals(
$cardSubscriptionCreateRequest->getPayload(),
[
'plan_id' => self::PLAN_ID,
'card_id' => self::CARD_ID,
'payment_method' => self::PLAN_PAYMENT_METHOD,
'metadata' => $this->planMetadata(),
'customer' => [
'name' => self::CUSTOMER_NAME,
'email' => self::CUSTOMER_EMAIL,
'document_number' => self::CUSTOMER_DOCUMENTNUMBER,
'address' => [
'street' => self::ADDRESS_STREET,
'street_number' => self::ADDRESS_STREETNUMBER,
'neighborhood' => self::ADDRESS_NEIGHBORHOOD,
'zipcode' => self::ADDRESS_ZIPCODE
],
'phone' => [
'ddd' => self::PHONE_DDD,
'number' => self::PHONE_NUMBER
],
'born_at' => self::CUSTOMER_BORN_AT,
'gender' => self::CUSTOMER_GENDER
]
]
$this->getExpectedPayloadWithCardId()
);
}

/**
* @test
*/
public function mustPayloadContainCardHash()
{
$planMock = $this->getConfiguredPlanMockForPayloadTest();

$cardMock = $this->getMockBuilder('PagarMe\Sdk\Card\Card')
->disableOriginalConstructor()
->getMock();
$cardMock->method('getHash')->willReturn(self::CARD_HASH);

$customerMock = $this->getConfiguredCustomerMockForPayloadTest();

$cardSubscriptionCreateRequest = new CardSubscriptionCreate(
$planMock,
$cardMock,
$customerMock,
self::POSTBACK_URL,
$this->planMetadata()
);

$this->assertEquals(
$cardSubscriptionCreateRequest->getPayload(),
$this->getExpectedPayloadWithCardHash()
);
}

Expand Down

0 comments on commit a4007dc

Please sign in to comment.