Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/wbs24.exchange1c/tests/unit/ |
Upload File : |
<?php namespace Wbs24\Exchange1c; use Bitrix\Main\Loader; class OrdersTest extends BitrixTestCase { protected function getObjectMocks() { // для getOrdersByParam() $ResultStub = $this->getMockBuilder(\stdClass::class) ->setMethods(['fetch']) ->getMock(); $fetchResults = [ [ 'ID' => 1001, 'XML_ID' => 'bx_1', 'STATUS_ID' => 'N', 'USER_ID' => 10, 'CANCELED' => 'N', 'DATE_CANCELED' => '', ], false, ]; $ResultStub->method('fetch') ->will($this->onConsecutiveCalls(...$fetchResults)); $OrderStub = $this->createMock(Wrappers\Order::class); $OrderStub->method('getList') ->willReturn($ResultStub); // для getCustomerInfo() $ResultStub = $this->getMockBuilder(\stdClass::class) ->setMethods(['fetch']) ->getMock(); $fetchResults = [ [ 'CODE' => 'FIO', 'VALUE' => 'Test', ], [ 'CODE' => 'EMAIL', 'VALUE' => 'test@test.com', ], [ 'CODE' => 'PHONE', 'VALUE' => '79990000001', ], [ 'CODE' => 'CITY', 'VALUE' => 'Big city', ], [ 'CODE' => 'ADDRESS', 'VALUE' => '1 Str. 101', ], false, ]; $ResultStub->method('fetch') ->will($this->onConsecutiveCalls(...$fetchResults)); $PropertyValueCollectionStub = $this->createMock(Wrappers\PropertyValueCollection::class); $PropertyValueCollectionStub->method('getList') ->willReturn($ResultStub); // для getOrderInfo() // для getSource() $orderExemplar = $this->getMockBuilder(\stdClass::class) ->setMethods(['getTradeBindingCollection']) ->getMock(); $orderExemplar->method('getTradeBindingCollection') ->willReturn([]); $OrderStub->method('load') // $OrderStub определен выше для функции getOrdersByParam() ->willReturn($orderExemplar); // для getProductsByOrderId() $ResultStub = $this->getMockBuilder(\stdClass::class) ->setMethods(['fetch']) ->getMock(); $fetchResults = [ [ 'ID' => 201, 'PRODUCT_ID' => 101, 'NAME' => 'Product 1', 'PRICE' => '1000.01', 'QUANTITY' => 1, ], [ 'ID' => 202, 'PRODUCT_ID' => 102, 'NAME' => 'Product 2', 'PRICE' => '500.00', 'QUANTITY' => 2, ], false, ]; $ResultStub->method('fetch') ->will($this->onConsecutiveCalls(...$fetchResults)); $BasketStub = $this->createMock(Wrappers\Basket::class); $BasketStub->method('getList') ->willReturn($ResultStub); // для addProductMeta() $CatalogStub = $this->createMock(Catalog::class); $CatalogStub->method('getProductMeta') ->will($this->returnCallback( function ($productId) { return [ "sku" => "ART".$productId."_M_MIX_1_XL", //"color" => "", //"size" => "XL", //"packageRatio" => 1, //"barcode" => '12345678'.$productId, ]; } )); $CatalogStub->method('getWarehousesInfo') ->willReturn([ 1 => [ 'ID' => 1, 'XML_ID' => 'abcdef123456', 'TITLE' => 'Store 1', ], 2 => [ 'ID' => 2, 'XML_ID' => 'abcdef123457', 'TITLE' => 'Store 2', ], ]); $CatalogStub->method('getAllowedProductIds') ->willReturn([ 101, 102, ]); // для getCustomerId() $DbStub = $this->createMock(Db::class); $DbStub->method('getSingle') ->willReturn(['id' => 1]); $DbStub->method('set') ->willReturn(null); return [ 'Order' => $OrderStub, 'PropertyValueCollection' => $PropertyValueCollectionStub, 'Basket' => $BasketStub, 'Catalog' => $CatalogStub, 'Db' => $DbStub, ]; } public function test_getOrders() { // входные параметры $param = [ 'fromTime' => 1675435290, 'not_check_permissions' => true, ]; // результат для проверки $expectedResult = [ [ 'orderId' => 1001, 'xmlId' => 'bx_1', 'status' => 'N', 'statusTimestamp' => '', 'canceled' => 'N', 'canceledTimestamp' => '', 'createdTimestamp' => '', 'orderSum' => 2000.01, 'properties' => [], 'customer' => [ 'name' => 'Test', 'email' => 'test@test.com', 'phone' => '79990000001', 'city' => 'Big city', 'address' => '1 Str. 101', 'userId' => 10, 'customerId' => 1, ], 'products' => [ [ 'productId' => 101, 'sku' => 'ART101_M_MIX_1_XL', //'color' => '', //'size' => 'XL', //'barcode' => '12345678101', //'packageRatio' => 1, 'stocks' => [ //'stockId' => 'abcdef123456', //'stockName' => 'Store 1', 'quantity' => 1, ], 'salePrice' => 1000.01, 'salePriceSum' => 1000.01, ], [ 'productId' => 102, 'sku' => 'ART102_M_MIX_1_XL', //'color' => '', //'size' => 'XL', //'barcode' => '12345678102', //'packageRatio' => 1, 'stocks' => [ //'stockId' => 'abcdef123456', //'stockName' => 'Store 1', 'quantity' => 2, ], 'salePrice' => 500, 'salePriceSum' => 1000, ], ], 'source' => 'site', ], ]; // заглушки $mocks = $this->getObjectMocks(); // вычисление результата $object = new Orders($mocks); $result = $object->getOrders($param); // проверка $this->assertEquals($expectedResult, $result); } public function test_getDateListByRange() { // входные параметры $from = "29.12.2023 12:00:00"; $to = "02.01.2024 12:00:00"; // результат для проверки $expectedResult = [ '29.12.2023', '30.12.2023', '31.12.2023', '01.01.2024', '02.01.2024', ]; // заглушки // вычисление результата $method = $this->getMethod('Wbs24\\Exchange1c\\Orders', 'getDateListByRange'); $object = new \Wbs24\Exchange1c\Orders($mocks); $result = $method->invokeArgs($object, [$from, $to]); // проверка $this->assertEquals($expectedResult, $result); } public function test_validateOrders() { // входные параметры $orders = [ [ 'orderId' => 1001, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-16 08:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1002, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-16 07:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1003, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-15 15:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1004, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-17 07:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1005, 'canceled' => 'N', 'canceledTimestamp' => '', 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], ]; // результат для проверки $expectedResult = [ [ 'orderId' => 1001, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-16 08:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1004, 'canceled' => 'Y', 'canceledTimestamp' => strtotime('2023-08-17 07:00:00'), 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], [ 'orderId' => 1005, 'canceled' => 'N', 'canceledTimestamp' => '', 'properties' => [ 'shipmentDate' => '16.08.2023', ], ], ]; // заглушки // вычисление результата $method = $this->getMethod('Wbs24\\Exchange1c\\Orders', 'validateOrders'); $object = new \Wbs24\Exchange1c\Orders($mocks); $result = $method->invokeArgs($object, [$orders]); // проверка $this->assertEquals($expectedResult, $result); } public function test_getProductsWithKitElementsByOrderId() { // входные параметры $orderId = 1; // результат для проверки $expectedResult = [ 8308 => [ 'ID' => 8308, 'PRODUCT_ID' => 1836, 'SET_PARENT_ID' => '', 'NAME' => 'Римская свеча Вьюга УПАКОВКА Р5300 (4 шт*6 залпов) Русская пиротехника', 'PRICE' => '595.0000', 'QUANTITY' => '3.0000', 'sku' => 'Р5300/4', 'kitElements' => [ 8309 => [ 'ID' => 8309, 'PRODUCT_ID' => 2546, 'SET_PARENT_ID' => 8308, 'NAME' => 'Римская свеча Р5300 Вьюга 1 шт х 6 залпов', 'PRICE' => '226.0000', 'QUANTITY' => '12.0000', 'sku' => 'Р5300', ], ], ], 8326 => [ 'ID' => 8326, 'PRODUCT_ID' => 1972, 'SET_PARENT_ID' => '', 'NAME' => 'Фейерверк фонтан РС4163 Чумовой Кракатау Русская пиротехника', 'PRICE' => '2350.0000', 'QUANTITY' => '1.0000', 'sku' => 'РС4163', ], ]; // заглушки $ResultStub = $this->getMockBuilder(\stdClass::class) ->setMethods(['fetch']) ->getMock(); $fetchResults = [ [ 'ID' => 8308, 'PRODUCT_ID' => 1836, 'SET_PARENT_ID' => '', 'NAME' => 'Римская свеча Вьюга УПАКОВКА Р5300 (4 шт*6 залпов) Русская пиротехника', 'PRICE' => '595.0000', 'QUANTITY' => '3.0000', 'sku' => 'Р5300/4', ], [ 'ID' => 8326, 'PRODUCT_ID' => 1972, 'SET_PARENT_ID' => '', 'NAME' => 'Фейерверк фонтан РС4163 Чумовой Кракатау Русская пиротехника', 'PRICE' => '2350.0000', 'QUANTITY' => '1.0000', 'sku' => 'РС4163', ], [ 'ID' => 8309, 'PRODUCT_ID' => 2546, 'SET_PARENT_ID' => 8308, 'NAME' => 'Римская свеча Р5300 Вьюга 1 шт х 6 залпов', 'PRICE' => '226.0000', 'QUANTITY' => '12.0000', 'sku' => 'Р5300', ], false, ]; $ResultStub->method('fetch') ->will($this->onConsecutiveCalls(...$fetchResults)); $BasketStub = $this->createMock(Wrappers\Basket::class); $BasketStub->method('getList') ->willReturn($ResultStub); // вычисление результата $method = $this->getMethod('Wbs24\\Exchange1c\\Orders', 'getProductsWithKitElementsByOrderId'); $object = new \Wbs24\Exchange1c\Orders([ 'Basket' => $BasketStub, ]); $result = $method->invokeArgs($object, [$orderId]); // проверка $this->assertEquals($expectedResult, $result); } public function test_convertOrders() { // входные параметры $orders = array ( 0 => array ( 'ID' => '744', 'XML_ID' => 'bx_639a2d7094e03', 'STATUS_ID' => 'N', 'USER_ID' => '15391', 'DATE_CANCELED' => '', 'CANCELED' => 'N', 'DATE_STATUS' => '', 'DATE_INSERT' => '', 'customer' => array ( 'name' => 'Ольга Голубева', 'email' => 'olga999@mail.ru', 'phone' => '+7 (999) 757-89-81', 'city' => 'Москва', 'address' => 'Boxberry: 197372, Санкт-Петербург г, Богатырский пр-кт, д.999 #78471', 'userId' => '15391', ), 'properties' => array ( ), 'source' => 'site', 'products' => array ( 0 => array ( 'ID' => '8306', 'PRODUCT_ID' => '2609', 'SET_PARENT_ID' => NULL, 'NAME' => 'Римская свеча Р5310 Сакура 1 шт*10 залпов', 'PRICE' => '146.0000', 'QUANTITY' => '1.0000', 'sku' => 'Р5310', 'stocks' => array ( 'quantity' => 1, ), ), 1 => array ( 'ID' => '8308', 'PRODUCT_ID' => '1836', 'SET_PARENT_ID' => NULL, 'NAME' => 'Римская свеча Вьюга УПАКОВКА Р5300 (4 шт*6 залпов) Русская пиротехника', 'PRICE' => '595.0000', 'QUANTITY' => '3.0000', 'sku' => 'Р5300/4', 'kitElements' => array ( 8309 => array ( 'ID' => '8309', 'PRODUCT_ID' => '2546', 'SET_PARENT_ID' => '8308', 'NAME' => 'Римская свеча Р5300 Вьюга 1 шт х 6 залпов', 'PRICE' => '226.0000', 'QUANTITY' => '12.0000', 'sku' => 'Р5300', ), ), 'stocks' => array ( 'quantity' => 3, ), ), ), ), ); // результат для проверки $expectedResult = array ( 0 => array ( 'orderId' => '744', 'xmlId' => 'bx_639a2d7094e03', 'status' => 'N', 'statusTimestamp' => '', 'canceled' => 'N', 'canceledTimestamp' => '', 'createdTimestamp' => '', 'orderSum' => 1931.0, 'properties' => array ( ), 'customer' => array ( 'name' => 'Ольга Голубева', 'email' => 'olga999@mail.ru', 'phone' => '+7 (999) 757-89-81', 'city' => 'Москва', 'address' => 'Boxberry: 197372, Санкт-Петербург г, Богатырский пр-кт, д.999 #78471', 'userId' => '15391', ), 'source' => 'site', 'products' => array ( 0 => array ( 'productId' => '2609', 'sku' => 'Р5310', 'stocks' => array ( 'quantity' => 1, ), 'salePrice' => '146.0000', 'salePriceSum' => 146.0, ), 1 => array ( 'productId' => '1836', 'sku' => 'Р5300/4', 'kitElements' => [ [ 'productId' => '2546', 'sku' => 'Р5300', 'stocks' => array ( 'quantity' => 12, ), 'price' => 226, ], ], 'stocks' => array ( 'quantity' => 3, ), 'salePrice' => '595.0000', 'salePriceSum' => 1785.0, ), ), ), ); // заглушки // вычисление результата $method = $this->getMethod('Wbs24\\Exchange1c\\Orders', 'convertOrders'); $object = new \Wbs24\Exchange1c\Orders(); $result = $method->invokeArgs($object, [$orders]); // проверка $this->assertEquals($expectedResult, $result); } }