From 85ce9a2c6ac88214730a8ad56ee58c533fe213a5 Mon Sep 17 00:00:00 2001
From: Cristian Partica <cpartica@ebay.com>
Date: Tue, 5 May 2015 09:59:39 -0500
Subject: [PATCH] 
 FearlessKiwis-MAGETWO-35688-FPT-Final-price-of-Simple-Product-isn-t-recalculated-after-selecting-options-on-product-page

- bamboo pass by reference problem static
- Wee Observer integrity test fix
---
 .../Catalog/Block/Product/View/Options.php     | 12 ++++++++++--
 app/code/Magento/Weee/Model/Observer.php       |  6 +++---
 .../Model/{Observer.php => ObserverTest.php}   | 18 +++++++++++-------
 3 files changed, 24 insertions(+), 12 deletions(-)
 rename app/code/Magento/Weee/Test/Unit/Model/{Observer.php => ObserverTest.php} (84%)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Options.php b/app/code/Magento/Catalog/Block/Product/View/Options.php
index 312e6908383..db3d2a91103 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Options.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Options.php
@@ -219,8 +219,16 @@ class Options extends \Magento\Framework\View\Element\Template
             $config[$option->getId()] = $priceValue;
         }
 
-        //alter the return array from the other modules eg: weee
-        $this->_eventManager->dispatch('catalog_product_option_price_configuration_after', ['config' => &$config]);
+        $configObj = new \Magento\Framework\Object(
+            [
+                'config' => $config,
+            ]
+        );
+
+        //pass the return array encapsulated in an object for the other modules to be able to alter it eg: weee
+        $this->_eventManager->dispatch('catalog_product_option_price_configuration_after', ['configObj' => $configObj]);
+
+        $config=$configObj->getConfig();
 
         return $this->_jsonEncoder->encode($config);
     }
diff --git a/app/code/Magento/Weee/Model/Observer.php b/app/code/Magento/Weee/Model/Observer.php
index 3a09d92d135..9714f24e8fa 100644
--- a/app/code/Magento/Weee/Model/Observer.php
+++ b/app/code/Magento/Weee/Model/Observer.php
@@ -204,7 +204,8 @@ class Observer extends \Magento\Framework\Model\AbstractModel
     public function getPriceConfiguration(\Magento\Framework\Event\Observer $observer)
     {
         if ($this->_weeeData->isEnabled()) {
-            $priceConfig=$observer->getData('config');
+            $priceConfigObj=$observer->getData('configObj');
+            $priceConfig=$priceConfigObj->getConfig();
             if (is_array($priceConfig)) {
                 foreach ($priceConfig as $keyConfigs => $configs) {
                     if (is_array($configs)) {
@@ -217,8 +218,7 @@ class Observer extends \Magento\Framework\Model\AbstractModel
                     }
                 }
             }
-
-            $observer->setData('config', $priceConfig);
+            $priceConfigObj->setConfig($priceConfig);
         }
         return $this;
     }
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Observer.php b/app/code/Magento/Weee/Test/Unit/Model/ObserverTest.php
similarity index 84%
rename from app/code/Magento/Weee/Test/Unit/Model/Observer.php
rename to app/code/Magento/Weee/Test/Unit/Model/ObserverTest.php
index edb2fec221d..63a13abb536 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/Observer.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/ObserverTest.php
@@ -40,6 +40,12 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
             ],
         ];
 
+        $configObj = new \Magento\Framework\Object(
+            [
+                'config' => $testArray,
+            ]
+        );
+
         $testArrayWithWeee=$testArray;
         $testArrayWithWeee[0][0]['prices']['weeePrice']= [
             'amount' => $testArray[0][0]['prices']['finalPrice']['amount'],
@@ -57,12 +63,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
 
         $observerObject->expects($this->any())
             ->method('getData')
-            ->with('config')
-            ->will($this->returnValue($testArray));
-
-        $observerObject->expects($this->once())
-            ->method('setData')
-            ->with('config', $testArrayWithWeee);
+            ->with('configObj')
+            ->will($this->returnValue($configObj));
 
          $objectManager = new ObjectManager($this);
          $weeeObserverObject = $objectManager->getObject(
@@ -71,6 +73,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
                  'weeeData' => $weeHelper,
              ]
          );
-        $weeeObserverObject->getPriceConfiguration($observerObject);
+         $weeeObserverObject->getPriceConfiguration($observerObject);
+
+         $this->assertEquals($testArrayWithWeee, $configObj->getData('config'));
     }
 }
-- 
GitLab