From ba1b6ed19f64af6af6f24fdc11b80e3c11a92491 Mon Sep 17 00:00:00 2001 From: Miguel Vela Romera Date: Tue, 22 Sep 2020 11:15:04 +0200 Subject: [PATCH] fix Afterpay error messages numbers not recognized --- composer.json | 2 +- .../Helper/AfterpayErrorMessageHelper.php | 2 +- tests/Test/Api/AbstractPaymentTest.php | 5 +-- tests/Test/Api/AfterpayTest.php | 32 +++++++++++++++++-- .../Helper/AfterpayErrorMessageHelperTest.php | 25 ++++++++++++++- 5 files changed, 59 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 19442b1..7fd7b5e 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "payvision/payvision-sdk-php", "description": "Payvision PHP SDK", "type": "library", - "version": "5.1.0", + "version": "5.1.1", "license": "MIT", "require": { "php": "^7.2.5|^7.3", diff --git a/src/Domain/Service/Helper/AfterpayErrorMessageHelper.php b/src/Domain/Service/Helper/AfterpayErrorMessageHelper.php index 502c06a..8a4b83a 100644 --- a/src/Domain/Service/Helper/AfterpayErrorMessageHelper.php +++ b/src/Domain/Service/Helper/AfterpayErrorMessageHelper.php @@ -77,7 +77,7 @@ public static function extractMessageCodes(string $errorDetail): array */ protected static function extractMessageCode(string $message): string { - if (\preg_match('/^(field\.)?(?P[a-z]+\.[a-z.]+)/', $message, $matches)) { + if (\preg_match('/^(field\.)?(?P[a-z]+\.[a-z0-9.]+)/', $message, $matches)) { return $matches['code']; } throw new AfterpayErrorException('Unable to handle Afterpay error code: ' . $message); diff --git a/tests/Test/Api/AbstractPaymentTest.php b/tests/Test/Api/AbstractPaymentTest.php index 2875c85..9ea1a8a 100644 --- a/tests/Test/Api/AbstractPaymentTest.php +++ b/tests/Test/Api/AbstractPaymentTest.php @@ -45,9 +45,10 @@ protected function createFakePaymentRequest(): PaymentRequest protected function prepareFakePaymentRequest(): void { - $this->paymentRequestBuilder->header()->setBusinessId($this->credentials['businessId']); - $this->paymentRequestBuilder->body()->transaction()->setStoreId(1); + $this->paymentRequestBuilder->header() + ->setBusinessId($this->credentials['businessId']); $this->paymentRequestBuilder->body()->transaction() + ->setStoreId(1) ->setAmount(1.00) ->setPurchaseId('1234') ->setTrackingCode($this->generateTrackingCode()) diff --git a/tests/Test/Api/AfterpayTest.php b/tests/Test/Api/AfterpayTest.php index 612deda..51e2c9d 100644 --- a/tests/Test/Api/AfterpayTest.php +++ b/tests/Test/Api/AfterpayTest.php @@ -14,11 +14,12 @@ use Payvision\SDK\Application\Payments\Service\RequestBuilder; use Payvision\SDK\DataType\Date; use Payvision\SDK\Domain\Payments\Service\Builder\Composite\Payment\Request as PaymentRequestBuilder; +use Payvision\SDK\Domain\Payments\Service\Builder\OrderLine as OrderLineBuilder; +use Payvision\SDK\Domain\Payments\ValueObject\Customer; use Payvision\SDK\Domain\Payments\ValueObject\Payment\Response as PaymentResponse; use Payvision\SDK\Exception\Api\ErrorResponse; use Payvision\SDK\Exception\ApiException; use Payvision\SDK\Exception\BuilderException; -use Payvision\SDK\Exception\DataTypeException; use ReflectionException; class AfterpayTest extends AbstractTestCase @@ -28,11 +29,17 @@ class AfterpayTest extends AbstractTestCase */ private $paymentRequestBuilder; + /** + * @var OrderLineBuilder + */ + private $orderLineBuilder; + protected function setUp(): void { parent::setUp(); $this->paymentRequestBuilder = new PaymentRequestBuilder(); + $this->orderLineBuilder = new OrderLineBuilder(); } /** @@ -45,8 +52,9 @@ public function testMakePaymentRequest(): void { $this->paymentRequestBuilder->setAction('payment'); $this->paymentRequestBuilder->header()->setBusinessId($this->credentials['businessId']); - $this->paymentRequestBuilder->body()->transaction()->setStoreId(1); $this->paymentRequestBuilder->body()->transaction() + ->setStoreId(1) + ->setLanguageCode('nl') ->setAmount(50.00) ->setBrandId(5020) ->setTrackingCode($this->generateTrackingCode()) @@ -57,6 +65,7 @@ public function testMakePaymentRequest(): void ->setIpAddress('127.0.0.1') ->setGivenName('John') ->setFamilyName('Doe') + ->setSex(Customer::SEX_MALE) ->setBirthDate((new Date('35 years ago'))) ->setEmail('john.doe@example.com') ->setPhoneNumber('+31 (0)40 1234567'); @@ -72,6 +81,25 @@ public function testMakePaymentRequest(): void ->setStreet('Marconilaan') ->setHouseNumber('16') ->setZip('5621 AA'); + $this->paymentRequestBuilder->body()->shippingAddress()->customer() + ->setIpAddress('127.0.0.1') + ->setGivenName('John') + ->setFamilyName('Doe') + ->setSex(Customer::SEX_MALE) + ->setBirthDate((new Date('35 years ago'))) + ->setEmail('john.doe@example.com') + ->setPhoneNumber('+31 (0)40 1234567'); + $this->paymentRequestBuilder->body()->order()->setOrderLines([ + $this->orderLineBuilder + ->setDescription('Order Line') + ->setItemAmount(50.00) + ->setTotalAmount(50.00) + ->setProductCode('ABC123') + ->setQuantity(1) + ->setPurchaseType('4') // Temporary value, needs to be deleted as soon as the backend of payvision is fixed + ->setTaxPercentage(21.00) + ->build(), + ]); $requestObject = $this->paymentRequestBuilder->build(); $apiRequest = RequestBuilder::newPayment($requestObject); diff --git a/tests/Test/Unit/Domain/Service/Helper/AfterpayErrorMessageHelperTest.php b/tests/Test/Unit/Domain/Service/Helper/AfterpayErrorMessageHelperTest.php index 79d75d7..0ad7134 100644 --- a/tests/Test/Unit/Domain/Service/Helper/AfterpayErrorMessageHelperTest.php +++ b/tests/Test/Unit/Domain/Service/Helper/AfterpayErrorMessageHelperTest.php @@ -27,6 +27,11 @@ public function testExtractMessageCodes(string $errorCode, array $expected): voi self::assertSame($expected, AfterpayErrorMessageHelper::extractMessageCodes($errorCode)); } + // phpcs:disable ObjectCalisthenics.Files.FunctionLength.ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff + + /** + * @return array|array[] + */ public function afterpayExtractMessageCodeProvider(): array { return [ @@ -42,9 +47,27 @@ public function afterpayExtractMessageCodeProvider(): array AfterpayErrorMessageHelper::BILLTO_HOUSENUMBERADDITION_MISSING, ], ], + 'phone number 1 missing' => [ + 'field.billto.phonenumber1.missing (Het telefoonnummer ontbreekt)', + [AfterpayErrorMessageHelper::BILLTO_PHONENUMBER1_MISSING], + ], + 'phone number 1 invalid' => [ + 'field.billto.phonenumber1.invalid (fixed line and/or mobile number is invalid)', + [AfterpayErrorMessageHelper::BILLTO_PHONENUMBER1_INVALID], + ], + 'phone number 2 missing' => [ + 'field.billto.phonenumber2.missing (Het telefoonnummer ontbreekt)', + [AfterpayErrorMessageHelper::BILLTO_PHONENUMBER2_MISSING], + ], + 'phone number 2 invalid' => [ + 'field.billto.phonenumber2.invalid (fixed line and/or mobile number is invalid)', + [AfterpayErrorMessageHelper::BILLTO_PHONENUMBER2_INVALID], + ], ]; } + // phpcs:enable ObjectCalisthenics.Files.FunctionLength.ObjectCalisthenics\Sniffs\Files\FunctionLengthSniff + /** * @param string $message * @param string $expected @@ -68,7 +91,7 @@ public function afterpayExtractMessageCodeExceptionProvider(): array 'Non parsable error code' => [ 'housenumberaddition_missing', 'Unable to handle Afterpay error code: housenumberaddition_missing', - ] + ], ]; } }