From fb6714b6578e8c6cbb389962e13f0ef31d6df12f Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Fri, 19 Dec 2014 13:27:52 +0200 Subject: [PATCH 01/10] MAGETWO-31966: Empty title for success placed order page --- app/code/Magento/Checkout/Controller/Onepage/Success.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Checkout/Controller/Onepage/Success.php b/app/code/Magento/Checkout/Controller/Onepage/Success.php index 9870718aef5ed..b09ac1a2616d7 100644 --- a/app/code/Magento/Checkout/Controller/Onepage/Success.php +++ b/app/code/Magento/Checkout/Controller/Onepage/Success.php @@ -23,6 +23,7 @@ public function execute() //@todo: Refactor it to match CQRS $this->_view->loadLayout(); $this->_view->getLayout()->initMessages(); + $this->_view->getPage()->getConfig()->getTitle()->set(__('Thank you for your purchase!')); $this->_eventManager->dispatch( 'checkout_onepage_controller_success_action', ['order_ids' => [$session->getLastOrderId()]] From 256fc4434eb88ea12e65c04bff7d189a84ed0bc6 Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Fri, 19 Dec 2014 13:29:35 +0200 Subject: [PATCH 02/10] MAGETWO-31966: Empty title for success placed order page --- app/code/Magento/Checkout/Controller/Onepage/Success.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/Controller/Onepage/Success.php b/app/code/Magento/Checkout/Controller/Onepage/Success.php index b09ac1a2616d7..072ed80dc1bb5 100644 --- a/app/code/Magento/Checkout/Controller/Onepage/Success.php +++ b/app/code/Magento/Checkout/Controller/Onepage/Success.php @@ -23,7 +23,7 @@ public function execute() //@todo: Refactor it to match CQRS $this->_view->loadLayout(); $this->_view->getLayout()->initMessages(); - $this->_view->getPage()->getConfig()->getTitle()->set(__('Thank you for your purchase!')); + $this->_view->getPage()->getConfig()->getTitle()->set(__('Success Page')); $this->_eventManager->dispatch( 'checkout_onepage_controller_success_action', ['order_ids' => [$session->getLastOrderId()]] From daa1c7b88309b256ba5ee832d96d92c44490dd3d Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Fri, 19 Dec 2014 17:08:21 +0200 Subject: [PATCH 03/10] MAGETWO-31966: Empty title for success placed order page - move to layout --- app/code/Magento/Checkout/Controller/Onepage/Success.php | 1 - .../Checkout/view/frontend/layout/checkout_onepage_success.xml | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/Controller/Onepage/Success.php b/app/code/Magento/Checkout/Controller/Onepage/Success.php index 072ed80dc1bb5..9870718aef5ed 100644 --- a/app/code/Magento/Checkout/Controller/Onepage/Success.php +++ b/app/code/Magento/Checkout/Controller/Onepage/Success.php @@ -23,7 +23,6 @@ public function execute() //@todo: Refactor it to match CQRS $this->_view->loadLayout(); $this->_view->getLayout()->initMessages(); - $this->_view->getPage()->getConfig()->getTitle()->set(__('Success Page')); $this->_eventManager->dispatch( 'checkout_onepage_controller_success_action', ['order_ids' => [$session->getLastOrderId()]] diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_success.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_success.xml index 539bc06711c18..ef4db4f99e250 100644 --- a/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_success.xml +++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_onepage_success.xml @@ -5,6 +5,9 @@ */ --> + + Success Page + From e7db99eb424eb95f290a71a845f0a2fbc3a7c035 Mon Sep 17 00:00:00 2001 From: Vladyslav Shcherbyna Date: Mon, 22 Dec 2014 16:18:08 +0200 Subject: [PATCH 04/10] MAGETWO-31967: Exception page instead of 404 when edit url for product with required configuration --- .../Checkout/Controller/Cart/Configure.php | 13 +- .../Controller/Cart/ConfigureTest.php | 252 ++++++++++++++++++ 2 files changed, 259 insertions(+), 6 deletions(-) create mode 100644 dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php diff --git a/app/code/Magento/Checkout/Controller/Cart/Configure.php b/app/code/Magento/Checkout/Controller/Cart/Configure.php index 8731afaae8dce..b514eefc5966b 100644 --- a/app/code/Magento/Checkout/Controller/Cart/Configure.php +++ b/app/code/Magento/Checkout/Controller/Cart/Configure.php @@ -43,18 +43,19 @@ public function execute() { // Extract item and product to configure $id = (int)$this->getRequest()->getParam('id'); + $productId = (int)$this->getRequest()->getParam('product_id'); $quoteItem = null; if ($id) { $quoteItem = $this->cart->getQuote()->getItemById($id); } - if (!$quoteItem) { - $this->messageManager->addError(__("We can't find the quote item.")); - $this->_redirect('checkout/cart'); - return; - } - try { + if (!$quoteItem || $productId != $quoteItem->getProduct()->getId()) { + $this->messageManager->addError(__("We can't find the quote item.")); + $this->_redirect('checkout/cart'); + return; + } + $params = new \Magento\Framework\Object(); $params->setCategoryId(false); $params->setConfigureMode(true); diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php new file mode 100644 index 0000000000000..7548af64e8149 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php @@ -0,0 +1,252 @@ +getMockBuilder('Magento\Framework\Event\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $urlMock = $this->getMockBuilder('Magento\Framework\UrlInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $actionFlagMock = $this->getMockBuilder('Magento\Framework\App\ActionFlag') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $viewMock = $this->getMockBuilder('Magento\Framework\App\ViewInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $this->responseMock = $this->getMockBuilder('Magento\Framework\App\ResponseInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface') + ->disableOriginalConstructor() + ->setMethods(['getParam']) + ->getMockForAbstractClass(); + $this->messageManagerMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + $this->redirectMock = $this->getMockBuilder('Magento\Framework\App\Response\RedirectInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Action\Context') + ->setConstructorArgs( + [ + $this->requestMock, + $this->responseMock, + $this->objectManagerMock, + $eventManagerMock, + $urlMock, + $this->redirectMock, + $actionFlagMock, + $viewMock, + $this->messageManagerMock + ] + ) + ->setMethods([]) + ->getMock(); + $this->contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->objectManagerMock); + $this->contextMock->expects($this->any())->method('getRequest')->willReturn($this->requestMock); + $this->contextMock->expects($this->any())->method('getResponse')->willReturn($this->responseMock); + $this->contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messageManagerMock); + $this->contextMock->expects($this->any())->method('getRedirect')->willReturn($this->redirectMock); + $scopeConfig = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') + ->disableOriginalConstructor() + ->getMock(); + $session = $this->getMockBuilder('Magento\Checkout\Model\Session') + ->disableOriginalConstructor() + ->getMock(); + $storeManager = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface') + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $formKeyValidator = $this->getMockBuilder('Magento\Core\App\Action\FormKeyValidator') + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->cartMock = $this->getMockBuilder('Magento\Checkout\Model\Cart') + ->disableOriginalConstructor() + ->getMock(); + $this->resultPageFactoryMock = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory') + ->disableOriginalConstructor() + ->getMock(); + + $this->configureController = new \Magento\Checkout\Controller\Cart\Configure( + $this->contextMock, + $scopeConfig, + $session, + $storeManager, + $formKeyValidator, + $this->cartMock, + $this->resultPageFactoryMock + ); + } + + /** + * Test checks controller call product view and send parameter to it + * + * @return void + */ + public function testPrepareAndRenderCall() + { + $quoteId = 1; + $actualProductId = 1; + $quoteMock = $this->getMockBuilder('Magento\Sales\Model\Quote') + ->disableOriginalConstructor() + ->getMock(); + $quoteItemMock = $this->getMockBuilder('Magento\Sales\Model\Quote\Item') + ->disableOriginalConstructor() + ->getMock(); + $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->disableOriginalConstructor() + ->getMock(); + $viewMock = $this->getMockBuilder('Magento\Catalog\Helper\Product\View') + ->disableOriginalConstructor() + ->getMock(); + $pageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page') + ->disableOriginalConstructor() + ->getMock(); + $buyRequestMock = $this->getMockBuilder('Magento\Framework\Object') + ->disableOriginalConstructor() + ->getMock(); + //expects + $this->requestMock->expects($this->at(0)) + ->method('getParam') + ->with('id') + ->willReturn($quoteId); + $this->requestMock->expects($this->at(1)) + ->method('getParam') + ->with('product_id') + ->willReturn($actualProductId); + $this->cartMock->expects($this->any())->method('getQuote')->willReturn($quoteMock); + + $quoteItemMock->expects($this->exactly(1))->method('getBuyRequest')->willReturn($buyRequestMock); + + $this->resultPageFactoryMock->expects($this->once())->method('create')->willReturn($pageMock); + $this->objectManagerMock->expects($this->at(0)) + ->method('get') + ->with('Magento\Catalog\Helper\Product\View') + ->willReturn($viewMock); + + $viewMock->expects($this->once())->method('prepareAndRender')->with( + $pageMock, + $actualProductId, + $this->configureController, + $this->callback( + function ($subject) use ($buyRequestMock) { + return $subject->getBuyRequest() === $buyRequestMock; + } + ) + )->willReturn($pageMock); + + $quoteMock->expects($this->once())->method('getItemById')->willReturn($quoteItemMock); + $quoteItemMock->expects($this->exactly(2))->method('getProduct')->willReturn($productMock); + + $productMock->expects($this->exactly(2))->method('getId')->willReturn($actualProductId); + + $this->assertSame($pageMock, $this->configureController->execute()); + } + + /** + * Test checks controller redirect user to cart + * if user request product id in cart edit page is not same as quota product id + * + * @return void + */ + public function testRedirectWithWrongProductId() + { + $quotaId = 1; + $productIdInQuota = 1; + $productIdInRequest = null; + $quoteItemMock = $this->getMockBuilder('Magento\Sales\Model\Quote\Item') + ->disableOriginalConstructor() + ->getMock(); + $quoteMock = $this->getMockBuilder('Magento\Sales\Model\Quote') + ->disableOriginalConstructor() + ->getMock(); + $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') + ->disableOriginalConstructor() + ->getMock(); + $this->requestMock->expects($this->at(0)) + ->method('getParam') + ->with('id') + ->willReturn($quotaId); + $this->requestMock->expects($this->at(1)) + ->method('getParam') + ->with('product_id') + ->willReturn($productIdInRequest); + $this->cartMock->expects($this->any())->method('getQuote')->willReturn($quoteMock); + $quoteMock->expects($this->once())->method('getItemById')->willReturn($quoteItemMock); + $quoteItemMock->expects($this->exactly(1))->method('getProduct')->willReturn($productMock); + $productMock->expects($this->exactly(1))->method('getId')->willReturn($productIdInQuota); + $this->messageManagerMock->expects($this->once())->method('addError'); + $this->redirectMock->expects($this->once())->method('redirect')->with($this->responseMock, 'checkout/cart', []); + $this->configureController->execute(); + } +} From e7e2426cfc697cd5f4f82fb8dae6a2136868eaf2 Mon Sep 17 00:00:00 2001 From: Olexandr Lysenko Date: Wed, 14 Jan 2015 19:08:59 +0200 Subject: [PATCH 05/10] MAGETWO-25084: [GITHUB] About ByPercent.php under different currencies #581 --- .../SalesRule/Model/Rule/Action/Discount/ByPercent.php | 4 +++- .../SalesRule/Model/Rule/Action/Discount/ByPercentTest.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php b/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php index afab1eded3d72..7940fc5df8468 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php +++ b/app/code/Magento/SalesRule/Model/Rule/Action/Discount/ByPercent.php @@ -57,7 +57,9 @@ protected function _calculate($rule, $item, $qty, $rulePercent) $discountData->setAmount(($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct); $discountData->setBaseAmount(($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct); $discountData->setOriginalAmount(($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct); - $discountData->setBaseOriginalAmount(($qty * $baseItemOriginalPrice - $item->getDiscountAmount()) * $_rulePct); + $discountData->setBaseOriginalAmount( + ($qty * $baseItemOriginalPrice - $item->getBaseDiscountAmount()) * $_rulePct + ); if (!$rule->getDiscountQty() || $rule->getDiscountQty() > $qty) { $discountPercent = min(100, $item->getDiscountPercent() + $rulePercent); diff --git a/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ByPercentTest.php b/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ByPercentTest.php index 9f911786fed4b..e7c9747626f1e 100644 --- a/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ByPercentTest.php +++ b/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ByPercentTest.php @@ -209,7 +209,7 @@ public function calculateDataProvider() 'amount' => 42, 'baseAmount' => 25.5, 'originalAmount' => 51, - 'baseOriginalAmount' => 46.5, + 'baseOriginalAmount' => 34.5, ], ] ]; From dc9ee3266afd510499f2705b206b610dad395e8d Mon Sep 17 00:00:00 2001 From: Olexandr Lysenko Date: Fri, 16 Jan 2015 16:22:23 +0200 Subject: [PATCH 06/10] MAGETWO-31966: Empty title for success placed order page --- .../view/frontend/layout/multishipping_checkout_success.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_success.xml b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_success.xml index 5ea53255269ed..e9bca9477d829 100644 --- a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_success.xml +++ b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout_success.xml @@ -7,6 +7,9 @@ --> + + Success Page + From 7609552e98d8725f104471655613bce55a1373c2 Mon Sep 17 00:00:00 2001 From: Olexandr Lysenko Date: Fri, 16 Jan 2015 16:51:12 +0200 Subject: [PATCH 07/10] MAGETWO-31967: Exception page instead of 404 when edit url for product with required configuration --- .../Magento/Checkout/Controller/Cart/ConfigureTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php index 7548af64e8149..4a49e870ac26e 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php @@ -1,9 +1,7 @@ Date: Tue, 20 Jan 2015 18:19:41 +0200 Subject: [PATCH 08/10] MAGETWO-15798: Some fields aren't disabled by default on the webiste scope in System configuration --- lib/web/mage/adminhtml/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/mage/adminhtml/form.js b/lib/web/mage/adminhtml/form.js index c6fed3aa5fc4f..e266ece372ac4 100644 --- a/lib/web/mage/adminhtml/form.js +++ b/lib/web/mage/adminhtml/form.js @@ -458,7 +458,7 @@ FormElementDependenceController.prototype = { } } else { $(idTo).show(); - if (isAnInputOrSelect) { + if (isAnInputOrSelect && !isInheritCheckboxChecked) { $(idTo).disabled = false; jQuery('#' + idTo).removeClass('ignore-validate'); } From 4e769429bc4fb702d89633af112fe288a66012f2 Mon Sep 17 00:00:00 2001 From: Olexandr Lysenko Date: Wed, 21 Jan 2015 11:05:22 +0200 Subject: [PATCH 09/10] MAGETWO-31967: Exception page instead of 404 when edit url for product with required configuration --- .../Magento/Checkout/Controller/Cart/ConfigureTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php index 4a49e870ac26e..716661bd022b1 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Controller/Cart/ConfigureTest.php @@ -155,10 +155,10 @@ public function testPrepareAndRenderCall() { $quoteId = 1; $actualProductId = 1; - $quoteMock = $this->getMockBuilder('Magento\Sales\Model\Quote') + $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote') ->disableOriginalConstructor() ->getMock(); - $quoteItemMock = $this->getMockBuilder('Magento\Sales\Model\Quote\Item') + $quoteItemMock = $this->getMockBuilder('Magento\Quote\Model\Quote\Item') ->disableOriginalConstructor() ->getMock(); $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') @@ -222,10 +222,10 @@ public function testRedirectWithWrongProductId() $quotaId = 1; $productIdInQuota = 1; $productIdInRequest = null; - $quoteItemMock = $this->getMockBuilder('Magento\Sales\Model\Quote\Item') + $quoteItemMock = $this->getMockBuilder('Magento\Quote\Model\Quote\Item') ->disableOriginalConstructor() ->getMock(); - $quoteMock = $this->getMockBuilder('Magento\Sales\Model\Quote') + $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote') ->disableOriginalConstructor() ->getMock(); $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product') From 679197bd9019abf152f9c213e76cdd93d352c38e Mon Sep 17 00:00:00 2001 From: Olexandr Lysenko Date: Wed, 21 Jan 2015 11:22:42 +0200 Subject: [PATCH 10/10] MAGETWO-25084: [GITHUB] About ByPercent.php under different currencies #581 --- .../SalesRule/Model/Rule/Action/Discount/ToPercentTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ToPercentTest.php b/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ToPercentTest.php index 7163d2680c9a3..13bec6ff79e5a 100644 --- a/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ToPercentTest.php +++ b/dev/tests/unit/testsuite/Magento/SalesRule/Model/Rule/Action/Discount/ToPercentTest.php @@ -209,7 +209,7 @@ public function calculateDataProvider() 'amount' => 98, 'baseAmount' => 59.5, 'originalAmount' => 119, - 'baseOriginalAmount' => 108.5, + 'baseOriginalAmount' => 80.5, ], ] ];