getAndSetTest($value, 'card'); } /** * @dataProvider invalidCardDataProvider * @param mixed $value */ public function testSetInvalidCard($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->setCard($value); } /** * @dataProvider invalidCardDataProvider * @param mixed $value */ public function testSetterInvalidCard($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->card = $value; } /** * @dataProvider validElectronicCertificateDataProvider * @param mixed $value */ public function testGetSetElectronicCertificate($value) { $this->getAndSetTest($value, 'electronicCertificate', 'electronic_certificate'); } /** * @dataProvider invalidElectronicCertificateDataProvider * @param mixed $value */ public function testSetInvalidElectronicCertificate($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->setElectronicCertificate($value); } /** * @dataProvider invalidElectronicCertificateDataProvider * @param mixed $value */ public function testSetterInvalidElectronicCertificate($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->electronicCertificate = $value; } /** * @dataProvider invalidElectronicCertificateDataProvider * @param mixed $value */ public function testSetterInvalidElectronicCertificateSnakeCase($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->electronic_certificate = $value; } /** * @dataProvider validArticlesDataProvider * @param mixed $value */ public function testGetSetArticles($value) { $this->getAndSetTest($value, 'articles'); } /** * @dataProvider invalidArticlesDataProvider * @param mixed $value */ public function testSetInvalidArticles($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->setArticles($value); } /** * @dataProvider invalidArticlesDataProvider * @param mixed $value */ public function testSetterInvalidArticles($value) { $this->expectException('InvalidArgumentException'); $this->getTestInstance()->articles = $value; } /** * @return array */ public function validCardDataProvider() { $result = array( array(null), array(new PaymentDataBankCardCard()), ); $card = new PaymentDataBankCardCard(); $card->setNumber('4111111111111111'); $card->setExpiryYear('2025'); $card->setExpiryMonth('12'); $result[] = array($card); $result[] = array(array( 'number' => '5555555555554444', 'expiry_year' => '2026', 'expiry_month' => '09', )); return $result; } /** * @return array */ public function invalidCardDataProvider() { return array( array(0), array(1), array(-1), array('5'), array(new stdClass()), array(Random::str(20)), ); } /** * @return array */ public function validElectronicCertificateDataProvider() { $result = array( array(null), array(new ElectronicCertificatePaymentData()), ); $paymentData = new ElectronicCertificatePaymentData(); $paymentData->setAmount(array( 'value' => 1000.00, 'currency' => CurrencyCode::RUB )); $paymentData->setBasketId('basket_' . Random::str(10)); $result[] = array($paymentData); $result[] = array(array( 'amount' => array( 'value' => 500.50, 'currency' => CurrencyCode::EUR ), 'basket_id' => 'test_basket_' . Random::str(5), )); return $result; } /** * @return array */ public function invalidElectronicCertificateDataProvider() { return array( array(0), array(1), array(-1), array('string'), array(new stdClass()), array(Random::str(20)), ); } /** * @return array */ public function validArticlesDataProvider() { $result = array( array(null), array(array()), ); $article1 = new ElectronicCertificateArticle(); $article1->setArticleNumber(1); $article1->setTruCode('329921120.06001010200080001643'); $article1->setArticleName('Test Product 1'); $article1->setQuantity(2); $article1->setPrice(array( 'value' => 1000.00, 'currency' => CurrencyCode::RUB )); $article2 = new ElectronicCertificateArticle(); $article2->setArticleNumber(2); $article2->setTruCode('329921120.06001010200080001644'); $article2->setArticleName('Test Product 2'); $article2->setQuantity(1); $article2->setPrice(array( 'value' => 500.00, 'currency' => CurrencyCode::RUB )); $result[] = array(array($article1, $article2)); $result[] = array(array( array( 'article_number' => 3, 'tru_code' => '329921120.06001010200080001645', 'article_name' => 'Test Product 3', 'quantity' => 3, 'price' => array( 'value' => 300.00, 'currency' => CurrencyCode::RUB ), 'article_code' => 'ART-001', ), array( 'article_number' => 4, 'tru_code' => '329921120.06001010200080001646', 'article_name' => 'Test Product 4', 'quantity' => 1, 'price' => array( 'value' => 1200.00, 'currency' => CurrencyCode::RUB ), ), )); return $result; } /** * @return array */ public function invalidArticlesDataProvider() { return array( array(0), array(1), array(-1), array('string'), array(new stdClass()), array(Random::str(20)), array(array('invalid_element')), array(array(new stdClass())), ); } /** * @param mixed $value * @param string $property * @param string|null $snakeCase */ protected function getAndSetTest($value, $property, $snakeCase = null) { $getter = 'get' . ucfirst($property); $setter = 'set' . ucfirst($property); $instance = $this->getTestInstance(); self::assertNull($instance->{$getter}()); self::assertNull($instance->{$property}); if ($snakeCase !== null) { self::assertNull($instance->{$snakeCase}); } $instance->{$setter}($value); if (is_array($value) && !empty($value) && $property === 'articles') { self::assertNotNull($instance->{$getter}()); self::assertNotNull($instance->{$property}); self::assertCount(count($value), $instance->{$getter}()); } elseif (is_array($value) && empty($value) && $property === 'articles') { self::assertNull($instance->{$getter}()); } elseif ($property === 'electronicCertificate' && $value instanceof ElectronicCertificatePaymentData) { self::assertSame($value, $instance->{$getter}()); self::assertSame($value, $instance->{$property}); } elseif ($property === 'electronicCertificate' && is_array($value)) { self::assertInstanceOf('\YooKassa\Model\PaymentMethod\ElectronicCertificate\ElectronicCertificatePaymentData', $instance->{$getter}()); } elseif ($property === 'card' && $value instanceof PaymentDataBankCardCard) { self::assertSame($value, $instance->{$getter}()); self::assertSame($value, $instance->{$property}); } elseif ($property === 'card' && is_array($value)) { self::assertInstanceOf('\YooKassa\Model\PaymentData\PaymentDataBankCardCard', $instance->{$getter}()); } else { self::assertEquals($value, $instance->{$getter}()); self::assertEquals($value, $instance->{$property}); } if ($snakeCase !== null && !is_array($value) && !is_object($value)) { self::assertEquals($value, $instance->{$snakeCase}); } $instance = $this->getTestInstance(); $instance->{$property} = $value; if (is_array($value) && !empty($value) && $property === 'articles') { self::assertNotNull($instance->{$getter}()); self::assertNotNull($instance->{$property}); self::assertCount(count($value), $instance->{$getter}()); } elseif (is_array($value) && empty($value) && $property === 'articles') { self::assertNull($instance->{$getter}()); } elseif ($property === 'electronicCertificate' && $value instanceof ElectronicCertificatePaymentData) { self::assertSame($value, $instance->{$getter}()); self::assertSame($value, $instance->{$property}); } elseif ($property === 'electronicCertificate' && is_array($value)) { self::assertInstanceOf('\YooKassa\Model\PaymentMethod\ElectronicCertificate\ElectronicCertificatePaymentData', $instance->{$getter}()); } elseif ($property === 'card' && $value instanceof PaymentDataBankCardCard) { self::assertSame($value, $instance->{$getter}()); self::assertSame($value, $instance->{$property}); } elseif ($property === 'card' && is_array($value)) { self::assertInstanceOf('\YooKassa\Model\PaymentData\PaymentDataBankCardCard', $instance->{$getter}()); } else { self::assertEquals($value, $instance->{$getter}()); self::assertEquals($value, $instance->{$property}); } if ($snakeCase !== null && !is_array($value) && !is_object($value)) { $instance = $this->getTestInstance(); $instance->{$snakeCase} = $value; self::assertEquals($value, $instance->{$getter}()); self::assertEquals($value, $instance->{$property}); self::assertEquals($value, $instance->{$snakeCase}); } } }