diff --git a/composer.json b/composer.json index d180846..57110e2 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "silbeckdevs/erede-php", - "version": "1.0.1", + "version": "1.0.2", "description": "e.Rede integration SDK", "minimum-stability": "stable", "license": "MIT", diff --git a/src/Rede/Transaction.php b/src/Rede/Transaction.php index cb4df16..f51d54c 100644 --- a/src/Rede/Transaction.php +++ b/src/Rede/Transaction.php @@ -736,7 +736,7 @@ public function jsonUnserialize(string $serialized): static foreach (get_object_vars($properties) as $property => $value) { // TODO verify why use urls in request and not use links in response - if ('links' === $property) { + if ('links' === $property || null === $value) { continue; } @@ -853,4 +853,12 @@ private function unserializeQrCode(string $property, mixed $value): void $this->qrCode = (new QrCode())->populate($value); } } + + public function getFirstAuthorizationCode(): ?string + { + return $this->getAuthorizationCode() + ?: $this->getBrand()?->getAuthorizationCode() + ?: $this->getAuthorization()?->getAuthorizationCode() + ?: $this->getAuthorization()?->getBrand()?->getAuthorizationCode(); + } } diff --git a/tests/Unit/TransactionUnitTest.php b/tests/Unit/TransactionUnitTest.php index 64d8924..5f556ea 100644 --- a/tests/Unit/TransactionUnitTest.php +++ b/tests/Unit/TransactionUnitTest.php @@ -63,6 +63,56 @@ public function testShouldPopulateAuthorization(): void $this->assertSame('306718396', $transaction->getCapture()->getNsu()); } + public function testGetAuthorizationCodeValid(): void + { + // Cenário 1: AuthorizationCode diretamente na transação + $transaction = (new Transaction())->jsonUnserialize($this->serializeJsonTransaction([ + 'authorizationCode' => '111111', + ])); + $this->assertSame('111111', $transaction->getFirstAuthorizationCode()); + + // Cenário 2: AuthorizationCode no Brand + $transaction = (new Transaction())->jsonUnserialize($this->serializeJsonTransaction([ + 'authorizationCode' => null, + 'brand' => [ + 'authorizationCode' => '222222', + ], + ])); + $this->assertSame('222222', $transaction->getFirstAuthorizationCode()); + + // Cenário 3: AuthorizationCode no Authorization + $transaction = (new Transaction())->jsonUnserialize($this->serializeJsonTransaction([ + 'brand' => null, + 'authorization' => [ + 'authorizationCode' => '333333', + ], + ])); + $this->assertSame('333333', $transaction->getFirstAuthorizationCode()); + + // Cenário 4: AuthorizationCode no Brand dentro do Authorization + $transaction = (new Transaction())->jsonUnserialize($this->serializeJsonTransaction([ + 'authorization' => [ + 'brand' => [ + 'authorizationCode' => '444444', + ], + ], + ])); + $this->assertSame('444444', $transaction->getFirstAuthorizationCode()); + + // Cenário 5: Nenhum código de autorização disponível + $transaction = (new Transaction())->jsonUnserialize($this->serializeJsonTransaction([ + 'authorization' => null, + 'brand' => null, + 'authorizationCode' => null, + ])); + $this->assertNull($transaction->getFirstAuthorizationCode()); + } + + private function serializeJsonTransaction(mixed $body): string + { + return json_encode($body) ?: '{}'; + } + private function getJsonTransactionMock(): string { return '