shell bypass 403
<?php namespace Tests\YandexCheckout\Model; use PHPUnit\Framework\TestCase; use YandexCheckout\Helpers\Random; use YandexCheckout\Model\MonetaryAmount; use YandexCheckout\Model\Receipt; use YandexCheckout\Model\Receipt\ReceiptItemAmount; use YandexCheckout\Model\ReceiptCustomer; use YandexCheckout\Model\ReceiptItem; class ReceiptTest extends TestCase { public function testGetSetAddItems() { $instance = new Receipt(); self::assertNotNull($instance->getItems()); self::assertTrue(is_array($instance->getItems())); self::assertEmpty($instance->getItems()); self::assertNotNull($instance->items); self::assertTrue(is_array($instance->items)); self::assertEmpty($instance->items); $item = new ReceiptItem(); $instance->addItem($item); $items = $instance->getItems(); self::assertTrue(count($items) === 1); foreach ($items as $tmp) { self::assertSame($item, $tmp); } $instance->setItems(array()); self::assertNotNull($instance->getItems()); self::assertTrue(is_array($instance->getItems())); self::assertEmpty($instance->getItems()); $instance->setItems($items); self::assertTrue(count($items) === 1); foreach ($items as $tmp) { self::assertSame($item, $tmp); } } /** * @dataProvider invalidItemsProvider * @expectedException \InvalidArgumentException * @param $value */ public function testSetInvalidItems($value) { $instance = new Receipt(); $instance->setItems($value); } /** * @dataProvider validDataProvider * @param $options */ public function testGetSetTaxSystemCode($options) { $instance = new Receipt(); self::assertNull($instance->getTaxSystemCode()); self::assertNull($instance->taxSystemCode); self::assertNull($instance->tax_system_code); $instance->setTaxSystemCode($options['tax_system_code']); self::assertEquals($options['tax_system_code'], $instance->getTaxSystemCode()); self::assertEquals($options['tax_system_code'], $instance->taxSystemCode); self::assertEquals($options['tax_system_code'], $instance->tax_system_code); } /** * @dataProvider validDataProvider * @param $options */ public function testSetterTaxSystemCode($options) { $instance = new Receipt(); self::assertNull($instance->getTaxSystemCode()); self::assertNull($instance->taxSystemCode); self::assertNull($instance->tax_system_code); $instance->taxSystemCode = $options['tax_system_code']; self::assertEquals($options['tax_system_code'], $instance->getTaxSystemCode()); self::assertEquals($options['tax_system_code'], $instance->taxSystemCode); self::assertEquals($options['tax_system_code'], $instance->tax_system_code); } /** * @dataProvider validDataProvider * @param $options */ public function testSetterTax_system_code($options) { $instance = new Receipt(); self::assertNull($instance->getTaxSystemCode()); self::assertNull($instance->taxSystemCode); self::assertNull($instance->tax_system_code); $instance->tax_system_code = $options['tax_system_code']; self::assertEquals($options['tax_system_code'], $instance->getTaxSystemCode()); self::assertEquals($options['tax_system_code'], $instance->taxSystemCode); self::assertEquals($options['tax_system_code'], $instance->tax_system_code); } /** * @dataProvider invalidTaxSystemIdProvider * @expectedException \InvalidArgumentException * @param $value */ public function testSetInvalidTaxSystemCode($value) { $instance = new Receipt(); $instance->setTaxSystemCode($value); } /** * @dataProvider validDataProvider * @param $options */ public function testGetSetPhone($options) { $instance = new Receipt(); self::assertNull($instance->getPhone()); self::assertNull($instance->phone); $instance->setPhone(!empty($options['phone']) ? $options['phone'] : null); if (empty($options['phone'])) { self::assertNull($instance->getPhone()); self::assertNull($instance->phone); } else { self::assertEquals($options['phone'], $instance->getPhone()); self::assertEquals($options['phone'], $instance->phone); } } /** * @dataProvider validDataProvider * @param $options */ public function testSetterPhone($options) { $instance = new Receipt(); self::assertNull($instance->getPhone()); self::assertNull($instance->phone); $instance->phone = !empty($options['phone']) ? $options['phone'] : null; if (empty($options['phone'])) { self::assertNull($instance->getPhone()); self::assertNull($instance->phone); } else { self::assertEquals($options['phone'], $instance->getPhone()); self::assertEquals($options['phone'], $instance->phone); } } /** * @dataProvider invalidPhoneProvider * @expectedException \InvalidArgumentException * @param $value */ public function testSetInvalidPhone($value) { $instance = new Receipt(); $instance->setPhone($value); } /** * @dataProvider validDataProvider * @param $options */ public function testGetSetEmail($options) { $instance = new Receipt(); self::assertNull($instance->getEmail()); self::assertNull($instance->email); $instance->setEmail(!empty($options['email']) ? $options['email'] : null); if (empty($options['email'])) { self::assertNull($instance->getEmail()); self::assertNull($instance->email); } else { self::assertEquals($options['email'], $instance->getEmail()); self::assertEquals($options['email'], $instance->email); } } /** * @dataProvider validDataProvider * @param $options */ public function testSetterEmail($options) { $instance = new Receipt(); self::assertNull($instance->getEmail()); self::assertNull($instance->email); $instance->email = !empty($options['email']) ? $options['email'] : null; if (empty($options['email'])) { self::assertNull($instance->getEmail()); self::assertNull($instance->email); } else { self::assertEquals($options['email'], $instance->getEmail()); self::assertEquals($options['email'], $instance->email); } } /** * */ public function testNotEmpty() { $instance = new Receipt(); self::assertFalse($instance->notEmpty()); $instance->addItem(new ReceiptItem()); self::assertTrue($instance->notEmpty()); $instance->setItems(array()); self::assertFalse($instance->notEmpty()); } public function validDataProvider() { $result = array( array( array( 'items' => array(), 'tax_system_code' => null, 'phone' => null, 'email' => null, ), ), array( array( 'items' => array(), 'tax_system_code' => '', 'phone' => '', 'email' => '', ), ), array( array( 'items' => array(), 'customer' => array( 'phone' => '', 'email' => '', ), 'tax_system_code' => '', ), ), array( array( 'items' => array(), 'customer' => array( 'phone' => '', ), 'tax_system_code' => '', 'email' => '', ), ), array( array( 'items' => array(), 'customer' => array( 'phone' => '', ), 'tax_system_code' => '', 'email' => '', ), ), ); for ($i = 1; $i < 6; $i++) { $receipt = array( 'items' => array(), 'tax_system_code' => $i, 'phone' => Random::str(10, 10, '1234567890'), 'email' => uniqid() . '@' . uniqid(), ); $result[] = array($receipt); } return $result; } public function invalidItemsProvider() { return array( array(null), array(new \stdClass()), array('invalid_value'), array(''), array(0), array(1), array(true), array(false), array(1.43), array( array( array( 'description' => 'text', 'quantity' => 1, 'amount' => array( 'value' => 1, 'currency' => 'RUB', ), 'vat_code' => 1, ), ), ), array( array(new \stdClass()), ), ); } public function invalidTaxSystemIdProvider() { return array( array(new \stdClass()), array('invalid_value'), array(0), array(3234), array(true), array(false), array(0.43), ); } public function invalidPhoneProvider() { return array( array(new \stdClass()), array(array()), array(true), array(false), ); } public function testGetAmountValue() { $receipt = new Receipt(); self::assertEquals(0, $receipt->getAmountValue()); $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount(Random::float(0.01, 99.99))); $item->setQuantity(Random::float(0.0001, 99.99)); $receipt->addItem($item); $expected = (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); self::assertEquals($expected, $receipt->getAmountValue()); self::assertEquals($expected, $receipt->getAmountValue(false)); self::assertEquals(0, $receipt->getShippingAmountValue()); $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount(Random::float(0.01, 99.99))); $item->setQuantity(Random::float(0.0001, 99.99)); $receipt->addItem($item); $expected += (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); self::assertEquals($expected, $receipt->getAmountValue()); self::assertEquals($expected, $receipt->getAmountValue(false)); self::assertEquals(0, $receipt->getShippingAmountValue()); $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount(Random::float(0.01, 99.99))); $item->setQuantity(Random::float(0.0001, 99.99)); $item->setIsShipping(true); $receipt->addItem($item); $shipping = $expected; $expected += (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); self::assertEquals($expected, $receipt->getAmountValue()); self::assertEquals($shipping, $receipt->getAmountValue(false)); self::assertEquals($expected - $shipping, $receipt->getShippingAmountValue()); $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount(Random::float(0.01, 99.99))); $item->setQuantity(Random::float(0.0001, 99.99)); $item->setIsShipping(true); $receipt->addItem($item); $expected += (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); self::assertEquals($expected, $receipt->getAmountValue()); self::assertEquals($shipping, $receipt->getAmountValue(false)); self::assertEquals($expected - $shipping, $receipt->getShippingAmountValue()); $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount(Random::float(0.01, 99.99))); $item->setQuantity(Random::float(0.0001, 99.99)); $receipt->addItem($item); $shipping += (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); $expected += (int)round($item->getPrice()->getIntegerValue() * $item->getQuantity()); self::assertEquals($expected, $receipt->getAmountValue()); self::assertEquals($shipping, $receipt->getAmountValue(false)); self::assertEquals($expected - $shipping, $receipt->getShippingAmountValue()); } /** * @dataProvider validNormalizationDataProvider * @param $items * @param $amount * @param $expected */ public function testNormalize($items, $amount, $expected, $withShipping = false) { $receipt = new Receipt(); foreach ($items as $itemInfo) { $item = new ReceiptItem(); $item->setPrice(new MonetaryAmount($itemInfo['price'])); if (!empty($itemInfo['quantity'])) { $item->setQuantity($itemInfo['quantity']); } else { $item->setQuantity(1); } if (!empty($itemInfo['shipping'])) { $item->setIsShipping(true); } $receipt->addItem($item); } $receipt->normalize(new MonetaryAmount($amount), $withShipping); self::assertEquals(count($expected), count($receipt->getItems())); $expectedAmount = 0; foreach ($receipt->getItems() as $index => $item) { self::assertEquals($expected[$index]['price'], $item->getPrice()->getIntegerValue()); self::assertEquals($expected[$index]['quantity'], $item->getQuantity()); $expectedAmount += $item->getAmount(); } self::assertEquals($expectedAmount, $amount * 100); } public function validNormalizationDataProvider() { return array( array( array( array('price' => 10.0), ), 9.0, array( array('price' => 900, 'quantity' => 1.0), ) ), array( array( array('price' => 10.0), array('price' => 20.0), ), 29.0, array( array('price' => 967, 'quantity' => 1.0), array('price' => 1933, 'quantity' => 1.0), ) ), array( array( array('price' => 10.0, 'quantity' => 1), array('price' => 20.0, 'quantity' => 3), ), 29.0, array( array('price' => 413, 'quantity' => 1.0), array('price' => 829, 'quantity' => 3.0), ) ), array( array( array('price' => 50.0, 'quantity' => 3), array('price' => 20.0, 'quantity' => 3), ), 100.0, array( array('price' => 2381, 'quantity' => 2.0), array('price' => 2382, 'quantity' => 1.0), array('price' => 952, 'quantity' => 3.0), ) ), array( array( array('price' => 10.0, 'shipping' => true), array('price' => 50.0, 'quantity' => 3), array('price' => 10.0, 'shipping' => true), array('price' => 20.0, 'quantity' => 3), ), 120.0, array( array('price' => 1000, 'quantity' => 1.0), array('price' => 2381, 'quantity' => 2.0), array('price' => 2382, 'quantity' => 1.0), array('price' => 1000, 'quantity' => 1.0), array('price' => 952, 'quantity' => 3.0), ) ), array( array( array('price' => 50.0, 'quantity' => 1, 'shipping' => 1), array('price' => 50.0, 'quantity' => 2), array('price' => 20.0, 'quantity' => 3), ), 100.0, array( array('price' => 2381, 'quantity' => 1.0), array('price' => 2381, 'quantity' => 1.0), array('price' => 2382, 'quantity' => 1.0), array('price' => 952, 'quantity' => 3.0), ), true ), array( array( array('price' => 50.0, 'quantity' => 1, 'shipping' => 1), ), 49.0, array( array('price' => 4900, 'quantity' => 1.0), ), true ), array( array( array('price' => 100.0, 'quantity' => 0.5), array('price' => 100.0, 'quantity' => 0.4), ), 98.0, array( array('price' => 10889, 'quantity' => 0.25), array('price' => 10888, 'quantity' => 0.25), array('price' => 10889, 'quantity' => 0.4), ), true ), array( array( array('price' => 10, 'quantity' => 1), array('price' => 300, 'quantity' => 1, 'shipping' => 1), ), 10.0, array( array('price' => 32, 'quantity' => 1), array('price' => 968, 'quantity' => 1, 'shipping' => 1), ), true ), array( array( array('price' => 10, 'quantity' => 1), array('price' => 300, 'quantity' => 1, 'shipping' => 1), ), 10.0, array( array('price' => 32, 'quantity' => 1), array('price' => 968, 'quantity' => 1, 'shipping' => 1), ), false ), array( array( array('price' => 0.01, 'quantity' => 1), array('price' => 0.02, 'quantity' => 1), array('price' => 0.03, 'quantity' => 1), array('price' => 300, 'quantity' => 1, 'shipping' => 1), ), 0.06, array( array('price' => 1, 'quantity' => 1), array('price' => 1, 'quantity' => 1), array('price' => 1, 'quantity' => 1), array('price' => 3, 'quantity' => 1, 'shipping' => 1), ), false ), array( array( array('price' => 0.01, 'quantity' => 7), array('price' => 0.02, 'quantity' => 11), array('price' => 0.03, 'quantity' => 13), array('price' => 300, 'quantity' => 1, 'shipping' => 1), ), 0.60, array( array('price' => 1, 'quantity' => 7), array('price' => 1, 'quantity' => 11), array('price' => 1, 'quantity' => 13), array('price' => 29, 'quantity' => 1, 'shipping' => 1), ), false ), array( array( array('price' => 0.01, 'quantity' => 7), array('price' => 0.02, 'quantity' => 11), array('price' => 10, 'quantity' => 1), array('price' => 300, 'quantity' => 1, 'shipping' => 1), ), 10.29, array( array('price' => 1, 'quantity' => 7), array('price' => 1, 'quantity' => 11), array('price' => 33, 'quantity' => 1), array('price' => 978, 'quantity' => 1, 'shipping' => 1), ), false ), ); } /** * @dataProvider fromArrayDataProvider * @param array $source * @param array $expected */ public function testFromArray($source, $expected) { $receipt = new Receipt(); $receipt->fromArray($source); if (!empty($expected)) { foreach ($expected as $property => $value) { self::assertEquals($value, $receipt->offsetGet($property)); } } else { self::assertEquals(array(), $receipt->getItems()); } } public function fromArrayDataProvider() { $receiptItem = new ReceiptItem(); $receiptItem->setDescription('test'); $receiptItem->setQuantity(322); $receiptItem->setVatCode(4); $receiptItem->setPrice(new ReceiptItemAmount(5, 'USD')); return array( array( array(), array(), ), array( array( 'taxSystemCode' => 2, 'phone' => '0123456789', 'email' => 'test@test', 'items' => array( new ReceiptItem(), ), ), array( 'tax_system_code' => 2, 'phone' => '0123456789', 'email' => 'test@test', 'items' => array( new ReceiptItem(), ), ), ), array( array( 'tax_system_code' => 3, 'phone' => '1234567890', 'email' => 'test@tset', 'items' => array( array( 'description' => 'test', 'quantity' => 322, 'amount' => array( 'value' => 5, 'currency' => 'USD', ), 'vat_code' => 4, ), new ReceiptItem(), array( 'description' => 'test', 'quantity' => 322, 'amount' => array( 'value' => 5, 'currency' => 'USD', ), 'vat_code' => 4, ), ), ), array( 'taxSystemCode' => 3, 'phone' => '1234567890', 'email' => 'test@tset', 'items' => array( $receiptItem, new ReceiptItem(), $receiptItem, ), ), array( 'taxSystemCode' => 3, 'customer' => array( 'phone' => '1234567890', 'email' => 'test@tset', ), 'items' => array( $receiptItem, new ReceiptItem(), $receiptItem, ), ), ), ); } /** * @dataProvider fromArrayCustomerDataProvider * @param array $source * @param array $expected */ public function testCustomerFromArray($source, $expected) { $receipt = new Receipt(); $receipt->fromArray($source); if (!empty($expected)) { foreach ($expected as $property => $value) { self::assertEquals($value, $receipt->offsetGet($property)); } } else { self::assertEquals(null, $receipt->getCustomer()); } } public function fromArrayCustomerDataProvider() { $customer = new ReceiptCustomer(); $customer->setFullName('John Doe'); $customer->setEmail('johndoe@yandex.ru'); $customer->setPhone('79000000000'); $customer->setInn('6321341814'); return array( array( array(), array(), ), array( array( 'customer' => array( 'fullName' => 'John Doe', 'email' => 'johndoe@yandex.ru', 'phone' => '79000000000', 'inn' => '6321341814', ), ), array( 'customer' => $customer ), ), array( array( 'customer' => array( 'full_name' => 'John Doe', 'inn' => '6321341814', 'email' => 'johndoe@yandex.ru', 'phone' => '79000000000', ), ), array( 'customer' => $customer ), ), array( array( 'customer' => array( 'full_name' => 'John Doe', 'inn' => '6321341814', ), 'email' => 'johndoe@yandex.ru', 'phone' => '79000000000', ), array( 'customer' => $customer ), ), array( array( 'customer' => array( 'full_name' => 'John Doe', 'inn' => '6321341814', 'email' => 'johndoe@yandex.ru', ), 'phone' => '79000000000', ), array( 'customer' => $customer ), ), array( array( 'customer' => array( 'full_name' => 'John Doe', 'inn' => '6321341814', 'phone' => '79000000000', ), 'email' => 'johndoe@yandex.ru', ), array( 'customer' => $customer ), ), ); } }