diff --git a/src/Model/Fields/Recurring/Schedule/AnchorDay.php b/src/Model/Fields/Recurring/Schedule/AnchorDay.php new file mode 100644 index 0000000..01b99ab --- /dev/null +++ b/src/Model/Fields/Recurring/Schedule/AnchorDay.php @@ -0,0 +1,25 @@ + IntervalType::class, 'chargeCount' => ChargeCount::class, 'retryIntervals' => [RetryInterval::class], + 'anchorDay' => AnchorDay::class, ]; /** @var Amount */ @@ -43,6 +45,9 @@ class Schedule extends Objects /** @var RetryInterval */ public $retryIntervals; + /** @var AnchorDay */ + public $anchorDay; + public function getRequiredFields() { return [ diff --git a/tests/Api/Recurring/RecurringApiTest.php b/tests/Api/Recurring/RecurringApiTest.php index b841bdb..9e8a4a6 100644 --- a/tests/Api/Recurring/RecurringApiTest.php +++ b/tests/Api/Recurring/RecurringApiTest.php @@ -2,6 +2,7 @@ namespace Tpay\Tests\OpenApi\Api\Recurring; +use InvalidArgumentException; use PHPUnit\Framework\TestCase; use Tpay\OpenApi\Api\Recurring\RecurringApi; use Tpay\OpenApi\Model\Fields\Token\AccessToken; @@ -93,6 +94,59 @@ public function testUpdatePaymentInstrumentInProductionModeAllowsTestPaymentType self::assertSame('ok', $result); } + public function testCreateRecurringAcceptsAnchorDayInSchedule() + { + CurlMock::setConsecutiveReturnedTransfers('"ok"'); + + $result = $this->createRecurringApi(false)->createRecurring($this->recurringFields(28)); + + self::assertSame('ok', $result); + } + + public function testCreateRecurringAcceptsNullAnchorDayInSchedule() + { + CurlMock::setConsecutiveReturnedTransfers('"ok"'); + + $result = $this->createRecurringApi(false)->createRecurring($this->recurringFields(null)); + + self::assertSame('ok', $result); + } + + public function testCreateRecurringDoesNotAllowAnchorDayOutOfRange() + { + CurlMock::expectNoCurlExecCall(); + + $this->expectException(InvalidArgumentException::class); + + $this->createRecurringApi(false)->createRecurring($this->recurringFields(32)); + } + + /** @param null|int $anchorDay */ + private function recurringFields($anchorDay) + { + return [ + 'id' => 'rec_12345678901234567890AB', + 'description' => 'Recurring Order AB-CD-12', + 'payer' => [ + 'email' => 'jan.kowalski@example.com', + 'name' => 'Jan Kowalski', + ], + 'schedule' => [ + 'amount' => 12.34, + 'currency' => 'PLN', + 'firstChargeDate' => '2025-11-12T12:34:00+02:00', + 'interval' => 1, + 'intervalType' => 'months', + 'anchorDay' => $anchorDay, + ], + 'paymentInstrument' => [ + 'paymentType' => 'card_token', + 'value' => 'card-token-value', + ], + 'callbackUrl' => 'https://example.com/callback', + ]; + } + private function createRecurringApi($productionMode) { $accessToken = $this->createMock(AccessToken::class);