159 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Shipping\Helper;
 | 
						|
 | 
						|
use Magento\Store\Model\StoreManagerInterface;
 | 
						|
 | 
						|
class DataTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Shipping\Helper\Data
 | 
						|
     */
 | 
						|
    private $helper;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Shipping\Helper\Data::class
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $modelName
 | 
						|
     * @param string $getIdMethod
 | 
						|
     * @param int $entityId
 | 
						|
     * @param string $code
 | 
						|
     * @param string $expected
 | 
						|
     * @dataProvider getTrackingPopupUrlBySalesModelDataProvider
 | 
						|
     */
 | 
						|
    public function testGetTrackingPopupUrlBySalesModel($modelName, $getIdMethod, $entityId, $code, $expected)
 | 
						|
    {
 | 
						|
        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $constructArgs = [];
 | 
						|
        if (\Magento\Sales\Model\Order\Shipment::class === $modelName) {
 | 
						|
            $orderRepository = $this->getMockOrderRepository($code);
 | 
						|
            $constructArgs['orderRepository'] = $orderRepository;
 | 
						|
        } elseif (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
 | 
						|
            $shipmentRepository = $this->getMockShipmentRepository($code);
 | 
						|
            $constructArgs['shipmentRepository'] = $shipmentRepository;
 | 
						|
        }
 | 
						|
 | 
						|
        $model = $objectManager->create($modelName, $constructArgs);
 | 
						|
        $model->{$getIdMethod}($entityId);
 | 
						|
 | 
						|
        if (\Magento\Sales\Model\Order::class === $modelName) {
 | 
						|
            $model->setProtectCode($code);
 | 
						|
        }
 | 
						|
        if (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
 | 
						|
            $model->setParentId(1);
 | 
						|
        }
 | 
						|
 | 
						|
        $actual = $this->helper->getTrackingPopupUrlBySalesModel($model);
 | 
						|
        $this->assertEquals($expected, $actual);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * From the admin panel with custom URL we should have generated frontend URL
 | 
						|
     *
 | 
						|
     * @param string $modelName
 | 
						|
     * @param string $getIdMethod
 | 
						|
     * @param int $entityId
 | 
						|
     * @param string $code
 | 
						|
     * @param string $expected
 | 
						|
     * @magentoAppArea adminhtml
 | 
						|
     * @magentoConfigFixture admin_store web/unsecure/base_link_url http://admin.localhost/
 | 
						|
     * @dataProvider getTrackingPopupUrlBySalesModelDataProvider
 | 
						|
     */
 | 
						|
    public function testGetTrackingPopupUrlBySalesModelFromAdmin($modelName, $getIdMethod, $entityId, $code, $expected)
 | 
						|
    {
 | 
						|
        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
 | 
						|
        /** @var StoreManagerInterface $storeManager */
 | 
						|
        $storeManager = $objectManager->create(StoreManagerInterface::class);
 | 
						|
        $storeManager->reinitStores();
 | 
						|
 | 
						|
        $constructArgs = [];
 | 
						|
        if (\Magento\Sales\Model\Order\Shipment::class === $modelName) {
 | 
						|
            $orderRepository = $this->getMockOrderRepository($code);
 | 
						|
            $constructArgs['orderRepository'] = $orderRepository;
 | 
						|
        } elseif (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
 | 
						|
            $shipmentRepository = $this->getMockShipmentRepository($code);
 | 
						|
            $constructArgs['shipmentRepository'] = $shipmentRepository;
 | 
						|
        }
 | 
						|
 | 
						|
        $model = $objectManager->create($modelName, $constructArgs);
 | 
						|
        $model->{$getIdMethod}($entityId);
 | 
						|
 | 
						|
        if (\Magento\Sales\Model\Order::class === $modelName) {
 | 
						|
            $model->setProtectCode($code);
 | 
						|
        }
 | 
						|
        if (\Magento\Sales\Model\Order\Shipment\Track::class === $modelName) {
 | 
						|
            $model->setParentId(1);
 | 
						|
        }
 | 
						|
 | 
						|
        //Frontend URL should be used there
 | 
						|
        $actual = $this->helper->getTrackingPopupUrlBySalesModel($model);
 | 
						|
        $this->assertEquals($expected, $actual);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $code
 | 
						|
     * @return \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit\Framework\MockObject\MockObject
 | 
						|
     */
 | 
						|
    private function getMockOrderRepository($code)
 | 
						|
    {
 | 
						|
        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $order = $objectManager->create(\Magento\Sales\Model\Order::class);
 | 
						|
        $order->setProtectCode($code);
 | 
						|
        $orderRepository = $this->createMock(\Magento\Sales\Api\OrderRepositoryInterface::class);
 | 
						|
        $orderRepository->expects($this->atLeastOnce())->method('get')->willReturn($order);
 | 
						|
        return $orderRepository;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param $code
 | 
						|
     * @return \Magento\Sales\Model\Order\ShipmentRepository|\PHPUnit\Framework\MockObject\MockObject
 | 
						|
     */
 | 
						|
    private function getMockShipmentRepository($code)
 | 
						|
    {
 | 
						|
        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $orderRepository = $this->getMockOrderRepository($code);
 | 
						|
        $shipmentArgs = ['orderRepository' => $orderRepository];
 | 
						|
 | 
						|
        $shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class, $shipmentArgs);
 | 
						|
        $shipmentRepository = $this->createPartialMock(\Magento\Sales\Model\Order\ShipmentRepository::class, ['get']);
 | 
						|
        $shipmentRepository->expects($this->atLeastOnce())->method('get')->willReturn($shipment);
 | 
						|
        return $shipmentRepository;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function getTrackingPopupUrlBySalesModelDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [\Magento\Sales\Model\Order::class,
 | 
						|
                'setId',
 | 
						|
                42,
 | 
						|
                'abc',
 | 
						|
                'http://localhost/index.php/shipping/tracking/popup?hash=b3JkZXJfaWQ6NDI6YWJj',
 | 
						|
            ],
 | 
						|
            [\Magento\Sales\Model\Order\Shipment::class,
 | 
						|
                'setId',
 | 
						|
                42,
 | 
						|
                'abc',
 | 
						|
                'http://localhost/index.php/shipping/tracking/popup?hash=c2hpcF9pZDo0MjphYmM%7E'
 | 
						|
            ],
 | 
						|
            [\Magento\Sales\Model\Order\Shipment\Track::class,
 | 
						|
                'setEntityId',
 | 
						|
                42,
 | 
						|
                'abc',
 | 
						|
                'http://localhost/index.php/shipping/tracking/popup?hash=dHJhY2tfaWQ6NDI6YWJj'
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |