123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- <?php
- /**
- * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
- */
- namespace Temando\Shipping\ViewModel\Order;
- use Magento\Backend\Model\Auth\Session;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Integration\Model\Oauth\Token;
- use Magento\Sales\Api\Data\OrderInterface;
- use Magento\Sales\Api\OrderRepositoryInterface;
- use Magento\Sales\Model\Order;
- use Magento\Sales\Model\Order\Shipment as SalesShipment;
- use Magento\Store\Model\Store;
- use Magento\Store\Model\StoreManager;
- use Magento\TestFramework\Helper\Bootstrap;
- use Magento\User\Model\User;
- use Temando\Shipping\Model\Shipment\ShipmentProvider;
- use Temando\Shipping\Model\Shipment\ShipmentProviderInterface;
- use Temando\Shipping\Test\Connection\Db\TokenResourceFake;
- use Temando\Shipping\Test\Integration\Fixture\PlacedOrderFixture;
- use Temando\Shipping\ViewModel\CoreApiInterface;
- use Temando\Shipping\ViewModel\DataProvider\CoreApiAccess;
- use Temando\Shipping\ViewModel\PageActionsInterface;
- use Temando\Shipping\ViewModel\ShippingApiInterface;
- /**
- * Temando Order Ship View Model Test
- *
- * @package Temando\Shipping\Test\Integration
- * @author Christoph Aßmann <christoph.assmann@netresearch.de>
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- * @link http://www.temando.com/
- */
- class OrderShipViewTest extends \PHPUnit\Framework\TestCase
- {
- protected function tearDown()
- {
- Bootstrap::getObjectManager()->removeSharedInstance(ShipmentProvider::class);
- parent::tearDown();
- }
- /**
- * @param string $storeCode
- * @return OrderInterface
- */
- private function getOrder(string $storeCode = 'foo'): OrderInterface
- {
- $frontEndStore = $this->getMockBuilder(Store::class)
- ->setMethods(['getCode'])
- ->disableOriginalConstructor()
- ->getMock();
- $frontEndStore
- ->expects($this->any())
- ->method('getCode')
- ->willReturn($storeCode);
- $storeManager = $this->getMockBuilder(StoreManager::class)
- ->setMethods(['getStore'])
- ->disableOriginalConstructor()
- ->getMock();
- $storeManager
- ->expects($this->any())
- ->method('getStore')
- ->willReturn($frontEndStore);
- /** @var Order $order */
- $order = Bootstrap::getObjectManager()->create(Order::class, [
- 'storeManager' => $storeManager,
- ]);
- return $order;
- }
- /**
- * delegate fixtures creation to separate class.
- */
- public static function createQuoteAndOrderFixture()
- {
- PlacedOrderFixture::createQuoteAndOrderFixture();
- }
- /**
- * delegate fixtures creation to separate class.
- */
- public static function createOrderReferenceFixture()
- {
- PlacedOrderFixture::createOrderReferenceFixture();
- }
- /**
- * delegate fixtures rollback to separate class.
- */
- public static function createQuoteAndOrderFixtureRollback()
- {
- PlacedOrderFixture::createQuoteAndOrderFixtureRollback();
- }
- /**
- * delegate fixtures rollback to separate class.
- */
- public static function createOrderReferenceFixtureRollback()
- {
- PlacedOrderFixture::createOrderReferenceFixtureRollback();
- }
- /**
- * @test
- */
- public function backButtonIsNotAvailableInOrderShipComponent()
- {
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->get(OrderShip::class);
- $this->assertNotInstanceOf(PageActionsInterface::class, $viewModel);
- }
- /**
- * @test
- * @magentoConfigFixture default/carriers/temando/session_endpoint https://auth.temando.io/v1/
- * @magentoConfigFixture default/carriers/temando/sovereign_endpoint https://foo.temando.io/v1/
- */
- public function shippingApiCredentialsAreAvailableInOrderShipComponent()
- {
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->get(OrderShip::class);
- $this->assertInstanceOf(ShippingApiInterface::class, $viewModel);
- $this->assertEquals('https://foo.temando.io/v1/', $viewModel->getShippingApiAccess()->getApiEndpoint());
- }
- /**
- * @test
- * @magentoConfigFixture default/admin/security/session_lifetime 303
- */
- public function coreApiCredentialsAreAvailableInOrderShipComponent()
- {
- $currentTime = time();
- $sessionExpirationTime = $currentTime + 303;
- $adminId = 77;
- $adminUser = Bootstrap::getObjectManager()->create(User::class, ['data' => [
- 'user_id' => $adminId,
- ]]);
- $session = $this->getMockBuilder(Session::class)
- ->setMethods(['getUser', 'getUpdatedAt'])
- ->disableOriginalConstructor()
- ->getMock();
- $session
- ->expects($this->any())
- ->method('getUser')
- ->willReturn($adminUser);
- $session
- ->expects($this->any())
- ->method('getUpdatedAt')
- ->willReturn($currentTime);
- $resource = Bootstrap::getObjectManager()->create(TokenResourceFake::class);
- $token = Bootstrap::getObjectManager()->create(Token::class, [
- 'resource' => $resource,
- ]);
- $apiAccess = Bootstrap::getObjectManager()->create(CoreApiAccess::class, [
- 'session' => $session,
- 'token' => $token,
- ]);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'coreApiAccess' => $apiAccess,
- ]);
- $this->assertInstanceOf(CoreApiInterface::class, $viewModel);
- $this->assertEquals($sessionExpirationTime, $viewModel->getCoreApiAccess()->getSessionExpirationTime());
- $this->assertNotEmpty($viewModel->getCoreApiAccess()->getAccessToken());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function getDefaultCurrency()
- {
- $currencyCode = 'XXX';
- $order = $this->getOrder();
- $order->setBaseCurrencyCode($currencyCode);
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals($currencyCode, $viewModel->getDefaultCurrency());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- * @magentoConfigFixture foo_store general/locale/weight_unit BAR
- */
- public function getDefaultWeightUnit()
- {
- $order = $this->getOrder();
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals('BAR', $viewModel->getDefaultWeightUnit());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- * @magentoConfigFixture foo_store general/locale/weight_unit lbs
- */
- public function getDimensionsUnitForLbsWeight()
- {
- $order = $this->getOrder();
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals('in', $viewModel->getDefaultDimensionsUnit());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- * @magentoConfigFixture foo_store general/locale/weight_unit kg
- */
- public function getDimensionsUnitForKgWeight()
- {
- $order = $this->getOrder();
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals('cm', $viewModel->getDefaultDimensionsUnit());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function getShipEndpoint()
- {
- $orderId = '808';
- $order = $this->getOrder();
- $order->setEntityId($orderId);
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertStringEndsWith("$orderId/ship", $viewModel->getShipEndpoint());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- * @magentoDataFixture createQuoteAndOrderFixture
- */
- public function getOrderData()
- {
- $orderIncrementId = PlacedOrderFixture::getOrderIncrementId();
- $searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
- $searchCriteriaBuilder->addFilter('increment_id', $orderIncrementId);
- $searchCriteriaBuilder->setPageSize(1);
- /** @var \Magento\Sales\Model\ResourceModel\Order\Collection $searchResult */
- $orderRepository = Bootstrap::getObjectManager()->get(OrderRepositoryInterface::class);
- $searchResult = $orderRepository->getList($searchCriteriaBuilder->create());
- /** @var \Magento\Sales\Model\Order $order */
- $order = $searchResult->getFirstItem();
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->any())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertJson($viewModel->getOrderData());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function getSelectedExperience()
- {
- $methodCode = 'uk-standard-hermes';
- $order = Bootstrap::getObjectManager()->create(Order::class, ['data' => [
- 'shipping_method' => "temando_{$methodCode}",
- ]]);
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals($methodCode, $viewModel->getSelectedExperience());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- * @magentoDataFixture createOrderReferenceFixture
- */
- public function getExtOrderId()
- {
- $orderIncrementId = PlacedOrderFixture::getOrderIncrementId();
- $extOrderId = PlacedOrderFixture::getExternalOrderId();
- $searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
- $searchCriteriaBuilder->addFilter('increment_id', $orderIncrementId);
- $searchCriteriaBuilder->setPageSize(1);
- /** @var \Magento\Sales\Model\ResourceModel\Order\Collection $searchResult */
- $orderRepository = Bootstrap::getObjectManager()->get(OrderRepositoryInterface::class);
- $searchResult = $orderRepository->getList($searchCriteriaBuilder->create());
- /** @var \Magento\Sales\Model\Order $order */
- $order = $searchResult->getFirstItem();
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals($extOrderId, $viewModel->getExtOrderId());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function noExtOrderIdFound()
- {
- $orderId = '808';
- $order = $this->getOrder();
- $order->setEntityId($orderId);
- /** @var SalesShipment|\PHPUnit_Framework_MockObject_MockObject $shipmentMock */
- $shipmentMock = $this->getMockBuilder(SalesShipment::class)
- ->setMethods(['getOrder'])
- ->disableOriginalConstructor()
- ->getMock();
- $shipmentMock
- ->expects($this->once())
- ->method('getOrder')
- ->willReturn($order);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipmentMock);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertEquals('', $viewModel->getExtOrderId());
- }
- /**
- * Assert shipment view url template contains id placeholder.
- *
- * @test
- * @magentoAppArea adminhtml
- */
- public function getShipmentViewPageUrl()
- {
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class);
- $url = $viewModel->getShipmentViewPageUrl();
- $this->assertContains('sales/shipment/view', $url);
- $this->assertContains('shipment_id', $url);
- $this->assertContains('--id--', $url);
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function getConfigUrl()
- {
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class);
- $url = $viewModel->getConfigUrl();
- $this->assertContains('system_config/edit', $url);
- $this->assertContains('carriers', $url);
- $this->assertContains('#carriers_temando-link', $url);
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function shipmentWasRegistered()
- {
- /** @var SalesShipment $shipment */
- $shipment = Bootstrap::getObjectManager()->create(SalesShipment::class);
- /** @var ShipmentProviderInterface $shipmentProvider */
- $shipmentProvider = Bootstrap::getObjectManager()->get(ShipmentProviderInterface::class);
- $shipmentProvider->setSalesShipment($shipment);
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class, [
- 'shipmentProvider' => $shipmentProvider,
- ]);
- $this->assertTrue($viewModel->hasSalesShipment());
- }
- /**
- * @test
- * @magentoAppArea adminhtml
- */
- public function shipmentWasNotRegistered()
- {
- /** @var OrderShip $viewModel */
- $viewModel = Bootstrap::getObjectManager()->create(OrderShip::class);
- $this->assertFalse($viewModel->hasSalesShipment());
- }
- }
|