From 9ee464c765ac843e10235db9e619cb66e8cbee1f Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Thu, 12 Oct 2017 09:55:57 +0200 Subject: [PATCH 1/7] Fix for #9566: Show the correct label in the admin --- app/code/Magento/Sales/Model/Order/Config.php | 8 +++- .../Magento/Sales/Model/Order/StatusTest.php | 48 +++++++++++++++++++ .../Magento/Sales/_files/order_status.php | 25 ++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Sales/_files/order_status.php diff --git a/app/code/Magento/Sales/Model/Order/Config.php b/app/code/Magento/Sales/Model/Order/Config.php index 1c7514142678b..ae0ef0c828512 100644 --- a/app/code/Magento/Sales/Model/Order/Config.php +++ b/app/code/Magento/Sales/Model/Order/Config.php @@ -122,8 +122,14 @@ public function getStateDefaultStatus($state) */ public function getStatusLabel($code) { - $code = $this->maskStatusForArea($this->state->getAreaCode(), $code); + $area = $this->state->getAreaCode(); + $code = $this->maskStatusForArea($area, $code); $status = $this->orderStatusFactory->create()->load($code); + + if ($area == 'adminhtml') { + return $status->getLabel(); + } + return $status->getStoreLabel(); } diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php new file mode 100644 index 0000000000000..d53ff46122f57 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php @@ -0,0 +1,48 @@ +get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); + + /** @var \Magento\Sales\Model\Order $order */ + $order = $objectManager->create(\Magento\Sales\Model\Order::class); + $order->loadByIncrementId('100000001'); + + $this->assertEquals('Example', $order->getStatusLabel()); + } + + /** + * In the frontend the store view specific label must be showed. + * + * @magentoDataFixture Magento/Sales/_files/order_status.php + */ + public function testTheStoreViewLabelIsUsedInTheFrontend() + { + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('frontend'); + + /** @var \Magento\Sales\Model\Order $order */ + $order = $objectManager->create(\Magento\Sales\Model\Order::class); + $order->loadByIncrementId('100000001'); + + $this->assertEquals('Store view example', $order->getStatusLabel()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/order_status.php b/dev/tests/integration/testsuite/Magento/Sales/_files/order_status.php new file mode 100644 index 0000000000000..e65dd6b682396 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/order_status.php @@ -0,0 +1,25 @@ +create( + \Magento\Sales\Model\Order\Status::class +); + +$data = [ + 'status' => 'example', + 'label' => 'Example', + 'store_labels' => [ + 1 => 'Store view example', + ] +]; + +$orderStatus->setData($data)->setStatus('example'); +$orderStatus->save(); + +$order->setStatus('example'); +$order->save(); From 8e843ade22f640c9626eca9ce1111bd2edef5a3b Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Fri, 13 Oct 2017 19:42:07 +0200 Subject: [PATCH 2/7] Rewrite to have one test using a dataprovider --- .../Magento/Sales/Model/Order/StatusTest.php | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php index d53ff46122f57..db3afa031b278 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php @@ -12,37 +12,38 @@ */ class StatusTest extends \PHPUnit\Framework\TestCase { - /** - * In the backend the regular label must be showed. - * - * @magentoDataFixture Magento/Sales/_files/order_status.php - */ - public function testTheLabelIsUsedInTheBackend() + public function theCorrectLabelIsUsedDependingOnTheAreaProvider() { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); - - /** @var \Magento\Sales\Model\Order $order */ - $order = $objectManager->create(\Magento\Sales\Model\Order::class); - $order->loadByIncrementId('100000001'); - - $this->assertEquals('Example', $order->getStatusLabel()); + return [ + 'backend label' => [ + 'adminhtml', + 'Example', + ], + 'store view label' => [ + 'frontend', + 'Store view example', + ], + ]; } /** - * In the frontend the store view specific label must be showed. + * In the backend the regular label must be showed. + * + * @param $area + * @param $result * * @magentoDataFixture Magento/Sales/_files/order_status.php + * @dataProvider theCorrectLabelIsUsedDependingOnTheAreaProvider */ - public function testTheStoreViewLabelIsUsedInTheFrontend() + public function testTheCorrectLabelIsUsedDependingOnTheArea($area, $result) { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('frontend'); + $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); /** @var \Magento\Sales\Model\Order $order */ $order = $objectManager->create(\Magento\Sales\Model\Order::class); $order->loadByIncrementId('100000001'); - $this->assertEquals('Store view example', $order->getStatusLabel()); + $this->assertEquals('Example', $order->getStatusLabel()); } } From 69ef9dab06e1971c3db82be80778ece254a50443 Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Sat, 14 Oct 2017 13:08:37 +0200 Subject: [PATCH 3/7] Forgot to use the dataprovider variables --- .../testsuite/Magento/Sales/Model/Order/StatusTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php index db3afa031b278..e4b64e77d6e05 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/StatusTest.php @@ -38,12 +38,12 @@ public function theCorrectLabelIsUsedDependingOnTheAreaProvider() public function testTheCorrectLabelIsUsedDependingOnTheArea($area, $result) { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode('adminhtml'); + $objectManager->get(\Magento\Framework\App\State::class)->setAreaCode($area); /** @var \Magento\Sales\Model\Order $order */ $order = $objectManager->create(\Magento\Sales\Model\Order::class); $order->loadByIncrementId('100000001'); - $this->assertEquals('Example', $order->getStatusLabel()); + $this->assertEquals($result, $order->getStatusLabel()); } } From 466095683102da9c3747a9442dfcb515d7d49c30 Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Wed, 25 Oct 2017 07:14:06 +0200 Subject: [PATCH 4/7] Correct label for the "Notes for this Order" dropdown --- app/code/Magento/Sales/Model/Order/Config.php | 3 ++- .../Sales/view/adminhtml/templates/order/view/history.phtml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Config.php b/app/code/Magento/Sales/Model/Order/Config.php index ae0ef0c828512..924554703dac5 100644 --- a/app/code/Magento/Sales/Model/Order/Config.php +++ b/app/code/Magento/Sales/Model/Order/Config.php @@ -206,6 +206,7 @@ public function getStateStatuses($state, $addLabels = true) return $this->stateStatuses[$key]; } $statuses = []; + $area = $this->state->getAreaCode(); if (!is_array($state)) { $state = [$state]; @@ -217,7 +218,7 @@ public function getStateStatuses($state, $addLabels = true) foreach ($collection as $item) { $status = $item->getData('status'); if ($addLabels) { - $statuses[$status] = $item->getStoreLabel(); + $statuses[$status] = $area == 'adminhtml' ? $item->getLabel() : $item->getStoreLabel(); } else { $statuses[] = $status; } diff --git a/app/code/Magento/Sales/view/adminhtml/templates/order/view/history.phtml b/app/code/Magento/Sales/view/adminhtml/templates/order/view/history.phtml index 1ec51ffb793c6..6ac6e13a873ed 100644 --- a/app/code/Magento/Sales/view/adminhtml/templates/order/view/history.phtml +++ b/app/code/Magento/Sales/view/adminhtml/templates/order/view/history.phtml @@ -5,7 +5,7 @@ */ // @codingStandardsIgnoreFile - +/** @var \Magento\Sales\Block\Adminhtml\Order\View\History $block */ ?>
canAddComment()):?> From 567b331303d18e45f1981f63d4e6bb7499f620bc Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Wed, 25 Oct 2017 20:48:46 +0200 Subject: [PATCH 5/7] De-duplicated some code --- app/code/Magento/Sales/Model/Order/Config.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Config.php b/app/code/Magento/Sales/Model/Order/Config.php index 924554703dac5..e00eda647dc8d 100644 --- a/app/code/Magento/Sales/Model/Order/Config.php +++ b/app/code/Magento/Sales/Model/Order/Config.php @@ -206,7 +206,6 @@ public function getStateStatuses($state, $addLabels = true) return $this->stateStatuses[$key]; } $statuses = []; - $area = $this->state->getAreaCode(); if (!is_array($state)) { $state = [$state]; @@ -218,7 +217,7 @@ public function getStateStatuses($state, $addLabels = true) foreach ($collection as $item) { $status = $item->getData('status'); if ($addLabels) { - $statuses[$status] = $area == 'adminhtml' ? $item->getLabel() : $item->getStoreLabel(); + $statuses[$status] = $this->getStatusLabel($status); } else { $statuses[] = $status; } From 1ad99bc762d6c4e67f0d7386c5aa04fb4c02702e Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Sat, 28 Oct 2017 20:32:25 +0200 Subject: [PATCH 6/7] Fixed the broken unit test --- .../Test/Unit/Model/Order/ConfigTest.php | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php index f3a35e485c166..ce7cdd546e88b 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php @@ -23,18 +23,41 @@ class ConfigTest extends \PHPUnit\Framework\TestCase */ protected $orderStatusCollectionFactoryMock; + /** + * @var \Magento\Sales\Model\Order\Config|\PHPUnit_Framework_MockObject_MockObject + */ + protected $orderStatusFactoryMock; + + /** + * @var \Magento\Sales\Model\Order\Status + */ + protected $orderStatusModel; + + /** + * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $storeManagerMock; + protected function setUp() { - $orderStatusFactory = $this->createMock(\Magento\Sales\Model\Order\StatusFactory::class); + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class); + $this->orderStatusModel = $objectManager->getObject(\Magento\Sales\Model\Order\Status::class, [ + 'storeManager' => $this->storeManagerMock, + ]); + $this->orderStatusFactoryMock = $this->getMockBuilder(\Magento\Sales\Model\Order\StatusFactory::class) + ->setMethods(['load', 'create']) + ->getMock(); $this->orderStatusCollectionFactoryMock = $this->createPartialMock( \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory::class, ['create'] ); - $this->salesConfig = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this)) + $this->salesConfig = $objectManager ->getObject( \Magento\Sales\Model\Order\Config::class, [ - 'orderStatusFactory' => $orderStatusFactory, + 'orderStatusFactory' => $this->orderStatusFactoryMock, 'orderStatusCollectionFactory' => $this->orderStatusCollectionFactoryMock ] ); @@ -147,6 +170,22 @@ public function testGetStatuses($state, $joinLabels, $collectionData, $expectedR ->method('joinStates') ->will($this->returnValue($collectionData)); + $this->orderStatusFactoryMock->method('create') + ->willReturnSelf(); + + $this->orderStatusFactoryMock->method('load') + ->willReturn($this->orderStatusModel); + + $storeMock = $this->createMock(\Magento\Store\Api\Data\StoreInterface::class); + $storeMock->method('getId') + ->willReturn(1); + + $this->storeManagerMock->method('getStore') + ->with($this->anything()) + ->willReturn($storeMock); + + $this->orderStatusModel->setData('store_labels', [1 => 'Pending label']); + $result = $this->salesConfig->getStateStatuses($state, $joinLabels); $this->assertSame($expectedResult, $result); From 0784f5892501bc9a38fc3ac90da2821b2e49f8b9 Mon Sep 17 00:00:00 2001 From: Michiel Gerritsen Date: Sun, 29 Oct 2017 19:16:28 +0100 Subject: [PATCH 7/7] - Renamed the variable name to not exceed the 20 characters limit. - Changed typehint to the correct class. --- .../Sales/Test/Unit/Model/Order/ConfigTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php index ce7cdd546e88b..86419c0c905b6 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php @@ -24,9 +24,9 @@ class ConfigTest extends \PHPUnit\Framework\TestCase protected $orderStatusCollectionFactoryMock; /** - * @var \Magento\Sales\Model\Order\Config|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Sales\Model\Order\StatusFactory|\PHPUnit_Framework_MockObject_MockObject */ - protected $orderStatusFactoryMock; + protected $statusFactoryMock; /** * @var \Magento\Sales\Model\Order\Status @@ -46,7 +46,7 @@ protected function setUp() $this->orderStatusModel = $objectManager->getObject(\Magento\Sales\Model\Order\Status::class, [ 'storeManager' => $this->storeManagerMock, ]); - $this->orderStatusFactoryMock = $this->getMockBuilder(\Magento\Sales\Model\Order\StatusFactory::class) + $this->statusFactoryMock = $this->getMockBuilder(\Magento\Sales\Model\Order\StatusFactory::class) ->setMethods(['load', 'create']) ->getMock(); $this->orderStatusCollectionFactoryMock = $this->createPartialMock( @@ -57,7 +57,7 @@ protected function setUp() ->getObject( \Magento\Sales\Model\Order\Config::class, [ - 'orderStatusFactory' => $this->orderStatusFactoryMock, + 'orderStatusFactory' => $this->statusFactoryMock, 'orderStatusCollectionFactory' => $this->orderStatusCollectionFactoryMock ] ); @@ -170,10 +170,10 @@ public function testGetStatuses($state, $joinLabels, $collectionData, $expectedR ->method('joinStates') ->will($this->returnValue($collectionData)); - $this->orderStatusFactoryMock->method('create') + $this->statusFactoryMock->method('create') ->willReturnSelf(); - $this->orderStatusFactoryMock->method('load') + $this->statusFactoryMock->method('load') ->willReturn($this->orderStatusModel); $storeMock = $this->createMock(\Magento\Store\Api\Data\StoreInterface::class);