diff --git a/app/code/Magento/Catalog/Block/Product/View.php b/app/code/Magento/Catalog/Block/Product/View.php index 8157ab4de07f2a10c9bc5e34541944698f0ab71c..964a444a0aef8b924819598634a0eea36f7ba247 100644 --- a/app/code/Magento/Catalog/Block/Product/View.php +++ b/app/code/Magento/Catalog/Block/Product/View.php @@ -7,7 +7,6 @@ namespace Magento\Catalog\Block\Product; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\Category; -use Magento\Catalog\Model\Product; /** * Product View block @@ -29,6 +28,7 @@ class View extends AbstractProduct implements \Magento\Framework\DataObject\Iden /** * @var \Magento\Framework\Pricing\PriceCurrencyInterface + * @deprecated */ protected $priceCurrency; @@ -225,40 +225,34 @@ class View extends AbstractProduct implements \Magento\Framework\DataObject\Iden $config = [ 'productId' => $product->getId(), 'priceFormat' => $this->_localeFormat->getPriceFormat() - ]; + ]; return $this->_jsonEncoder->encode($config); } $tierPrices = []; $tierPricesList = $product->getPriceInfo()->getPrice('tier_price')->getTierPriceList(); foreach ($tierPricesList as $tierPrice) { - $tierPrices[] = $this->priceCurrency->convert($tierPrice['price']->getValue()); + $tierPrices[] = $tierPrice['price']->getValue(); } $config = [ - 'productId' => $product->getId(), + 'productId' => $product->getId(), 'priceFormat' => $this->_localeFormat->getPriceFormat(), - 'prices' => [ - 'oldPrice' => [ - 'amount' => $this->priceCurrency->convert( - $product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue() - ), + 'prices' => [ + 'oldPrice' => [ + 'amount' => $product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue(), 'adjustments' => [] ], - 'basePrice' => [ - 'amount' => $this->priceCurrency->convert( - $product->getPriceInfo()->getPrice('final_price')->getAmount()->getBaseAmount() - ), + 'basePrice' => [ + 'amount' => $product->getPriceInfo()->getPrice('final_price')->getAmount()->getBaseAmount(), 'adjustments' => [] ], 'finalPrice' => [ - 'amount' => $this->priceCurrency->convert( - $product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue() - ), + 'amount' => $product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue(), 'adjustments' => [] ] ], - 'idSuffix' => '_clone', - 'tierPrices' => $tierPrices + 'idSuffix' => '_clone', + 'tierPrices' => $tierPrices ]; $responseObject = new \Magento\Framework\DataObject(); diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php index 1cc1cceefb39972cfc09d2c7f70463d2f3f76da7..51c68145b24cf5e72061a51647d4b311f39e60bf 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php @@ -92,6 +92,18 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView ); } + /** + * Get cache key informative items. + * + * @return array + */ + public function getCacheKeyInfo() + { + $parentData = parent::getCacheKeyInfo(); + $parentData[] = $this->priceCurrency->getCurrencySymbol(); + return $parentData; + } + /** * Get allowed attributes * diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/CustomOptions.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/CustomOptions.xml index 3252f0178e24195e724b45a17021d0528990070a..09fda73b2a40455d7f144d5a0129e94da5e6f049 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/CustomOptions.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/Product/CustomOptions.xml @@ -358,5 +358,22 @@ </item> </field> </dataset> + + <dataset name="not_required_text_option"> + <field name="0" xsi:type="array"> + <item name="title" xsi:type="string">Test1 option %isolation%</item> + <item name="is_require" xsi:type="string">No</item> + <item name="type" xsi:type="string">Text/Field</item> + <item name="options" xsi:type="array"> + <item name="0" xsi:type="array"> + <item name="price" xsi:type="string">10</item> + <item name="price_type" xsi:type="string">Fixed</item> + <item name="sku" xsi:type="string">sku1_%isolation%</item> + <item name="max_characters" xsi:type="string">45</item> + </item> + </item> + </field> + </dataset> + </repository> </config> diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php new file mode 100644 index 0000000000000000000000000000000000000000..6f3cfc48cdd553fea81ef9681f24e5799273af5e --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php @@ -0,0 +1,77 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\ConfigurableProduct\Test\Constraint; + +use Magento\Catalog\Test\Page\Product\CatalogProductView; +use Magento\Cms\Test\Page\CmsIndex; +use Magento\CurrencySymbol\Test\Fixture\CurrencySymbolEntity; +use Magento\Mtf\Client\BrowserInterface; +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\Mtf\Fixture\InjectableFixture; + +/** + * Assert currency rate applied on configurable product page. + */ +class AssertCurrencyRateAppliedOnProductPage extends AbstractConstraint +{ + /** + * Assert currency rate applied on configurable product page. + * + * @param BrowserInterface $browser + * @param InjectableFixture $product + * @param CatalogProductView $view + * @param CmsIndex $cmsIndex + * @param CurrencySymbolEntity $baseCurrency + * @param array $configuredPrices + * @param string $basePrice + */ + public function processAssert( + BrowserInterface $browser, + InjectableFixture $product, + CatalogProductView $view, + CmsIndex $cmsIndex, + CurrencySymbolEntity $baseCurrency, + array $configuredPrices, + $basePrice + ) { + $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html'); + $this->assertPrice($view, $basePrice); + + $view->getViewBlock()->configure($product); + $this->assertPrice($view, $configuredPrices['custom_currency']); + + $cmsIndex->getCurrencyBlock()->switchCurrency($baseCurrency); + $view->getViewBlock()->configure($product); + $this->assertPrice($view, $configuredPrices['base_currency']); + } + + /** + * Assert price. + * + * @param CatalogProductView $view + * @param string $price + * @param string $currency [optional] + */ + public function assertPrice(CatalogProductView $view, $price, $currency = '') + { + \PHPUnit_Framework_Assert::assertEquals( + $price, + $view->getViewBlock()->getPriceBlock()->getPrice($currency), + 'Wrong price is displayed on Product page.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "Currency rate has been applied correctly on Configurable Product page."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateCurrencyRateTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateCurrencyRateTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ba7729120ae909591f0703c36b83b51f2ea8aa0 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateCurrencyRateTest.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Directory\Test\TestCase\CreateCurrencyRateTest" summary="Create Currency Rate" ticketId="MAGETWO-36824"> + <variation name="CreateCurrencyRateTestVariation3"> + <data name="currencyRate/data/currency_from" xsi:type="string">USD</data> + <data name="currencyRate/data/currency_to" xsi:type="string">UAH</data> + <data name="currencyRate/data/rate" xsi:type="number">2.000</data> + <data name="currencySymbol/dataSet" xsi:type="string">currency_symbols_uah</data> + <data name="product" xsi:type="string">configurableProduct::default</data> + <data name="config/dataset" xsi:type="string">config_base_currency_us_display_currency_uah</data> + <data name="baseCurrency/data/code" xsi:type="string">USD</data> + <data name="basePrice" xsi:type="string">₴80.00</data> + <data name="configuredPrices" xsi:type="array"> + <item name="custom_currency" xsi:type="string">₴80.00</item> + <item name="base_currency" xsi:type="string">$40.00</item> + </data> + <data name="tag" xsi:type="string">test_type:acceptance_test</data> + <constraint name="Magento\Directory\Test\Constraint\AssertCurrencyRateSuccessSaveMessage" /> + <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertCurrencyRateAppliedOnProductPage" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Repository/ConfigData.xml index 9df42574840d692ced41a85979d63de6bf7c467f..3a099d79d370a97b9d75afb419bd36860e559a1a 100644 --- a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Repository/ConfigData.xml +++ b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Repository/ConfigData.xml @@ -48,6 +48,18 @@ <item name="US Dollar" xsi:type="string">USD</item> </item> </field> + <field name="currency/options/base" xsi:type="array"> + <item name="scope" xsi:type="string">currency</item> + <item name="label" xsi:type="string">US Dollar</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="value" xsi:type="string">USD</item> + </field> + <field name="currency/options/default" xsi:type="array"> + <item name="scope" xsi:type="string">currency</item> + <item name="label" xsi:type="string">US Dollar</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="value" xsi:type="string">USD</item> + </field> </dataset> <dataset name="config_base_currency_ch"> diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php b/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php new file mode 100644 index 0000000000000000000000000000000000000000..4b8f3825df8bab870a272e3db20864118db25079 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateAppliedOnProductPage.php @@ -0,0 +1,62 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Test\Constraint; + +use Magento\Catalog\Test\Page\Product\CatalogProductView; +use Magento\Mtf\Client\BrowserInterface; +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\Mtf\Fixture\InjectableFixture; + +/** + * Assert currency rate applied on product page. + */ +class AssertCurrencyRateAppliedOnProductPage extends AbstractConstraint +{ + /** + * Assert currency rate applied on product page. + * + * @param BrowserInterface $browser + * @param InjectableFixture $product + * @param CatalogProductView $view + * @param string $basePrice + */ + public function processAssert( + BrowserInterface $browser, + InjectableFixture $product, + CatalogProductView $view, + $basePrice + ) { + $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html'); + $this->assertPrice($view, $basePrice); + } + + /** + * Assert price. + * + * @param CatalogProductView $view + * @param string $price + * @param string $currency [optional] + */ + public function assertPrice(CatalogProductView $view, $price, $currency = '') + { + \PHPUnit_Framework_Assert::assertEquals( + $price, + $view->getViewBlock()->getPriceBlock()->getPrice($currency), + 'Wrong price is displayed on Product page.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "Currency rate has been applied correctly on Product page."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml new file mode 100644 index 0000000000000000000000000000000000000000..7046437a0f4e2916aaa21e7eca1b902794aa8b9d --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Directory/Test/Repository/ConfigData.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd"> + <repository class="Magento\Config\Test\Repository\ConfigData"> + <dataset name="config_base_currency_us_display_currency_uah"> + <field name="currency/options/allow" xsi:type="array"> + <item name="scope" xsi:type="string">currency</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="value" xsi:type="array"> + <item name="Ukrainian Hryvnia" xsi:type="string">UAH</item> + <item name="US Dollar" xsi:type="string">USD</item> + </item> + </field> + <field name="currency/options/base" xsi:type="array"> + <item name="scope" xsi:type="string">currency</item> + <item name="label" xsi:type="string">US Dollar</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="value" xsi:type="string">USD</item> + </field> + <field name="currency/options/default" xsi:type="array"> + <item name="scope" xsi:type="string">currency</item> + <item name="label" xsi:type="string">Ukrainian Hryvnia</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="value" xsi:type="string">UAH</item> + </field> + </dataset> + </repository> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.php b/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.php index bc40a2ab98f6d913b80736346c7c06ef6f1c7f9e..c7841934035cadcf40b55931f748948427504652 100644 --- a/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.php +++ b/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.php @@ -6,11 +6,12 @@ namespace Magento\Directory\Test\TestCase; +use Magento\Catalog\Test\TestStep\CreateProductsStep; use Magento\Config\Test\Fixture\ConfigData; use Magento\Mtf\TestCase\Injectable; use Magento\Directory\Test\Fixture\CurrencyRate; -use Magento\Catalog\Test\Fixture\CatalogProductSimple; use Magento\CurrencySymbol\Test\Page\Adminhtml\SystemCurrencyIndex; +use Magento\Mtf\TestStep\TestStepFactory; /** * Preconditions: @@ -41,35 +42,48 @@ class CreateCurrencyRateTest extends Injectable */ protected $currencyIndexPage; + /** + * Test step factory. + * + * @var TestStepFactory + */ + private $stepFactory; + /** * Inject data. * * @param SystemCurrencyIndex $currencyIndexPage - * @return void + * @param TestStepFactory $stepFactory */ - public function __inject(SystemCurrencyIndex $currencyIndexPage) + public function __inject(SystemCurrencyIndex $currencyIndexPage, TestStepFactory $stepFactory) { $this->currencyIndexPage = $currencyIndexPage; + $this->stepFactory = $stepFactory; } /** * Create currency rate test. * * @param CurrencyRate $currencyRate - * @param CatalogProductSimple $product - * @param $config - * @return void + * @param ConfigData $config + * @param string $product + * @param array $productData [optional] + * @return array */ - public function test(CurrencyRate $currencyRate, CatalogProductSimple $product, ConfigData $config) + public function test(CurrencyRate $currencyRate, ConfigData $config, $product, array $productData = []) { // Preconditions: - $product->persist(); + $product = $this->stepFactory + ->create(CreateProductsStep::class, ['products' => [$product], 'data' => $productData]) + ->run()['products'][0]; $config->persist(); // Steps: $this->currencyIndexPage->open(); $this->currencyIndexPage->getCurrencyRateForm()->fill($currencyRate); $this->currencyIndexPage->getFormPageActions()->save(); + + return ['product' => $product]; } /** diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.xml b/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.xml index dd42950c18a78175ce51fb7cfce85fe7fbc85a0c..e984cad9ca327aa2a0896e44fc85e365e9f24503 100644 --- a/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.xml +++ b/dev/tests/functional/tests/app/Magento/Directory/Test/TestCase/CreateCurrencyRateTest.xml @@ -13,12 +13,25 @@ <data name="currencyRate/data/currency_to" xsi:type="string">EUR</data> <data name="currencyRate/data/rate" xsi:type="number">0.8</data> <data name="currencySymbol/dataset" xsi:type="string">currency_symbols_eur</data> - <data name="product/dataset" xsi:type="string">simple_10_dollar</data> + <data name="product" xsi:type="string">catalogProductSimple::simple_10_dollar</data> <data name="config/dataset" xsi:type="string">config_currency_symbols_usd_and_eur</data> <data name="basePrice" xsi:type="string">$10.00</data> <data name="convertedPrice" xsi:type="string">€8.00</data> <constraint name="Magento\Directory\Test\Constraint\AssertCurrencyRateSuccessSaveMessage" /> <constraint name="Magento\Directory\Test\Constraint\AssertCurrencyRateAppliedOnCatalogPage" /> </variation> + <variation name="CreateCurrencyRateTestVariation2"> + <data name="currencyRate/data/currency_from" xsi:type="string">USD</data> + <data name="currencyRate/data/currency_to" xsi:type="string">UAH</data> + <data name="currencyRate/data/rate" xsi:type="number">2.000</data> + <data name="currencySymbol/dataSet" xsi:type="string">currency_symbols_uah</data> + <data name="product" xsi:type="string">catalogProductSimple::simple_10_dollar</data> + <data name="productData/0/custom_options/dataset" xsi:type="string">not_required_text_option</data> + <data name="config/dataset" xsi:type="string">config_base_currency_us_display_currency_uah</data> + <data name="basePrice" xsi:type="string">₴20.00</data> + <data name="tag" xsi:type="string">test_type:acceptance_test</data> + <constraint name="Magento\Directory\Test\Constraint\AssertCurrencyRateSuccessSaveMessage" /> + <constraint name="Magento\Directory\Test\Constraint\AssertCurrencyRateAppliedOnProductPage" /> + </variation> </testCase> </config>