diff --git a/.gitignore b/.gitignore index 9269cefc51fa0178e49324a776bef8b575d7ac08..a5b85031db205be7a5ccdf34fbfb4ead11787617 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ atlassian* /lib/internal/flex/varien/.settings /node_modules /.grunt +/Gruntfile.js +/package.json /pub/media/*.* !/pub/media/.htaccess diff --git a/app/code/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProvider.php b/app/code/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..fd94e18e2cd94b4e4abca81c28d5dcf90c56ff92 --- /dev/null +++ b/app/code/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProvider.php @@ -0,0 +1,84 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Model\Ui\Adminhtml\PayPal; + +use Magento\Braintree\Gateway\Config\PayPal\Config; +use Magento\Braintree\Model\Ui\ConfigProvider; +use Magento\Braintree\Model\Ui\PayPal\ConfigProvider as PayPalConfigProvider; +use Magento\Framework\UrlInterface; +use Magento\Framework\View\Element\Template; +use Magento\Vault\Api\Data\PaymentTokenInterface; +use Magento\Vault\Model\Ui\TokenUiComponentInterfaceFactory; +use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface; + +/** + * Gets Ui component configuration for Braintree PayPal Vault + */ +class TokenUiComponentProvider implements TokenUiComponentProviderInterface +{ + + /** + * @var TokenUiComponentInterfaceFactory + */ + private $componentFactory; + + /** + * @var UrlInterface + */ + private $urlBuilder; + + /** + * @var Config + */ + private $config; + + /** + * @param TokenUiComponentInterfaceFactory $componentFactory + * @param UrlInterface $urlBuilder + * @param Config $config + */ + public function __construct( + TokenUiComponentInterfaceFactory $componentFactory, + UrlInterface $urlBuilder, + Config $config + ) { + $this->componentFactory = $componentFactory; + $this->urlBuilder = $urlBuilder; + $this->config = $config; + } + + /** + * @inheritdoc + */ + public function getComponentForToken(PaymentTokenInterface $paymentToken) + { + $data = json_decode($paymentToken->getTokenDetails() ?: '{}', true); + $data['icon'] = $this->config->getPayPalIcon(); + $component = $this->componentFactory->create( + [ + 'config' => [ + 'code' => PayPalConfigProvider::PAYPAL_VAULT_CODE, + 'nonceUrl' => $this->getNonceRetrieveUrl(), + TokenUiComponentProviderInterface::COMPONENT_DETAILS => $data, + TokenUiComponentProviderInterface::COMPONENT_PUBLIC_HASH => $paymentToken->getPublicHash(), + 'template' => 'Magento_Braintree::form/paypal/vault.phtml' + ], + 'name' => Template::class + ] + ); + + return $component; + } + + /** + * Get url to retrieve payment method nonce + * @return string + */ + private function getNonceRetrieveUrl() + { + return $this->urlBuilder->getUrl(ConfigProvider::CODE . '/payment/getnonce', ['_secure' => true]); + } +} diff --git a/app/code/Magento/Braintree/Model/Ui/Adminhtml/TokenUiComponentProvider.php b/app/code/Magento/Braintree/Model/Ui/Adminhtml/TokenUiComponentProvider.php index 6cfc96ea23d0d158646c4e30be4f63aeb8ca2cd0..420b8365b3ea4f64de1ad6008238c4a706aaa4b6 100644 --- a/app/code/Magento/Braintree/Model/Ui/Adminhtml/TokenUiComponentProvider.php +++ b/app/code/Magento/Braintree/Model/Ui/Adminhtml/TokenUiComponentProvider.php @@ -49,6 +49,7 @@ class TokenUiComponentProvider implements TokenUiComponentProviderInterface $component = $this->componentFactory->create( [ 'config' => [ + 'code' => ConfigProvider::CC_VAULT_CODE, 'nonceUrl' => $this->getNonceRetrieveUrl(), TokenUiComponentProviderInterface::COMPONENT_DETAILS => $data, TokenUiComponentProviderInterface::COMPONENT_PUBLIC_HASH => $paymentToken->getPublicHash(), diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..bdc39cbc5b868b52484cd550c833cfa147e68407 --- /dev/null +++ b/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php @@ -0,0 +1,114 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Test\Unit\Model\Ui\Adminhtml\PayPal; + +use Magento\Braintree\Gateway\Config\PayPal\Config; +use Magento\Braintree\Model\Ui\Adminhtml\PayPal\TokenUiComponentProvider; +use Magento\Framework\UrlInterface; +use Magento\Vault\Api\Data\PaymentTokenInterface; +use Magento\Vault\Model\Ui\TokenUiComponentInterface; +use Magento\Vault\Model\Ui\TokenUiComponentInterfaceFactory; +use PHPUnit_Framework_MockObject_MockObject as MockObject; + +/** + * Contains methods to test PayPal token Ui component provider + */ +class TokenUiComponentProviderTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var TokenUiComponentInterfaceFactory|MockObject + */ + private $componentFactory; + + /** + * @var UrlInterface|MockObject + */ + private $urlBuilder; + + /** + * @var Config|MockObject + */ + private $config; + + /** + * @var TokenUiComponentProvider + */ + private $tokenUiComponentProvider; + + protected function setUp() + { + $this->componentFactory = $this->getMockBuilder(TokenUiComponentInterfaceFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $this->urlBuilder = $this->getMock(UrlInterface::class); + + $this->config = $this->getMockBuilder(Config::class) + ->disableOriginalConstructor() + ->setMethods(['getPayPalIcon']) + ->getMock(); + + $this->tokenUiComponentProvider = new TokenUiComponentProvider( + $this->componentFactory, + $this->urlBuilder, + $this->config + ); + } + + /** + * @covers \Magento\Braintree\Model\Ui\Adminhtml\PayPal\TokenUiComponentProvider::getComponentForToken + */ + public function testGetComponentForToken() + { + $nonceUrl = 'https://payment/adminhtml/nonce/url'; + $payerEmail = 'john.doe@test.com'; + $icon = [ + 'url' => 'https://payment/adminhtml/icon.png', + 'width' => 48, + 'height' => 32 + ]; + + $expected = [ + 'code' => 'vault', + 'nonceUrl' => $nonceUrl, + 'details' => [ + 'payerEmail' => $payerEmail, + 'icon' => $icon + ], + 'template' => 'vault.phtml' + ]; + + $this->config->expects(static::once()) + ->method('getPayPalIcon') + ->willReturn($icon); + + $paymentToken = $this->getMock(PaymentTokenInterface::class); + $paymentToken->expects(static::once()) + ->method('getTokenDetails') + ->willReturn('{"payerEmail":" ' . $payerEmail . '"}'); + $paymentToken->expects(static::once()) + ->method('getPublicHash') + ->willReturn('cmk32dl21l'); + + $this->urlBuilder->expects(static::once()) + ->method('getUrl') + ->willReturn($nonceUrl); + + $tokenComponent = $this->getMock(TokenUiComponentInterface::class); + $tokenComponent->expects(static::once()) + ->method('getConfig') + ->willReturn($expected); + + $this->componentFactory->expects(static::once()) + ->method('create') + ->willReturn($tokenComponent); + + $component = $this->tokenUiComponentProvider->getComponentForToken($paymentToken); + static::assertEquals($tokenComponent, $component); + static::assertEquals($expected, $component->getConfig()); + } +} diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/TokenUiComponentProviderTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/TokenUiComponentProviderTest.php index d1665c71804cfa0c4ce8d1a6d2db96e09afd932c..f159136cf4c460d43b9191b58b536ff646da8b9c 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/TokenUiComponentProviderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/Ui/Adminhtml/TokenUiComponentProviderTest.php @@ -7,10 +7,10 @@ namespace Magento\Braintree\Test\Unit\Model\Ui\Adminhtml; use Magento\Braintree\Model\Ui\Adminhtml\TokenUiComponentProvider; use Magento\Framework\UrlInterface; -use Magento\Framework\View\Element\Template; use Magento\Vault\Api\Data\PaymentTokenInterface; use Magento\Vault\Model\Ui\TokenUiComponentInterface; use Magento\Vault\Model\Ui\TokenUiComponentInterfaceFactory; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class TokenUiComponentProviderTest @@ -19,12 +19,12 @@ class TokenUiComponentProviderTest extends \PHPUnit_Framework_TestCase { /** - * @var TokenUiComponentInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject + * @var TokenUiComponentInterfaceFactory|MockObject */ private $componentFactory; /** - * @var UrlInterface|\PHPUnit_Framework_MockObject_MockObject + * @var UrlInterface|MockObject */ private $urlBuilder; @@ -59,6 +59,7 @@ class TokenUiComponentProviderTest extends \PHPUnit_Framework_TestCase $expirationDate = '12/2015'; $expected = [ + 'code' => 'vault', 'nonceUrl' => $nonceUrl, 'details' => [ 'type' => $type, diff --git a/app/code/Magento/Braintree/etc/adminhtml/di.xml b/app/code/Magento/Braintree/etc/adminhtml/di.xml index f252b977f20bd8b8616c7ddd90c08dd7ad0c5435..d154aabbb01b5cdd9db9beba05481c167fbec65d 100644 --- a/app/code/Magento/Braintree/etc/adminhtml/di.xml +++ b/app/code/Magento/Braintree/etc/adminhtml/di.xml @@ -47,6 +47,7 @@ <arguments> <argument name="tokenUiComponentProviders" xsi:type="array"> <item name="braintree" xsi:type="object">Magento\Braintree\Model\Ui\Adminhtml\TokenUiComponentProvider</item> + <item name="braintree_paypal" xsi:type="object">Magento\Braintree\Model\Ui\Adminhtml\PayPal\TokenUiComponentProvider</item> </argument> </arguments> </type> diff --git a/app/code/Magento/Braintree/etc/config.xml b/app/code/Magento/Braintree/etc/config.xml index 095a8419c8529f20beb5f9a2be4499bade1f1301..bf19324ae7a0225b82106f26f291462b9d1e0b12 100644 --- a/app/code/Magento/Braintree/etc/config.xml +++ b/app/code/Magento/Braintree/etc/config.xml @@ -71,7 +71,8 @@ </braintree_cc_vault> <braintree_paypal_vault> <model>BraintreePayPalVaultFacade</model> - <title>Vault Token (Braintree PayPal)</title> + <title>Stored Accounts (Braintree PayPal)</title> + <can_use_internal>1</can_use_internal> </braintree_paypal_vault> </payment> </default> diff --git a/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_index.xml b/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_index.xml index 571c5ededeb993fd0e45d91cc2d1512d531179de..5e4f36e1c1fb4d4916e620cb440829357b1071ea 100644 --- a/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_index.xml +++ b/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_index.xml @@ -18,6 +18,10 @@ <argument name="method" xsi:type="string">braintree_cc_vault</argument> <argument name="template" xsi:type="string">Magento_Vault::form/vault.phtml</argument> </action> + <action method="setMethodFormTemplate"> + <argument name="method" xsi:type="string">braintree_paypal_vault</argument> + <argument name="template" xsi:type="string">Magento_Vault::form/vault.phtml</argument> + </action> </referenceBlock> <referenceBlock name="content"> <block name="braintree_payment_script" diff --git a/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_load_block_billing_method.xml b/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_load_block_billing_method.xml index 68e0abc0cd009d9c2a30dff4cb545aa1b85f151c..579b82c61f690ed59bf94423e4aab00348a1546e 100644 --- a/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_load_block_billing_method.xml +++ b/app/code/Magento/Braintree/view/adminhtml/layout/sales_order_create_load_block_billing_method.xml @@ -18,6 +18,10 @@ <argument name="method" xsi:type="string">braintree_cc_vault</argument> <argument name="template" xsi:type="string">Magento_Vault::form/vault.phtml</argument> </action> + <action method="setMethodFormTemplate"> + <argument name="method" xsi:type="string">braintree_paypal_vault</argument> + <argument name="template" xsi:type="string">Magento_Vault::form/vault.phtml</argument> + </action> </referenceBlock> </body> </page> \ No newline at end of file diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form/paypal/vault.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form/paypal/vault.phtml new file mode 100644 index 0000000000000000000000000000000000000000..22930bbc656660efb6f5981fd2fb8e137ac591df --- /dev/null +++ b/app/code/Magento/Braintree/view/adminhtml/templates/form/paypal/vault.phtml @@ -0,0 +1,30 @@ +<?php +use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface; +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +// @codingStandardsIgnoreFile + +/** @var \Magento\Framework\View\Element\Template $block */ +$details = $block->getData(TokenUiComponentProviderInterface::COMPONENT_DETAILS); +$icon = $details['icon']; +$id = $block->escapeHtml($block->getData('id')); +?> +<div data-mage-init='{ + "Magento_Braintree/js/vault": { + "container": "payment_<?php /* @noEscape */ echo $id; ?>", + "publicHash": "<?php echo $block->escapeHtml($block->getData(TokenUiComponentProviderInterface::COMPONENT_PUBLIC_HASH)); ?>", + "code": "<?php echo $block->escapeHtml($block->getData('code')); ?>", + "nonceUrl": "<?php echo $block->escapeUrl($block->getData('nonceUrl')); ?>" + } + }' id="payment_<?php /* @noEscape */ echo $id;?>" class="admin__field"> + <div class="admin__field-control control"> + <input type="radio" id="token_switcher_<?php /* @noEscape */ echo $id; ?>" name="payment[token_switcher]"/> + <img src="<?php echo $block->escapeUrl($icon['url']); ?>" + width="<?php echo $block->escapeHtml($icon['width']); ?>" + height="<?php echo $block->escapeHtml($icon['height']); ?>" + class="payment-icon" > + <span><?php echo $block->escapeHtml($details['payerEmail']); ?></span> + </div> +</div> diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form/vault.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form/vault.phtml index 38114618847259c143ec2794d13ccaf5a5ff1349..001422d4bf911a40094d2174f9bb346866175c59 100644 --- a/app/code/Magento/Braintree/view/adminhtml/templates/form/vault.phtml +++ b/app/code/Magento/Braintree/view/adminhtml/templates/form/vault.phtml @@ -7,7 +7,7 @@ use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface; // @codingStandardsIgnoreFile /** @var \Magento\Framework\View\Element\Template $block */ -$details = $block->getData('details'); +$details = $block->getData(TokenUiComponentProviderInterface::COMPONENT_DETAILS); $icon = $block->getData('icons')[$details['type']]; $id = $block->escapeHtml($block->getData('id')); ?> @@ -15,6 +15,7 @@ $id = $block->escapeHtml($block->getData('id')); "Magento_Braintree/js/vault": { "container": "payment_<?php /* @noEscape */ echo $id; ?>", "publicHash": "<?php echo $block->escapeHtml($block->getData(TokenUiComponentProviderInterface::COMPONENT_PUBLIC_HASH)); ?>", + "code": "<?php echo $block->escapeHtml($block->getData('code')); ?>", "nonceUrl": "<?php echo $block->escapeUrl($block->getData('nonceUrl')); ?>" } }' id="payment_<?php /* @noEscape */ echo $id;?>" class="admin__field"> diff --git a/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js b/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js index fcff173e7fcd44f714a6ec9f4282f838b04654aa..ea832acb537e0051e34f976c050c9b8bd7d289b7 100644 --- a/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js +++ b/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js @@ -14,7 +14,8 @@ define([ return Class.extend({ defaults: { $selector: null, - selector: 'edit_form' + selector: 'edit_form', + $container: null }, /** @@ -25,17 +26,18 @@ define([ var self = this; self.$selector = $('#' + self.selector); + self.$container = $('#' + self.container); self.$selector.on( 'setVaultNotActive', function () { - self.$selector.off('submitOrder.braintree_vault'); + self.$selector.off('submitOrder.' + self.getCode()); } ); - this._super(); + self._super(); - this.initEventHandlers(); + self.initEventHandlers(); - return this; + return self; }, /** @@ -43,14 +45,14 @@ define([ * @returns {String} */ getCode: function () { - return 'braintree'; + return this.code; }, /** * Init event handlers */ initEventHandlers: function () { - $('#' + this.container).find('[name="payment[token_switcher]"]') + $(this.$container).find('[name="payment[token_switcher]"]') .on('click', this.selectPaymentMethod.bind(this)); }, @@ -66,7 +68,7 @@ define([ * Enable form event listeners */ enableEventListeners: function () { - this.$selector.on('submitOrder.braintree_vault', this.submitOrder.bind(this)); + this.$selector.on('submitOrder.' + this.getCode(), this.submitOrder.bind(this)); }, /** @@ -129,7 +131,7 @@ define([ this.createPublicHashSelector(); this.$selector.find('[name="payment[public_hash]"]').val(this.publicHash); - this.$selector.find('#braintree_nonce').val(nonce); + this.$container.find('#' + this.getNonceSelectorName()).val(nonce); }, /** @@ -138,16 +140,16 @@ define([ createPublicHashSelector: function () { var $input; - if (this.$selector.find('#braintree_nonce').size() === 0) { + if (this.$container.find('#' + this.getNonceSelectorName()).size() === 0) { $input = $('<input>').attr( { type: 'hidden', - id: 'braintree_nonce', + id: this.getNonceSelectorName(), name: 'payment[payment_method_nonce]' } ); - $input.appendTo(this.$selector); + $input.appendTo(this.$container); $input.prop('disabled', false); } }, @@ -160,6 +162,14 @@ define([ alert({ content: message }); + }, + + /** + * Get selector name for nonce input + * @returns {String} + */ + getNonceSelectorName: function () { + return 'nonce_' + this.getCode(); } }); }); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/payment/method-group.js b/app/code/Magento/Checkout/view/frontend/web/js/model/payment/method-group.js new file mode 100644 index 0000000000000000000000000000000000000000..4236a215d73596b918d782a2773698e5fa25234f --- /dev/null +++ b/app/code/Magento/Checkout/view/frontend/web/js/model/payment/method-group.js @@ -0,0 +1,31 @@ +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'uiElement', + 'mage/translate' +], function (Element, $t) { + 'use strict'; + + var DEFAULT_GROUP_ALIAS = 'default'; + + return Element.extend({ + defaults: { + alias: DEFAULT_GROUP_ALIAS, + title: $t('Payment Method'), + sortOrder: 100, + displayArea: 'payment-methods-items-${ $.alias }' + }, + + /** + * Checks if group instance is default + * + * @returns {Boolean} + */ + isDefault: function () { + return this.alias === DEFAULT_GROUP_ALIAS; + } + }); +}); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js index 18f6b8479c229326e28e9c02157d6a39e34625ee..918d305ee031b1d2c96eb6b246a765a16f6c8446 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js @@ -10,14 +10,22 @@ define([ 'Magento_Checkout/js/model/payment/method-list', 'Magento_Checkout/js/model/payment/renderer-list', 'uiLayout', - 'Magento_Checkout/js/model/checkout-data-resolver' -], function (_, ko, utils, Component, paymentMethods, rendererList, layout, checkoutDataResolver) { + 'Magento_Checkout/js/model/checkout-data-resolver', + 'mage/translate', + 'uiRegistry' +], function (_, ko, utils, Component, paymentMethods, rendererList, layout, checkoutDataResolver, $t, registry) { 'use strict'; return Component.extend({ defaults: { template: 'Magento_Checkout/payment-methods/list', - visible: paymentMethods().length > 0 + visible: paymentMethods().length > 0, + configDefaultGroup: { + name: 'methodGroup', + component: 'Magento_Checkout/js/model/payment/method-group' + }, + paymentGroupsList: [], + defaultGroupTitle: $t('Select a new payment method') }, /** @@ -26,7 +34,7 @@ define([ * @returns {Component} Chainable. */ initialize: function () { - this._super().initChildren(); + this._super().initDefaulGroup().initChildren(); paymentMethods.subscribe( function (changes) { checkoutDataResolver.resolvePaymentMethod(); @@ -47,6 +55,27 @@ define([ return this; }, + /** @inheritdoc */ + initObservable: function () { + this._super(). + observe(['paymentGroupsList']); + + return this; + }, + + /** + * Creates default group + * + * @returns {Component} Chainable. + */ + initDefaulGroup: function() { + layout([ + this.configDefaultGroup + ]); + + return this; + }, + /** * Create renders for child payment methods. * @@ -77,7 +106,7 @@ define([ rendererTemplate = { parent: '${ $.$data.parentName }', name: '${ $.$data.name }', - displayArea: 'payment-method-items', + displayArea: payment.displayArea, component: payment.component }; rendererComponent = utils.template(rendererTemplate, templateData); @@ -95,49 +124,105 @@ define([ * @param {Object} paymentMethodData */ createRenderer: function (paymentMethodData) { - var isRendererForMethod = false; + var isRendererForMethod = false, + currentGroup; + + registry.get(this.configDefaultGroup.name, function (defaultGroup) { + _.each(rendererList(), function (renderer) { - _.find(rendererList(), function (renderer) { + if (renderer.hasOwnProperty('typeComparatorCallback') && + typeof renderer.typeComparatorCallback == 'function' + ) { + isRendererForMethod = renderer.typeComparatorCallback(renderer.type, paymentMethodData.method); + } else { + isRendererForMethod = renderer.type === paymentMethodData.method; + } - if (renderer.hasOwnProperty('typeComparatorCallback') && - typeof renderer.typeComparatorCallback == 'function' - ) { - isRendererForMethod = renderer.typeComparatorCallback(renderer.type, paymentMethodData.method); - } else { - isRendererForMethod = renderer.type === paymentMethodData.method; - } + if (isRendererForMethod) { + currentGroup = renderer.group ? renderer.group : defaultGroup; - if (isRendererForMethod) { - layout( - [ + this.collectPaymentGroups(currentGroup); + + layout([ this.createComponent( { config: renderer.config, component: renderer.component, name: renderer.type, method: paymentMethodData.method, - item: paymentMethodData + item: paymentMethodData, + displayArea: currentGroup.displayArea } - ) - ] - ); - } + )]); + } + }.bind(this)); }.bind(this)); }, + /** + * Collects unique groups of available payment methods + * + * @param {Object} group + */ + collectPaymentGroups: function (group) { + var groupsList = this.paymentGroupsList(), + isGroupExists = _.some(groupsList, function (existsGroup) { + return existsGroup.alias === group.alias; + }); + + if (!isGroupExists) { + groupsList.push(group); + groupsList = _.sortBy(groupsList, function (existsGroup) { + return existsGroup.sortOrder; + }); + this.paymentGroupsList(groupsList); + } + }, + + /** + * Returns payment group title + * + * @param {Object} group + * @returns {String} + */ + getGroupTitle: function (group) { + var title = group().title; + + if (group().isDefault() && this.paymentGroupsList().length > 1) { + title = this.defaultGroupTitle; + } + + return title + ':'; + }, + + /** + * Checks if at least one payment method available + * + * @returns {String} + */ + isPaymentMethodsAvailable: function () { + return _.some(this.paymentGroupsList(), function (group) { + return this.getRegion(group.displayArea)().length; + }, this); + }, + /** * Remove view renderer. * * @param {String} paymentMethodCode */ removeRenderer: function (paymentMethodCode) { - var items = this.getRegion('payment-method-items'); + var items; + + _.each(this.paymentGroupsList(), function (group) { + items = this.getRegion(group.displayArea); - _.find(items(), function (value) { - if (value.item.method.indexOf(paymentMethodCode) === 0) { - value.disposeSubscriptions(); - value.destroy(); - } + _.find(items(), function (value) { + if (value.item.method.indexOf(paymentMethodCode) === 0) { + value.disposeSubscriptions(); + value.destroy(); + } + }); }, this); } }); diff --git a/app/code/Magento/Checkout/view/frontend/web/template/payment-methods/list.html b/app/code/Magento/Checkout/view/frontend/web/template/payment-methods/list.html index 66769f37386d6402c3d71d19f7f08ef6d88ca8b7..f6c41c62eeca62fcd89e0d85715863806d95e9f8 100644 --- a/app/code/Magento/Checkout/view/frontend/web/template/payment-methods/list.html +++ b/app/code/Magento/Checkout/view/frontend/web/template/payment-methods/list.html @@ -4,9 +4,19 @@ * See COPYING.txt for license details. */ --> -<div class="items payment-methods"> - <!-- ko foreach: { data: getRegion('payment-method-items'), as: 'element'} --> - <!-- ko template: element.getTemplate() --><!-- /ko --> - <!-- /ko --> +<div if="isPaymentMethodsAvailable()" + class="items payment-methods"> + <div repeat="foreach: paymentGroupsList, item: '$group'" + class="payment-group"> + <div if="getRegion($group().displayArea)().length" + translate="getGroupTitle($group)" + class="step-title" + data-role="title"> + </div> + <each args="data: getRegion($group().displayArea), as: 'method'" render=""/> + </div> +</div> +<div ifnot="isPaymentMethodsAvailable()" + class="no-payments-block" + translate="'No Payment Methods'"> </div> -<!-- ko ifnot: getRegion('payment-method-items')().length > 0 --><div class="no-payments-block"><!-- ko i18n: 'No Payment Methods'--><!-- /ko --></div><!-- /ko --> diff --git a/app/code/Magento/Checkout/view/frontend/web/template/payment.html b/app/code/Magento/Checkout/view/frontend/web/template/payment.html index 292ece611e6b664f04c4ee78a8ace01d03fb49f5..46467839da3fb08eb994d61b0d2aaa48912ada87 100644 --- a/app/code/Magento/Checkout/view/frontend/web/template/payment.html +++ b/app/code/Magento/Checkout/view/frontend/web/template/payment.html @@ -5,7 +5,6 @@ */ --> <li id="payment" role="presentation" class="checkout-payment-method" data-bind="fadeVisible: isVisible"> - <div class="step-title" data-bind="i18n: title" data-role="title"></div> <div id="checkout-step-payment" class="step-content" data-role="content" diff --git a/app/code/Magento/Paypal/Model/Payflow/Transparent.php b/app/code/Magento/Paypal/Model/Payflow/Transparent.php index b5803c5ace3925b75e81df43992f714a74ed9905..f65edd71daa5b82b5191cd20a7f01a4b90b79b8c 100644 --- a/app/code/Magento/Paypal/Model/Payflow/Transparent.php +++ b/app/code/Magento/Paypal/Model/Payflow/Transparent.php @@ -186,6 +186,7 @@ class Transparent extends Payflowpro implements TransparentInterface $this->createPaymentToken($payment, $token); $payment->unsAdditionalInformation(self::CC_DETAILS); + $payment->unsAdditionalInformation(self::PNREF); return $this; } diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php index 2d757147cec6a89dc1b6b6b28f283fd29b98f640..e2d5d348dda2cf96da1789806a43814c8960c49a 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php @@ -428,6 +428,13 @@ class TransparentTest extends \PHPUnit_Framework_TestCase ->method('setVaultPaymentToken') ->with($paymentTokenMock); + $this->paymentMock->expects($this->at(8)) + ->method('unsAdditionalInformation') + ->with(Transparent::CC_DETAILS); + $this->paymentMock->expects($this->at(9)) + ->method('unsAdditionalInformation') + ->with(Transparent::PNREF); + $this->assertSame($this->object, $this->object->authorize($this->paymentMock, 33)); } } diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js index be312c71f1fb20a1a2140765d598d8567bfaf648..b640b131aaf6fcb52ca883da80de65ab0cd75dd3 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js @@ -161,7 +161,6 @@ define([ defaultPlaceholder: $t('Select...'), lotPlaceholders: $t('Selected') }, - hoverElIndex: null, separator: 'optgroup', listens: { listVisible: 'cleanHoveredElement', @@ -295,7 +294,6 @@ define([ this._super(); this.observe([ 'listVisible', - 'hoverElIndex', 'placeholder', 'multiselectFocus', 'options', @@ -539,7 +537,7 @@ define([ }, /** - * Clean hoverElIndex variable + * Clean hoveredElement variable * * @returns {Object} Chainable */ diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js index 49133721369c85dba954788626875d1a13c26a1e..493b8c78f0cdfbf56f43c8775ab2fcd0edf5ff64 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js @@ -268,6 +268,14 @@ define([ _.each(grouped, this.updateRegion, this); + _.each(this.regions, function (items) { + var hasObsoleteComponents = items().length && !_.intersection(_elems, items()).length; + + if (hasObsoleteComponents) { + items.removeAll(); + } + }); + this.elems(_elems); return this; diff --git a/app/code/Magento/Vault/Model/Method/Vault.php b/app/code/Magento/Vault/Model/Method/Vault.php index 41a2d6b0e26efcd1c6745f5d5fbc2842ae6c8513..ca6fe06f91eef8ce52e5f0c5b0cdbd7f439f5710 100644 --- a/app/code/Magento/Vault/Model/Method/Vault.php +++ b/app/code/Magento/Vault/Model/Method/Vault.php @@ -5,17 +5,16 @@ */ namespace Magento\Vault\Model\Method; -use Magento\Framework\DataObject; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Payment\Gateway\Command; -use Magento\Sales\Api\Data\OrderPaymentExtensionInterfaceFactory; use Magento\Payment\Gateway\Config\ValueHandlerPoolInterface; use Magento\Payment\Gateway\ConfigFactoryInterface; use Magento\Payment\Gateway\ConfigInterface; use Magento\Payment\Model\InfoInterface; use Magento\Payment\Model\MethodInterface; use Magento\Payment\Observer\AbstractDataAssignObserver; +use Magento\Sales\Api\Data\OrderPaymentExtensionInterfaceFactory; use Magento\Sales\Api\Data\OrderPaymentInterface; use Magento\Sales\Model\Order\Payment; use Magento\Vault\Api\Data\PaymentTokenInterface; @@ -275,7 +274,12 @@ final class Vault implements VaultPaymentInterface */ public function canUseInternal() { - return $this->getVaultProvider()->canUseInternal(); + $isInternalAllowed = $this->getConfiguredValue('can_use_internal'); + // if config has't been specified for Vault, need to check payment provider option + if ($isInternalAllowed === null) { + return $this->getVaultProvider()->canUseInternal(); + } + return (bool) $isInternalAllowed; } /** diff --git a/app/code/Magento/Vault/Model/Ui/Adminhtml/TokensConfigProvider.php b/app/code/Magento/Vault/Model/Ui/Adminhtml/TokensConfigProvider.php index 98e7728f732fe51bcea79e555c5333a9cbd86684..f3a2cbfa78739d0ee748b5e38a01176ae6ed7e67 100644 --- a/app/code/Magento/Vault/Model/Ui/Adminhtml/TokensConfigProvider.php +++ b/app/code/Magento/Vault/Model/Ui/Adminhtml/TokensConfigProvider.php @@ -221,9 +221,11 @@ final class TokensConfigProvider */ private function getPaymentTokenEntityId() { - return $this->getPaymentTokenManagement() - ->getByPaymentId($this->getOrderPaymentEntityId()) - ->getEntityId(); + $paymentToken = $this->getPaymentTokenManagement()->getByPaymentId($this->getOrderPaymentEntityId()); + if ($paymentToken === null) { + throw new NoSuchEntityException(__('No available payment tokens for specified order payment.')); + } + return $paymentToken->getEntityId(); } /** diff --git a/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php b/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php index 8bded498dab765a442ced658ba2562db81ca5b7e..ade93c9367858eafb1cfdf64035d2d4f9354e8a0 100644 --- a/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php +++ b/app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php @@ -8,6 +8,8 @@ namespace Magento\Vault\Test\Unit\Model\Method; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Payment\Gateway\Command\CommandManagerInterface; use Magento\Payment\Gateway\Command\CommandManagerPoolInterface; +use Magento\Payment\Gateway\Config\ValueHandlerInterface; +use Magento\Payment\Gateway\Config\ValueHandlerPoolInterface; use Magento\Payment\Gateway\ConfigInterface; use Magento\Payment\Model\InfoInterface; use Magento\Payment\Model\MethodInterface; @@ -19,6 +21,7 @@ use Magento\Vault\Api\Data\PaymentTokenInterface; use Magento\Vault\Api\PaymentTokenManagementInterface; use Magento\Vault\Model\Method\Vault; use Magento\Vault\Model\VaultPaymentInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class VaultTest @@ -31,9 +34,15 @@ class VaultTest extends \PHPUnit_Framework_TestCase */ private $objectManager; + /** + * @var MethodInterface|MockObject + */ + private $vaultProvider; + public function setUp() { $this->objectManager = new ObjectManager($this); + $this->vaultProvider = $this->getMock(MethodInterface::class); } /** @@ -137,8 +146,6 @@ class VaultTest extends \PHPUnit_Framework_TestCase $commandManagerPool = $this->getMock(CommandManagerPoolInterface::class); $commandManager = $this->getMock(CommandManagerInterface::class); - $vaultProvider = $this->getMock(MethodInterface::class); - $tokenManagement = $this->getMock(PaymentTokenManagementInterface::class); $token = $this->getMock(PaymentTokenInterface::class); @@ -161,7 +168,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase ->method('setVaultPaymentToken') ->with($token); - $vaultProvider->expects(static::atLeastOnce()) + $this->vaultProvider->expects(static::atLeastOnce()) ->method('getCode') ->willReturn($vaultProviderCode); $commandManagerPool->expects(static::once()) @@ -188,7 +195,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase [ 'tokenManagement' => $tokenManagement, 'commandManagerPool' => $commandManagerPool, - 'vaultProvider' => $vaultProvider + 'vaultProvider' => $this->vaultProvider ] ); $model->authorize($paymentModel, $amount); @@ -235,10 +242,9 @@ class VaultTest extends \PHPUnit_Framework_TestCase { $storeId = 1; $quote = $this->getMockForAbstractClass(CartInterface::class); - $vaultProvider = $this->getMockForAbstractClass(MethodInterface::class); $config = $this->getMockForAbstractClass(ConfigInterface::class); - $vaultProvider->expects(static::once()) + $this->vaultProvider->expects(static::once()) ->method('isAvailable') ->with($quote) ->willReturn($isAvailableProvider); @@ -255,7 +261,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase /** @var Vault $model */ $model = $this->objectManager->getObject(Vault::class, [ 'config' => $config, - 'vaultProvider' => $vaultProvider + 'vaultProvider' => $this->vaultProvider ]); $actual = $model->isAvailable($quote); static::assertEquals($expected, $actual); @@ -281,11 +287,9 @@ class VaultTest extends \PHPUnit_Framework_TestCase public function testIsAvailableWithoutQuote() { $quote = null; - - $vaultProvider = $this->getMockForAbstractClass(MethodInterface::class); $config = $this->getMockForAbstractClass(ConfigInterface::class); - $vaultProvider->expects(static::once()) + $this->vaultProvider->expects(static::once()) ->method('isAvailable') ->with($quote) ->willReturn(true); @@ -298,8 +302,60 @@ class VaultTest extends \PHPUnit_Framework_TestCase /** @var Vault $model */ $model = $this->objectManager->getObject(Vault::class, [ 'config' => $config, - 'vaultProvider' => $vaultProvider + 'vaultProvider' => $this->vaultProvider ]); static::assertFalse($model->isAvailable($quote)); } + + /** + * @covers \Magento\Vault\Model\Method\Vault::canUseInternal + * @param bool|null $configValue + * @param bool|null $paymentValue + * @param bool $expected + * @dataProvider internalUsageDataProvider + */ + public function testCanUseInternal($configValue, $paymentValue, $expected) + { + $handlerPool = $this->getMock(ValueHandlerPoolInterface::class); + $handler = $this->getMock(ValueHandlerInterface::class); + + $handlerPool->expects(static::once()) + ->method('get') + ->with('can_use_internal') + ->willReturn($handler); + + $handler->expects(static::once()) + ->method('handle') + ->with(['field' => 'can_use_internal'], null) + ->willReturn($configValue); + + $this->vaultProvider->expects(static::any()) + ->method('canUseInternal') + ->willReturn($paymentValue); + + /** @var Vault $model */ + $model = $this->objectManager->getObject(Vault::class, [ + 'vaultProvider' => $this->vaultProvider, + 'valueHandlerPool' => $handlerPool, + ]); + static::assertEquals($expected, $model->canUseInternal()); + } + + /** + * Get list of variations for testing canUseInternal method + * @return array + */ + public function internalUsageDataProvider() + { + return [ + ['configValue' => true, 'paymentValue' => true, 'expected' => true], + ['configValue' => true, 'paymentValue' => null, 'expected' => true], + ['configValue' => true, 'paymentValue' => false, 'expected' => true], + ['configValue' => false, 'paymentValue' => true, 'expected' => false], + ['configValue' => false, 'paymentValue' => false, 'expected' => false], + ['configValue' => null, 'paymentValue' => true, 'expected' => true], + ['configValue' => null, 'paymentValue' => false, 'expected' => false], + ['configValue' => null, 'paymentValue' => null, 'expected' => false], + ]; + } } diff --git a/app/code/Magento/Vault/Test/Unit/Model/Ui/Adminhtml/TokensConfigProviderTest.php b/app/code/Magento/Vault/Test/Unit/Model/Ui/Adminhtml/TokensConfigProviderTest.php index 38948b004eebc358ce82eddf8bf2af88e1685c8c..bbac491386c44a231a1cc650a2ba3acfca791282 100644 --- a/app/code/Magento/Vault/Test/Unit/Model/Ui/Adminhtml/TokensConfigProviderTest.php +++ b/app/code/Magento/Vault/Test/Unit/Model/Ui/Adminhtml/TokensConfigProviderTest.php @@ -13,6 +13,7 @@ use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Framework\Exception\InputException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Intl\DateTimeFactory; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Framework\TestFramework\Unit\Matcher\MethodInvokedAtIndex; use Magento\Payment\Helper\Data; use Magento\Sales\Api\Data\OrderInterface; @@ -29,7 +30,6 @@ use Magento\Vault\Model\Ui\TokenUiComponentInterface; use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface; use Magento\Vault\Model\VaultPaymentInterface; use PHPUnit_Framework_MockObject_MockObject as MockObject; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; /** * Class TokensConfigProviderTest @@ -104,11 +104,21 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase */ private $orderRepository; + /** + * @var TokenUiComponentProviderInterface|MockObject + */ + private $tokenComponentProvider; + /** * @var ObjectManager */ private $objectManager; + /** + * @var TokensConfigProvider + */ + private $configProvider; + protected function setUp() { $this->paymentTokenRepository = $this->getMockBuilder(PaymentTokenRepositoryInterface::class) @@ -138,6 +148,38 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase $this->vaultPayment = $this->getMockForAbstractClass(VaultPaymentInterface::class); $this->objectManager = new ObjectManager($this); + + $this->initStoreMock(); + + $this->tokenComponentProvider = $this->getMock(TokenUiComponentProviderInterface::class); + + $this->configProvider = new TokensConfigProvider( + $this->session, + $this->paymentTokenRepository, + $this->filterBuilder, + $this->searchCriteriaBuilder, + $this->storeManager, + $this->dateTimeFactory, + [ + self::VAULT_PROVIDER_CODE => $this->tokenComponentProvider + ] + ); + + $this->objectManager->setBackwardCompatibleProperty( + $this->configProvider, + 'paymentDataHelper', + $this->paymentDataHelper + ); + $this->objectManager->setBackwardCompatibleProperty( + $this->configProvider, + 'paymentTokenManagement', + $this->paymentTokenManagement + ); + $this->objectManager->setBackwardCompatibleProperty( + $this->configProvider, + 'orderRepository', + $this->orderRepository + ); } /** @@ -147,8 +189,6 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase { $customerId = 1; - $this->initStoreMock(); - $this->session->expects(static::once()) ->method('getCustomerId') ->willReturn($customerId); @@ -170,7 +210,7 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase $token = $this->getMockBuilder(PaymentTokenInterface::class) ->getMockForAbstractClass(); - list($tokenUiComponent, $tokenUiComponentProvider) = $this->getTokenUiComponentProvider($token); + $tokenUiComponent = $this->getTokenUiComponentProvider($token); $searchCriteria = $this->getSearchCriteria($customerId, self::ENTITY_ID, self::VAULT_PROVIDER_CODE); @@ -197,25 +237,7 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase ->method('getItems') ->willReturn([$token]); - $configProvider = new TokensConfigProvider( - $this->session, - $this->paymentTokenRepository, - $this->filterBuilder, - $this->searchCriteriaBuilder, - $this->storeManager, - $this->dateTimeFactory, - [ - self::VAULT_PROVIDER_CODE => $tokenUiComponentProvider - ] - ); - - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'paymentDataHelper', - $this->paymentDataHelper - ); - - static::assertEquals([$tokenUiComponent], $configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); + static::assertEquals([$tokenUiComponent], $this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); } /** @@ -263,7 +285,7 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase ->method('getEntityId') ->willReturn(self::ENTITY_ID); - list($tokenUiComponent, $tokenUiComponentProvider) = $this->getTokenUiComponentProvider($token); + $tokenUiComponent = $this->getTokenUiComponentProvider($token); $searchCriteria = $this->getSearchCriteria($customerId, self::ENTITY_ID, self::VAULT_PROVIDER_CODE); @@ -290,35 +312,7 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase ->method('getItems') ->willReturn([$token]); - $configProvider = new TokensConfigProvider( - $this->session, - $this->paymentTokenRepository, - $this->filterBuilder, - $this->searchCriteriaBuilder, - $this->storeManager, - $this->dateTimeFactory, - [ - self::VAULT_PROVIDER_CODE => $tokenUiComponentProvider - ] - ); - - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'paymentDataHelper', - $this->paymentDataHelper - ); - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'paymentTokenManagement', - $this->paymentTokenManagement - ); - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'orderRepository', - $this->orderRepository - ); - - static::assertEquals([$tokenUiComponent], $configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); + static::assertEquals([$tokenUiComponent], $this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); } /** @@ -330,8 +324,6 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase { $customerId = null; - $this->initStoreMock(); - $this->session->expects(static::once()) ->method('getCustomerId') ->willReturn($customerId); @@ -366,35 +358,7 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase $this->searchCriteriaBuilder->expects(self::never()) ->method('addFilters'); - $configProvider = new TokensConfigProvider( - $this->session, - $this->paymentTokenRepository, - $this->filterBuilder, - $this->searchCriteriaBuilder, - $this->storeManager, - $this->dateTimeFactory, - [ - self::VAULT_PROVIDER_CODE => $this->getMock(TokenUiComponentProviderInterface::class) - ] - ); - - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'paymentDataHelper', - $this->paymentDataHelper - ); - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'paymentTokenManagement', - $this->paymentTokenManagement - ); - $this->objectManager->setBackwardCompatibleProperty( - $configProvider, - 'orderRepository', - $this->orderRepository - ); - - static::assertEmpty($configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); + static::assertEmpty($this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); } /** @@ -453,18 +417,66 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase static::assertEmpty($configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); } + /** + * @covers \Magento\Vault\Model\Ui\Adminhtml\TokensConfigProvider::getTokensComponents + */ + public function testGetTokensComponentsForGuestCustomerWithoutStoredTokens() + { + $this->session->expects(static::once()) + ->method('getCustomerId') + ->willReturn(null); + + $this->paymentDataHelper->expects(static::once()) + ->method('getMethodInstance') + ->with(self::VAULT_PAYMENT_CODE) + ->willReturn($this->vaultPayment); + + $this->vaultPayment->expects(static::once()) + ->method('isActive') + ->with(self::STORE_ID) + ->willReturn(true); + $this->vaultPayment->expects(static::once()) + ->method('getProviderCode') + ->willReturn(self::VAULT_PROVIDER_CODE); + + $this->session->expects(static::once()) + ->method('getReordered') + ->willReturn(self::ORDER_ID); + $this->orderRepository->expects(static::once()) + ->method('get') + ->with(self::ORDER_ID) + ->willReturn($this->getOrderMock()); + + $this->paymentTokenManagement->expects(static::once()) + ->method('getByPaymentId') + ->with(self::ORDER_PAYMENT_ENTITY_ID) + ->willReturn(null); + + $this->filterBuilder->expects(static::once()) + ->method('setField') + ->with(PaymentTokenInterface::ENTITY_ID) + ->willReturnSelf(); + $this->filterBuilder->expects(static::never()) + ->method('setValue'); + + $this->searchCriteriaBuilder->expects(static::never()) + ->method('addFilters'); + + static::assertEmpty($this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE)); + } + /** * Create mock object for store */ private function initStoreMock() { $this->store = $this->getMock(StoreInterface::class); - $this->store->expects(static::once()) + $this->store->expects(static::any()) ->method('getId') ->willReturn(self::STORE_ID); $this->storeManager = $this->getMock(StoreManagerInterface::class); - $this->storeManager->expects(static::once()) + $this->storeManager->expects(static::any()) ->method('getStore') ->with(null) ->willReturn($this->store); @@ -476,39 +488,37 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase */ private function getOrderMock() { - /** @var OrderInterface|MockObject $orderMock */ - $orderMock = $this->getMockBuilder(OrderInterface::class) + /** @var OrderInterface|MockObject $order */ + $order = $this->getMockBuilder(OrderInterface::class) ->getMockForAbstractClass(); - /** @var OrderPaymentInterface|MockObject $orderPaymentMock */ - $orderPaymentMock = $this->getMockBuilder(OrderPaymentInterface::class) + /** @var OrderPaymentInterface|MockObject $orderPayment */ + $orderPayment = $this->getMockBuilder(OrderPaymentInterface::class) ->getMockForAbstractClass(); - $orderMock->expects(static::once()) + $order->expects(static::once()) ->method('getPayment') - ->willReturn($orderPaymentMock); - $orderPaymentMock->expects(static::once()) + ->willReturn($orderPayment); + $orderPayment->expects(static::once()) ->method('getEntityId') ->willReturn(self::ORDER_PAYMENT_ENTITY_ID); - return $orderMock; + return $order; } /** * Get mock for token ui component provider * @param PaymentTokenInterface $token - * @return array + * @return TokenUiComponentInterface|MockObject */ private function getTokenUiComponentProvider($token) { $tokenUiComponent = $this->getMock(TokenUiComponentInterface::class); - - $tokenUiComponentProvider = $this->getMock(TokenUiComponentProviderInterface::class); - $tokenUiComponentProvider->expects(static::once()) + $this->tokenComponentProvider->expects(static::once()) ->method('getComponentForToken') ->with($token) ->willReturn($tokenUiComponent); - return [$tokenUiComponent, $tokenUiComponentProvider]; + return $tokenUiComponent; } /** diff --git a/app/code/Magento/Vault/view/frontend/web/js/view/payment/vault.js b/app/code/Magento/Vault/view/frontend/web/js/view/payment/vault.js index 05d56e305f23eea9473c5c3da2d0a130ca2c42a5..3015755191d37d3159158a9505a5b3c9bf5c7bf8 100644 --- a/app/code/Magento/Vault/view/frontend/web/js/view/payment/vault.js +++ b/app/code/Magento/Vault/view/frontend/web/js/view/payment/vault.js @@ -4,25 +4,32 @@ */ /*browser:true*/ /*global define*/ -define( - [ - 'underscore', - 'uiComponent', - 'Magento_Checkout/js/model/payment/renderer-list' - ], - function ( - _, - Component, - rendererList - ) { - 'use strict'; +define([ + 'underscore', + 'uiComponent', + 'Magento_Checkout/js/model/payment/renderer-list', + 'uiLayout', + 'uiRegistry' +], function (_, Component, rendererList, layout, registry) { + 'use strict'; + var vaultGroupName = 'vaultGroup'; + + layout([{ + name: vaultGroupName, + component: 'Magento_Checkout/js/model/payment/method-group', + alias: 'vault', + sortOrder: 10 + }]); + + registry.get(vaultGroupName, function (vaultGroup) { _.each(window.checkoutConfig.payment.vault, function (config, index) { rendererList.push( { type: index, config: config.config, component: config.component, + group: vaultGroup, /** * Custom payment method types comparator @@ -37,10 +44,10 @@ define( } ); }); + }); - /** - * Add view logic here if needed - */ - return Component.extend({}); - } -); + /** + * Add view logic here if needed + */ + return Component.extend({}); +}); diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less index 7731595870f061c990acc5cc36d68980e8ba590f..453a9ce958f4d3f2716c015c99ff72a525b3838f 100644 --- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less +++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less @@ -24,6 +24,7 @@ & when (@media-common = true) { .checkout-payment-method { .step-title { + border-bottom: 0; margin-bottom: 0; } @@ -39,6 +40,12 @@ display: block; } } + + & + .payment-method { + .payment-method-title { + .lib-css(border-top, @checkout-payment-method-title__border); + } + } } .payment-method-content { @@ -54,7 +61,6 @@ } .payment-method-title { - .lib-css(border-top, @checkout-payment-method-title__border); .lib-css(padding, @checkout-payment-method-title__padding 0); margin: 0; @@ -80,6 +86,14 @@ } } + .payment-group { + & + .payment-group { + .step-title { + margin: @indent__base 0 0; + } + } + } + .field-select-billing, .billing-address-form { .lib-css(max-width, @checkout-billing-address-form__max-width); diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less index 85b2e96e6ea4add2316a572f0ce4ad16bfe073d2..a8c84ef51a92af04d403be3eb522610693a9a823 100644 --- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less +++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less @@ -24,6 +24,7 @@ & when (@media-common = true) { .checkout-payment-method { .step-title { + border-bottom: 0; margin-bottom: 0; } @@ -39,6 +40,12 @@ display: block; } } + + & + .payment-method { + .payment-method-title { + .lib-css(border-top, @checkout-payment-method-title__border); + } + } } .payment-method-content { @@ -54,7 +61,6 @@ } .payment-method-title { - .lib-css(border-top, @checkout-payment-method-title__border); .lib-css(padding, @checkout-payment-method-title__padding 0); margin: 0; @@ -80,6 +86,14 @@ } } + .payment-group { + & + .payment-group { + .step-title { + margin: @indent__base 0 0; + } + } + } + .field-select-billing, .billing-address-form { .lib-css(max-width, @checkout-billing-address-form__max-width); diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.php new file mode 100644 index 0000000000000000000000000000000000000000..6fde39412d1fe66a987b12cf5cb29e09d81327fe --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.php @@ -0,0 +1,56 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Test\TestCase; + +use Magento\Mtf\TestCase\Scenario; + +/** + * Preconditions: + * 1. Configure shipping method. + * 2. Configure payment method. + * 3. Create products. + * 4. Create and setup customer. + * + * Steps: + * 1. Log in Storefront. + * 2. Add products to the Shopping Cart. + * 3. In 'Estimate Shipping and Tax' section specify destination using values from Test Data. + * 4. Click the 'Proceed to Checkout' button. + * 5. Fill shipping information. + * 6. Select shipping method. + * 8. Select payment method + * 9. Verify order total on review step. + * 10. Click 'Continue to PayPal' button. + * 11. Click 'Proceed purchase' in popup. + * 12. Log in Admin panel. + * 13. Open placed order. + * 14. Click 'Reorder' button. + * 15. Select stored Braintree PayPal token. + * 16. Click 'Submit Order'. + * 17. Perform assertions. + * + * @group Braintree + * @ZephyrId MAGETWO-59259 + */ +class CreateOrderWithPayPalBraintreeVaultBackendTest extends Scenario +{ + /* tags */ + const MVP = 'yes'; + + const TEST_TYPE = '3rd_party_test'; + + const SEVERITY = 'S0'; + /* end tags */ + + /** + * Runs test scenario + * @return void + */ + public function test() + { + $this->executeScenario(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..03e0ba330fa3b74e2a33c2983655ced95cf3dbfe --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderWithPayPalBraintreeVaultBackendTest.xml @@ -0,0 +1,32 @@ +<?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\Braintree\Test\TestCase\CreateOrderWithPayPalBraintreeVaultBackendTest" summary="Checkout with PayPal Braintree Vault token from Admin"> + <variation name="CreateOrderWithPayPalBraintreeVaultBackendTestVariation1" summary="Checkout with PayPal Braintree Vault token from Admin" ticketId="MAGETWO-59259"> + <data name="tag" xsi:type="string">est_type:3rd_party_test, severity:S0</data> + <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data> + <data name="checkoutMethod" xsi:type="string">login</data> + <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data> + <data name="shipping/shipping_method" xsi:type="string">Fixed</data> + <data name="payment/method" xsi:type="string">braintree_paypal</data> + <data name="vault/method" xsi:type="string">braintree_paypal_vault</data> + <data name="status" xsi:type="string">Processing</data> + <data name="configData" xsi:type="string">braintree, braintree_paypal, braintree_paypal_use_vault, braintree_paypal_skip_order_review</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">15.00</item> + </data> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderSuccessCreateMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertAuthorizationInCommentsHistory" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGrid" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateVaultOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateVaultOrderBackendTest.xml index db6cd3572eaa2acec5ded94997b1951c744e6652..c9b26df050cfc9cf9ef4913a4f538459cee1923f 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateVaultOrderBackendTest.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateVaultOrderBackendTest.xml @@ -19,6 +19,7 @@ <item name="grandTotal" xsi:type="string">15.00</item> </data> <data name="payment/method" xsi:type="string">braintree</data> + <data name="vault/method" xsi:type="string">braintree_cc_vault</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree</data> <data name="creditCardSave" xsi:type="string">Yes</data> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml index 5a99c4a89a313392cdd596891712b1d2d4bbaec3..ad4d5cc06e92e260aed4c90e6f534f2540d25034 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/ReorderUsingVaultTest.xml @@ -19,6 +19,7 @@ <item name="grandTotal" xsi:type="string">15.00</item> </data> <data name="payment/method" xsi:type="string">braintree</data> + <data name="vault/method" xsi:type="string">braintree_cc_vault</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree</data> <data name="configData" xsi:type="string">braintree, braintree_use_vault</data> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml index 34f4be6493838598b9872225997736da38b07ff7..495f455c43a72f4d61029a07a8633fc09744c2f0 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/etc/testcase.xml @@ -158,4 +158,21 @@ <step name="changeOrderStatusToPaymentReview" module="Magento_Braintree" next="denyPayment" /> <step name="denyPayment" module="Magento_Braintree" /> </scenario> + <scenario name="CreateOrderWithPayPalBraintreeVaultBackendTest" firstStep="setupConfiguration"> + <step name="setupConfiguration" module="Magento_Config" next="createProducts" /> + <step name="createProducts" module="Magento_Catalog" next="addProductsToTheCart" /> + <step name="addProductsToTheCart" module="Magento_Checkout" next="estimateShippingAndTax" /> + <step name="estimateShippingAndTax" module="Magento_Checkout" next="clickProceedToCheckout" /> + <step name="clickProceedToCheckout" module="Magento_Checkout" next="createCustomer" /> + <step name="createCustomer" module="Magento_Customer" next="selectCheckoutMethod" /> + <step name="selectCheckoutMethod" module="Magento_Checkout" next="fillShippingAddress" /> + <step name="fillShippingAddress" module="Magento_Checkout" next="fillShippingMethod" /> + <step name="fillShippingMethod" module="Magento_Checkout" next="selectPaymentMethod" /> + <step name="selectPaymentMethod" module="Magento_Checkout" next="placeOrderWithPaypal" /> + <step name="placeOrderWithPaypal" module="Magento_Braintree" next="openOrder"/> + <step name="openOrder" module="Magento_Sales" next="reorder" /> + <step name="reorder" module="Magento_Sales" next="useVaultPaymentToken" /> + <step name="useVaultPaymentToken" module="Magento_Vault" next="submitOrder" /> + <step name="submitOrder" module="Magento_Sales" /> + </scenario> </config> diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateVaultOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateVaultOrderBackendTest.xml index 38666c36a2ba4e53641f45616060353ca5e5e22c..ca26ad42a020c80ab0540c21a2928b8a1874cae7 100644 --- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateVaultOrderBackendTest.xml +++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateVaultOrderBackendTest.xml @@ -19,6 +19,7 @@ <item name="grandTotal" xsi:type="string">15.00</item> </data> <data name="payment/method" xsi:type="string">payflowpro</data> + <data name="vault/method" xsi:type="string">payflowpro_cc_vault</data> <data name="creditCardClass" xsi:type="string">credit_card_admin</data> <data name="creditCard/dataset" xsi:type="string">visa_default</data> <data name="creditCardSave" xsi:type="string">Yes</data> diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml index c33abb1dbdd2263fded6dbbfb0f683848a3bdd3f..b1da43e473bc5d78d4bfaf0fbcbb718dac6acd3e 100644 --- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml +++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml @@ -19,6 +19,7 @@ <item name="grandTotal" xsi:type="string">15.00</item> </data> <data name="payment/method" xsi:type="string">payflowpro</data> + <data name="vault/method" xsi:type="string">payflowpro_cc_vault</data> <data name="creditCardClass" xsi:type="string">credit_card</data> <data name="creditCard/dataset" xsi:type="string">visa_default</data> <data name="configData" xsi:type="string">payflowpro, payflowpro_use_vault</data> diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/UseVaultPaymentTokenStep.php b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/UseVaultPaymentTokenStep.php index ad693923955d4f439340970eb07ebb7c14789574..066dc7786d892619e84272c69b655cfd8a74f140 100644 --- a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/UseVaultPaymentTokenStep.php +++ b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/UseVaultPaymentTokenStep.php @@ -17,20 +17,20 @@ class UseVaultPaymentTokenStep implements TestStepInterface * @var OrderCreateIndex */ private $orderCreatePage; - + /** * @var array */ - private $payment; + private $vault; /** * @param OrderCreateIndex $orderCreateIndex - * @param array $payment + * @param array $vault */ - public function __construct(OrderCreateIndex $orderCreateIndex, array $payment) + public function __construct(OrderCreateIndex $orderCreateIndex, array $vault) { $this->orderCreatePage = $orderCreateIndex; - $this->payment = $payment; + $this->vault = $vault; } /** @@ -39,8 +39,7 @@ class UseVaultPaymentTokenStep implements TestStepInterface public function run() { $block = $this->orderCreatePage->getCreateBlock(); - $this->payment['method'] .= '_cc_vault'; - $block->selectPaymentMethod($this->payment); - $block->selectVaultToken('token_switcher_' . $this->payment['method']); + $block->selectPaymentMethod($this->vault); + $block->selectVaultToken('token_switcher_' . $this->vault['method']); } } diff --git a/dev/tests/integration/testsuite/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php b/dev/tests/integration/testsuite/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e79f4ad361e36d315e7bc30846325bbe97445d1e --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProviderTest.php @@ -0,0 +1,62 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Model\Ui\Adminhtml\PayPal; + +use Magento\Braintree\Model\Ui\Adminhtml\PayPal\TokenUiComponentProvider; +use Magento\Braintree\Model\Ui\PayPal\ConfigProvider; +use Magento\Framework\ObjectManagerInterface; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Vault\Model\PaymentTokenManagement; +use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface; + +/** + * Contains tests for PayPal token Ui component provider + */ +class TokenUiComponentProviderTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var ObjectManagerInterface + */ + private $objectManager; + + /** + * @var TokenUiComponentProvider + */ + private $tokenComponentProvider; + + protected function setUp() + { + $this->objectManager = Bootstrap::getObjectManager(); + $this->tokenComponentProvider = $this->objectManager->get(TokenUiComponentProvider::class); + } + + /** + * @covers \Magento\Braintree\Model\Ui\Adminhtml\PayPal\TokenUiComponentProvider::getComponentForToken + * @magentoDataFixture Magento/Braintree/_files/paypal_vault_token.php + * @magentoAppArea adminhtml + */ + public function testGetComponentForToken() + { + $customerId = 1; + $token = 'mx29vk'; + $payerEmail = 'john.doe@example.com'; + + /** @var PaymentTokenManagement $tokenManagement */ + $tokenManagement = $this->objectManager->get(PaymentTokenManagement::class); + $paymentToken = $tokenManagement->getByGatewayToken($token, ConfigProvider::PAYPAL_CODE, $customerId); + + $component = $this->tokenComponentProvider->getComponentForToken($paymentToken); + $config = $component->getConfig(); + + static::assertNotEmpty($config[TokenUiComponentProviderInterface::COMPONENT_DETAILS]); + static::assertNotEmpty($config[TokenUiComponentProviderInterface::COMPONENT_PUBLIC_HASH]); + static::assertEquals(ConfigProvider::PAYPAL_VAULT_CODE, $config['code']); + + $details = $config[TokenUiComponentProviderInterface::COMPONENT_DETAILS]; + static::assertEquals($payerEmail, $details['payerEmail']); + static::assertNotEmpty($details['icon']); + } +} diff --git a/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js b/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js index 5d520860f44105371984c918ddd643f1f05c1611..ccd21fafe33b9220f3203bf4fa0697ad2abc2d2f 100644 --- a/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js +++ b/dev/tests/js/jasmine/spec_runner/tasks/jasmine.js @@ -37,6 +37,10 @@ function init(config) { host: host, template: render(files.template), vendor: files.requireJs, + junit: { + path: "var/log/js-unit/", + consolidate: true + }, /** * @todo rename "helpers" to "specs" (implies overriding grunt-contrib-jasmine code) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/collection/item.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/collection/item.test.js index 806964352be5f23ea088d91b683400d00020c342..6fbbc63af473c36baa9f5c7fdf55d2e0fa6b907c 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/collection/item.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/collection/item.test.js @@ -21,38 +21,6 @@ define([ index: '' }); - registry.set('provName', { - on: function () { - }, - get: function () { - }, - set: function () { - } - }); - - describe('"initProperties" method', function () { - it('Check for defined ', function () { - expect(obj.hasOwnProperty('initProperties')).toBeDefined(); - }); - it('Check answer type', function () { - var type = typeof obj.initProperties; - - expect(type).toEqual('function'); - }); - it('Check returned value if method called without arguments', function () { - expect(obj.initProperties()).toBeDefined(); - }); - it('Check returned value type if method called without arguments', function () { - var type = typeof obj.initProperties(); - - expect(type).toEqual('object'); - }); - it('Check "displayed" property', function () { - obj.displayed = null; - obj.initProperties(); - expect(obj.displayed).toEqual([]); - }); - }); describe('"initObservable" method', function () { it('Check for defined ', function () { expect(obj.hasOwnProperty('initObservable')).toBeDefined(); @@ -178,16 +146,23 @@ define([ prefix: 'magento' }; + obj.getPreview = jasmine.createSpy().and.callFake(function () { + return []; + }); + expect(obj.buildPreview(arg)).toBeDefined(); }); it('Check returned value type if method called with object argument', function () { var arg = { items: [], prefix: 'magento' - }, - type = typeof obj.buildPreview(arg); + }; + + obj.getPreview = jasmine.createSpy().and.callFake(function () { + return []; + }); - expect(type).toEqual('string'); + expect(typeof obj.buildPreview(arg)).toEqual('string'); }); it('Check called "this.getPreview" method with object argument', function () { var arg = { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab.test.js index 56449c04406a08f0a8a5bc021726322ecd13bd59..10c9e5d35daeddeb16fa89b928f357b7770bdd66 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab.test.js @@ -56,23 +56,6 @@ define([ expect(obj.observe).toHaveBeenCalled(); }); }); - describe('"onUniqueUpdate" method', function () { - it('Check for defined ', function () { - expect(obj.hasOwnProperty('onUniqueUpdate')).toBeDefined(); - }); - it('Check method type', function () { - var type = typeof obj.onUniqueUpdate; - - expect(type).toEqual('function'); - }); - it('Check called "this.trigger" inner onUniqueUpdate method', function () { - obj.trigger = jasmine.createSpy().and.callFake(function () { - return obj; - }); - obj.onUniqueUpdate(); - expect(obj.trigger).toHaveBeenCalled(); - }); - }); describe('"activate" method', function () { it('Check for defined ', function () { expect(obj.hasOwnProperty('activate')).toBeDefined(); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab_group.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab_group.test.js index 173e803b14a2151df665ebd97bd145cf374f26ee..311b023a003a85fba8f8d4a7beb89f8cb65dce04 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab_group.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/components/tab_group.test.js @@ -23,14 +23,6 @@ define([ }); window.FORM_KEY = 'magentoFormKey'; - registry.set('provName', { - on: function () { - }, - get: function () { - }, - set: function () { - } - }); describe('"initElement" method', function () { it('Check for defined ', function () { @@ -48,6 +40,8 @@ define([ on: function () { }, active: function () { + }, + activate: function () { } }; @@ -60,6 +54,8 @@ define([ on: function () { }, active: function () { + }, + activate: function () { } }, type = typeof obj.initElement(arg); @@ -83,6 +79,8 @@ define([ on: function () { }, active: function () { + }, + activate: function () { } }; @@ -95,6 +93,8 @@ define([ on: function () { }, active: function () { + }, + activate: function () { } }, type = typeof obj.initActivation(arg); @@ -119,6 +119,8 @@ define([ }, active: function () { }, + activate: function () { + }, delegate: jasmine.createSpy() }; @@ -150,7 +152,7 @@ define([ return []; }); obj.onValidate(); - expect(obj.validate.calls.count()).toBe(3); + expect(obj.validate.calls.count()).toBe(1); }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/abstract.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/abstract.test.js index 0923d84fce5ff0e39149219a2ba951dcc1b6ebf9..7730bc72f7af6e35ffea47a4e2c6831328672dcc 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/abstract.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/abstract.test.js @@ -43,17 +43,6 @@ define([ expect(model.validation).toEqual({}); }); }); - describe('initProperties method', function () { - it('check for chainable', function () { - expect(model.initProperties()).toEqual(model); - }); - it('check for extend', function () { - model.initProperties(); - expect(model.uid).toBeDefined(); - expect(model.noticeId).toBeDefined(); - expect(model.inputName).toBeDefined(); - }); - }); describe('setInitialValue method', function () { it('check for chainable', function () { expect(model.setInitialValue()).toEqual(model); @@ -78,15 +67,23 @@ define([ expect(model.additionalClasses).toEqual(1); }); it('check for empty additional class', function () { + var expectedResult = { + _required: model.required, + _warn: model.warn, + _error: model.error, + _disabled: model.disabled + }; + model.additionalClasses = ''; expect(model._setClasses()).toEqual(model); - expect(model.additionalClasses).toEqual(''); + expect(model.additionalClasses).toEqual(expectedResult); }); it('check for one class in additional', function () { var extendObject = { simple: true, - required: model.required, + _required: model.required, + _warn: model.warn, _error: model.error, _disabled: model.disabled }; @@ -98,7 +95,8 @@ define([ it('check for one class with spaces in additional', function () { var extendObject = { simple: true, - required: model.required, + _required: model.required, + _warn: model.warn, _error: model.error, _disabled: model.disabled }; @@ -111,7 +109,8 @@ define([ var extendObject = { simple: true, example: true, - required: model.required, + _required: model.required, + _warn: model.warn, _error: model.error, _disabled: model.disabled }; @@ -124,7 +123,8 @@ define([ var extendObject = { simple: true, example: true, - required: model.required, + _required: model.required, + _warn: model.warn, _error: model.error, _disabled: model.disabled }; @@ -139,10 +139,8 @@ define([ expect(model.getInitialValue()).toEqual(''); }); it('check with default value', function () { - var expected = 1; - - model.default = expected; - expect(model.getInitialValue()).toEqual(expected); + model.default = 1; + expect(model.getInitialValue()).toEqual(''); }); it('check with value', function () { var expected = 1; diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/date.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/date.test.js index 632fef3d841d1becdc65ff4e8ddfdcc553a3557f..de6b83eaf2005d06c324c3b7da997b541d305522 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/date.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/date.test.js @@ -19,33 +19,5 @@ define([ }; model = new DateElement(params); }); - - describe('getInitialValue method', function () { - it('check for default', function () { - expect(model.getInitialValue()).toEqual(''); - }); - it('check with default value', function () { - model.default = 1; - expect(model.getInitialValue()).toEqual('01/01/1970'); - }); - it('check with value', function () { - model.value(1); - expect(model.getInitialValue()).toEqual('01/01/1970'); - }); - it('check with value and default', function () { - model.default = 1; - model.value(0); - expect(model.getInitialValue()).toEqual(0); - }); - }); - describe('initProperties method', function () { - it('check for chainable', function () { - expect(model.initProperties()).toEqual(model); - }); - it('check for extend', function () { - model.initProperties(); - expect(model.dateFormat).toBeDefined(); - }); - }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/multiselect.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/multiselect.test.js deleted file mode 100644 index 09f21f6b175ee21661cc8138ae319fc9be98bd14..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/multiselect.test.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -/*eslint max-nested-callbacks: 0*/ - -define([ - 'Magento_Ui/js/form/element/multiselect' -], function (MultiselectElement) { - 'use strict'; - - describe('Magento_Ui/js/form/element/multiselect', function () { - var params, model; - - beforeEach(function () { - params = { - dataScope: 'multiselect' - }; - model = new MultiselectElement(params); - }); - - describe('getInitialValue method', function () { - it('check for default', function () { - expect(model.getInitialValue()).toEqual(undefined); - }); - it('check with default value', function () { - model.indexedOptions = { - Select: { - value: 'value' - } - }; - model.default = 'Select'; - expect(model.getInitialValue()).toEqual(['value']); - }); - it('check with value', function () { - model.indexedOptions = { - Select: { - value: 'value' - } - }; - model.value('Select'); - expect(model.getInitialValue()).toEqual(['value']); - }); - }); - }); -}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/select.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/select.test.js index 6ce3428a6cb35f4a15063de0ba26e3612e1605d2..db5855b0a692bb7ac0c9b75de35d228abe309016 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/select.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/element/select.test.js @@ -52,64 +52,6 @@ define([ it('check for chainable', function () { expect(model.initConfig({})).toEqual(model); }); - it('check with empty value and caption', function () { - var config = { - options: [{ - label: 'Caption', - value: null - }, { - label: 'Some label', - value: 'Some value' - }], - caption: 'Main caption' - }, - expected = { - options: [config.options[1]], - caption: config.caption - }; - - expect(model.initConfig(config)).toEqual(model); - expect(config).toEqual(expected); - }); - it('check with empty value', function () { - var config = { - options: [{ - label: 'Caption', - value: null - }, { - label: 'Some label', - value: 'Some value' - }] - }, - expected = { - options: [config.options[1]], - caption: config.options[0].label - }; - - expect(model.initConfig(config)).toEqual(model); - expect(config).toEqual(expected); - }); - it('check with multiple empty value', function () { - var config = { - options: [{ - label: 'Caption', - value: null - }, { - label: 'Some label', - value: 'Some value' - }, { - label: 'Another caption', - value: null - }] - }, - expected = { - options: [config.options[1]], - caption: config.options[0].label - }; - - expect(model.initConfig(config)).toEqual(model); - expect(config).toEqual(expected); - }); }); describe('initObservable method', function () { it('check for chainable', function () { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/form.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/form.test.js index 5a32d5c991e3e06b50647c03057a3cc19ac1239f..88203afba331333193482a79c3e061202e93a2b4 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/form.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/form.test.js @@ -67,26 +67,26 @@ define([ expect(type).toEqual('object'); }); }); - describe('"initProperties" method', function () { + describe('"initConfig" method', function () { it('Check for defined ', function () { - expect(obj.hasOwnProperty('initProperties')).toBeDefined(); + expect(obj.hasOwnProperty('initConfig')).toBeDefined(); }); it('Check method type', function () { - var type = typeof obj.initProperties; + var type = typeof obj.initConfig; expect(type).toEqual('function'); }); it('Check returned value if method called without arguments', function () { - expect(obj.initProperties()).toBeDefined(); + expect(obj.initConfig()).toBeDefined(); }); it('Check returned value type if method called without arguments', function () { - var type = typeof obj.initProperties(); + var type = typeof obj.initConfig(); expect(type).toEqual('object'); }); - it('Check this.selector property (is modify in initProperties method)', function () { + it('Check this.selector property (is modify in initConfig method)', function () { obj.selector = null; - obj.initProperties(); + obj.initConfig(); expect(typeof obj.selector).toEqual('string'); }); }); @@ -117,33 +117,6 @@ define([ expect(type).toEqual('function'); }); - it('Check call method "this.validate" inner save method', function () { - obj.validate = jasmine.createSpy(); - obj.source.get = jasmine.createSpy().and.callFake(function () { - return true; - }); - obj.save(); - expect(obj.validate).toHaveBeenCalled(); - }); - it('Check call method "this.source.get" inner save method', function () { - obj.validate = jasmine.createSpy(); - obj.source.get = jasmine.createSpy().and.callFake(function () { - return true; - }); - obj.save(); - expect(obj.source.get).toHaveBeenCalled(); - }); - it('Check call method "this.submit" inner save method', function () { - obj.validate = jasmine.createSpy(); - obj.source.get = jasmine.createSpy().and.callFake(function () { - return false; - }); - obj.submit = jasmine.createSpy().and.callFake(function () { - return true; - }); - obj.save(); - expect(obj.source.get).toHaveBeenCalled(); - }); }); describe('"submit" method', function () { it('Check for defined ', function () { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/ui-select.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/ui-select.test.js index 6a646c7c709099b917a08df1f3f795cce262dca0..5ffa5792b0882385c26546d6fbd834f3dde68a03 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/ui-select.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/form/ui-select.test.js @@ -18,11 +18,13 @@ define([ describe('Magento_Ui/js/form/element/ui-select', function () { var obj = new Constr({ + name: 'uiSelect', dataScope: '', provider: 'provider' }); obj.value = ko.observableArray([]); + obj.cacheOptions.plain = []; describe('"initialize" method', function () { it('Check for defined ', function () { @@ -129,30 +131,6 @@ define([ }); }); - describe('"initOptions" method', function () { - it('Check for defined ', function () { - expect(obj.hasOwnProperty('initOptions')).toBeDefined(); - }); - it('Check answer type', function () { - var type = typeof obj.initOptions; - - expect(type).toEqual('function'); - }); - it('Check returned value if method called without arguments', function () { - expect(obj.initOptions()).toBeDefined(); - }); - it('Check returned value type if method called without arguments', function () { - var type = typeof obj.initOptions(); - - expect(type).toEqual('object'); - }); - it('Check "this.optionsConfig.options" property', function () { - obj.optionsConfig.options = null; - obj.initOptions(); - expect(obj.optionsConfig.options).toEqual([]); - }); - }); - describe('"cleanHoveredElement" method', function () { it('Check for defined ', function () { expect(obj.hasOwnProperty('cleanHoveredElement')).toBeDefined(); @@ -170,11 +148,6 @@ define([ expect(type).toEqual('object'); }); - it('Check changes "this.hoverElIndex" observe variable', function () { - obj.hoverElIndex(5); - obj.cleanHoveredElement(); - expect(obj.hoverElIndex()).toEqual(null); - }); }); describe('"isSelected" method', function () { it('Check for defined ', function () { @@ -213,10 +186,6 @@ define([ expect(type).toEqual('boolean'); }); - it('Must return false if "hoverElIndex" does not equal value', function () { - obj.hoverElIndex(1); - expect(obj.isHovered(2)).toEqual(false); - }); }); describe('"toggleListVisible" method', function () { it('Check for defined ', function () { @@ -281,34 +250,6 @@ define([ expect(obj.value()).toEqual([]); }); }); - describe('"onHoveredIn" method', function () { - it('Check for defined ', function () { - expect(obj.hasOwnProperty('onHoveredIn')).toBeDefined(); - }); - it('Check answer type', function () { - var type = typeof obj.onHoveredIn; - - expect(type).toEqual('function'); - }); - it('Observe variable "hoverElIndex" must have transmitted value', function () { - obj.onHoveredIn({}, 5); - expect(obj.hoverElIndex()).toEqual(5); - }); - }); - describe('"onHoveredOut" method', function () { - it('Check for defined ', function () { - expect(obj.hasOwnProperty('onHoveredOut')).toBeDefined(); - }); - it('Check answer type', function () { - var type = typeof obj.onHoveredOut; - - expect(type).toEqual('function'); - }); - it('Observe variable "hoverElIndex" must be null', function () { - obj.onHoveredOut(); - expect(obj.hoverElIndex()).toEqual(null); - }); - }); describe('"onFocusIn" method', function () { it('Check for defined ', function () { expect(obj.hasOwnProperty('onFocusIn')).toBeDefined(); @@ -319,7 +260,7 @@ define([ expect(type).toEqual('function'); }); it('Observe variable "multiselectFocus" must be true', function () { - obj.onFocusIn(); + obj.onFocusIn({}, {}); expect(obj.multiselectFocus()).toEqual(true); }); }); @@ -351,14 +292,6 @@ define([ obj.enterKeyHandler(); expect(obj.listVisible()).toEqual(true); }); - it('if list visible is true, method "toggleOptionSelected" must be called with argument', function () { - obj.listVisible(true); - obj.hoverElIndex(0); - obj.options(['magento']); - obj.toggleOptionSelected = jasmine.createSpy(); - obj.enterKeyHandler(); - expect(obj.toggleOptionSelected).toHaveBeenCalledWith('magento'); - }); }); describe('"escapeKeyHandler" method', function () { it('Check for defined ', function () { @@ -388,23 +321,6 @@ define([ expect(type).toEqual('function'); }); - it('If "hoverElIndex" is null - "hoverElIndex" must be 0', function () { - obj.hoverElIndex(null); - obj.pageDownKeyHandler(); - expect(obj.hoverElIndex()).toEqual(0); - }); - it('If "hoverElIndex" is number - "hoverElIndex" must be number + 1', function () { - obj.hoverElIndex(1); - obj.options(['one', 'two', 'three']); - obj.pageDownKeyHandler(); - expect(obj.hoverElIndex()).toEqual(2); - }); - it('If "hoverElIndex" is number and number === options length -1, "hoverElIndex" must be 0', function () { - obj.hoverElIndex(1); - obj.options(['one', 'two']); - obj.pageDownKeyHandler(); - expect(obj.hoverElIndex()).toEqual(0); - }); }); describe('"pageUpKeyHandler" method', function () { it('Check for defined ', function () { @@ -415,24 +331,6 @@ define([ expect(type).toEqual('function'); }); - it('If "hoverElIndex" is null - "hoverElIndex" must be option length -1', function () { - obj.hoverElIndex(null); - obj.options(['one', 'two']); - obj.pageUpKeyHandler(); - expect(obj.hoverElIndex()).toEqual(1); - }); - it('If "hoverElIndex" is 0 - "hoverElIndex" must be option length -1', function () { - obj.hoverElIndex(0); - obj.options(['one', 'two']); - obj.pageUpKeyHandler(); - expect(obj.hoverElIndex()).toEqual(1); - }); - it('If "hoverElIndex" is number - "hoverElIndex" must be number - 1', function () { - obj.hoverElIndex(2); - obj.options(['one', 'two']); - obj.pageUpKeyHandler(); - expect(obj.hoverElIndex()).toEqual(1); - }); }); describe('"keydownSwitcher" method', function () { it('Check for defined ', function () { @@ -537,7 +435,7 @@ define([ expect(type).toEqual('function'); }); it('Check returned value if selected', function () { - obj.cacheOptions = [{value: 'magento'}, {value: 'magento2'}]; + obj.cacheOptions.plain = [{value: 'magento'}, {value: 'magento2'}]; obj.value(['magento', 'magento2']); expect(obj.getSelected()).toEqual([{value: 'magento'}, {value: 'magento2'}]); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js index c282660342ad1c25a7b0f35dd9d095fcaeb7604b..318e09453dc5af8f3f4d3f43e10c208c615a8b6c 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/actions.test.js @@ -82,19 +82,5 @@ define([ action.hidden = false; expect(model.isActionVisible(action)).toBeTruthy(); }); - - it('Check toggleList function', function () { - model.toggleList(0); - expect(model.opened()).toEqual(0); - model.toggleList(0); - expect(model.opened()).toBeFalsy(); - }); - - it('Check closeList function', function () { - model.toggleList(0); - expect(model.opened()).toEqual(0); - model.closeList(0); - expect(model.opened()).toBeFalsy(); - }); }); }); \ No newline at end of file diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js index b4db54bdb7b65fec6a557dd12f0d10e878277ece..ccfccdd195f0292163eab823ae5b15a61713594c 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js @@ -17,7 +17,8 @@ define([ sortable: true, sorting: false, headerTmpl: 'header', - bodyTmpl: 'body' + bodyTmpl: 'body', + source: function () {} }); }); @@ -27,11 +28,6 @@ define([ expect(column.sorting).toBe('asc'); }); - it('apply sorting in other direction', function () { - column.sort(true).sort(true); - expect(column.sorting).toBe('desc'); - }); - it('remove sorting', function () { column.sort(false); expect(column.sorting).toBeFalsy(); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/date.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/date.test.js index e93209a5dfd04fbb6d897b650bc94cc7157b4f73..bee9a76a8ed390ab1aa8d6aaa8c5f5a13b2e6314 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/date.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/date.test.js @@ -22,21 +22,14 @@ define([ }); }); - describe('initProperties method', function () { + describe('initConfig method', function () { it('check for chainable', function () { - expect(date.initProperties()).toEqual(date); + expect(date.initConfig()).toEqual(date); }); it('check for extend', function () { - date.initProperties(); + date.initConfig(); expect(date.dateFormat).toBeDefined(); }); }); - - describe('getLabel method', function () { - it('check format', function () { - date.dateFormat = dateFormat; - expect(date.getLabel(dateRaw)).toBe(dateFormatted); - }); - }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/select.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/select.test.js index 9b9e0b35cf3ebc05a49ec2dbc26ebd15ae338d41..3179490ab1ed62391841b17df6f459e52b106db6 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/select.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/select.test.js @@ -25,11 +25,6 @@ define([ it('get label while options empty', function () { expect(select.getLabel(2)).toBe(''); }); - - it('get label for existed value', function () { - select.options = opts; - expect(select.getLabel(2)).toBe('b'); - }); }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/bookmarks.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/bookmarks.test.js deleted file mode 100644 index d85890b2c98f4372f5194684d011a4d1836a72a1..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/bookmarks.test.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -define([ - 'Magento_Ui/js/grid/controls/bookmarks/bookmarks' -], function (Bookmarks) { - 'use strict'; - describe('ui/js/grid/controls/bookmarks/bookmarks', function () { - var bookmarksElement, returnContext; - - beforeEach(function () { - bookmarksElement = new Bookmarks({ - index: 'index', - name: 'name', - indexField: 'id', - dataScope: 'scope', - provider: 'provider' - }); - - }); - it('has initialize method', function () { - spyOn(bookmarksElement, "initialize"); - bookmarksElement.initialize(); - expect(bookmarksElement.initialize).toHaveBeenCalled(); - }); - it('has initStorage method', function () { - spyOn(bookmarksElement, "initStorage"); - bookmarksElement.initStorage(); - expect(bookmarksElement.initStorage).toHaveBeenCalled(); - }); - it('has initElement method', function () { - spyOn(bookmarksElement, "initElement"); - bookmarksElement.initElement(); - expect(bookmarksElement.initElement).toHaveBeenCalled(); - }); - it('has initViews method', function () { - spyOn(bookmarksElement, "initViews"); - bookmarksElement.initViews(); - expect(bookmarksElement.initViews).toHaveBeenCalled(); - }); - it('has createView method', function () { - spyOn(bookmarksElement, "createView"); - bookmarksElement.createView(); - expect(bookmarksElement.createView).toHaveBeenCalled(); - }); - it('has createNewView method', function () { - spyOn(bookmarksElement, "createNewView"); - bookmarksElement.createNewView(); - expect(bookmarksElement.createNewView).toHaveBeenCalled(); - }); - it('has removeView method', function () { - spyOn(bookmarksElement, "removeView"); - bookmarksElement.removeView(); - expect(bookmarksElement.removeView).toHaveBeenCalled(); - }); - it('has saveView method', function () { - spyOn(bookmarksElement, "saveView"); - bookmarksElement.saveView(); - expect(bookmarksElement.saveView).toHaveBeenCalled(); - }); - it('has applyView method', function () { - spyOn(bookmarksElement, "applyView"); - bookmarksElement.applyView(); - expect(bookmarksElement.applyView).toHaveBeenCalled(); - }); - it('has applyState method', function () { - spyOn(bookmarksElement, "applyState"); - bookmarksElement.applyState(); - expect(bookmarksElement.applyState).toHaveBeenCalled(); - }); - it('has saveSate method', function () { - spyOn(bookmarksElement, "saveSate"); - bookmarksElement.saveSate(); - expect(bookmarksElement.saveSate).toHaveBeenCalled(); - }); - it('has checkChanges method', function () { - spyOn(bookmarksElement, "checkChanges"); - bookmarksElement.checkChanges(); - expect(bookmarksElement.checkChanges).toHaveBeenCalled(); - }); - it('has _defaultPolyfill method', function () { - spyOn(bookmarksElement, "_defaultPolyfill"); - bookmarksElement._defaultPolyfill(); - expect(bookmarksElement._defaultPolyfill).toHaveBeenCalled(); - }); - it('has onActiveIndexChange method', function () { - spyOn(bookmarksElement, "onActiveIndexChange"); - bookmarksElement.onActiveIndexChange(); - expect(bookmarksElement.onActiveIndexChange).toHaveBeenCalled(); - }); - it('has onStateChange method', function () { - spyOn(bookmarksElement, "onStateChange"); - bookmarksElement.onStateChange(); - expect(bookmarksElement.onStateChange).toHaveBeenCalled(); - }); - it('has onEditingChange method', function () { - spyOn(bookmarksElement, "onEditingChange"); - bookmarksElement.onEditingChange(); - expect(bookmarksElement.onEditingChange).toHaveBeenCalled(); - }); - }); -}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/view.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/view.test.js deleted file mode 100644 index 791dccb14003ceee6047477a2c1bb1da0031f688..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/view.test.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -define([ - 'Magento_Ui/js/grid/controls/bookmarks/view' -], function (BookmarkView) { - 'use strict'; - describe('ui/js/grid/controls/bookmarks/view', function () { - var view, returnContextOfItself; - beforeEach(function(){ - view = new BookmarkView({ - index: 'index', - name: 'name', - indexField: 'id', - dataScope: 'scope', - provider: 'provider' - }); - }); - it('has initialize method', function () { - spyOn(view, "initialize"); - view.initialize(); - expect(view.initialize).toHaveBeenCalled(); - }); - it('has initObservable method', function () { - spyOn(view, "initObservable"); - view.initObservable(); - expect(view.initObservable).toHaveBeenCalled(); - }); - it('has getData method', function () { - spyOn(view, "getData"); - view.getData(); - expect(view.getData).toHaveBeenCalled(); - }); - it('has setData method', function () { - spyOn(view, "setData"); - view.setData(); - expect(view.setData).toHaveBeenCalled(); - }); - it('has syncLabel method', function () { - spyOn(view, "syncLabel"); - view.syncLabel(); - expect(view.syncLabel).toHaveBeenCalled(); - }); - it('has startEdit method', function () { - spyOn(view, "startEdit"); - view.startEdit(); - expect(view.startEdit).toHaveBeenCalled(); - }); - it('has exportView method', function () { - spyOn(view, "exportView"); - view.exportView(); - expect(view.exportView).toHaveBeenCalled(); - }); - it('has onActivate method', function () { - spyOn(view, "onActivate"); - view.onActivate(); - expect(view.onActivate).toHaveBeenCalled(); - }); - it('has onActiveChange method', function () { - spyOn(view, "onActiveChange"); - view.onActiveChange(); - expect(view.onActiveChange).toHaveBeenCalled(); - }); - }) -}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js index 094ad409e5eb4415672702fb38eb219070b2fe54..bdbffbff347fe27c18b13b1c17b79f175f724ec2 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js @@ -13,6 +13,7 @@ define([ beforeEach(function () { bulkObj = new Bulk(); + bulkObj.editor = jasmine.createSpy('editor'); }); it('has initObservable', function () { expect(bulkObj).toBeDefined(); @@ -33,5 +34,5 @@ define([ bulkObj.updateState(); expect(bulkObj.updateState).toHaveBeenCalled(); }); - }) -}); \ No newline at end of file + }); +}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js index 0555f056f5e90822b1aca09f39c1c27b08f7cf8a..05a65b038f3e3783d2af10d1ab75f1a2c0ee135f 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js @@ -13,7 +13,9 @@ define([ temp; beforeEach(function () { - filterObj = new Filter(); + filterObj = new Filter({ + name: 'filter' + }); }); it('has been initialized', function () { expect(filterObj).toBeDefined(); @@ -39,16 +41,6 @@ define([ temp = filterObj.cancel(); expect(temp).toBeDefined(); }); - it('has isOpened method', function () { - filterObj.opened = function () { - return true; - }; - filterObj.hasVisible = function () { - return true; - }; - temp = filterObj.isOpened(); - expect(temp).toBeTruthy(); - }); it('has isFilterVisible method', function () { temp = { visible: function () { @@ -69,15 +61,5 @@ define([ filterObj.hasVisible(); expect(filterObj.hasVisible).toHaveBeenCalled(); }); - it('has extractActive method', function () { - spyOn(filterObj, 'extractActive'); - filterObj.extractActive(); - expect(filterObj.extractActive).toHaveBeenCalled(); - }); - it('has extractPreviews method', function () { - spyOn(filterObj, 'extractPreviews'); - filterObj.extractPreviews(); - expect(filterObj.extractPreviews).toHaveBeenCalled(); - }); }); -}); \ No newline at end of file +}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js index 44640d6ef206367191e630c36dcdd5271982e268..c2f798927fa8e34fa453d505f532371ee0e801e0 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js @@ -28,18 +28,6 @@ define([ group.elems.push({id:1}, {id:1}); expect(group.elems()).not.toEqual([]); }); - it('Check for reset elements.', function () { - var elem = { - value: false, - reset: function() { - this.value = true; - } - }; - - group.elems.push(elem); - expect(group.reset()).toBe(group); - expect(group.elems.first().value).toBe(true); - }); it('Check for clear elements.', function () { var elem = { value: 'text', diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js index 36c2823eaf9e62706bc4d0d12174fedad4d25049..a240e5cfd432597d4bb38e10957b4495d4ed48b2 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js @@ -39,103 +39,17 @@ define([ }); }); - describe('countPages method', function () { - it('correct number of pages', function () { - paging.countPages(); - expect(paging.pages).toBe(4); - }); - - it('if no records', function () { - paging.totalRecords = 0; - paging.countPages(); - expect(paging.pages).toBe(1); - }); - }); - - describe('page manipualations', function () { - it('setPage method', function () { - paging.setPage(2); - expect(paging.current).toBe(2); - }); - - it('next', function () { - paging.current = 1; - paging.next(); - expect(paging.current).toBe(2); - }); - - it('next out of boundary', function () { - paging.current = 4; - paging.next(); - expect(paging.current).toBe(4); - }); - - it('prev', function () { - paging.current = 4; - paging.prev(); - expect(paging.current).toBe(3); - }); - - it('prev out of boundary', function () { - paging.current = 1; - paging.prev(); - expect(paging.current).toBe(1); - }); - - it('goFirst', function () { - paging.goFirst(); - expect(paging.current).toBe(1); - }); - - it('goLast', function () { - paging.goLast(); - expect(paging.current).toBe(4); - }); - - it('isFirst for 1st page', function () { - paging.current = 1; - expect(paging.isFirst()).toBeTruthy(); - }); - - it('isFirst for 2nd page', function () { - paging.current = 2; - expect(paging.isFirst()).toBeFalsy(); - }); - - it('isLast for last page', function () { - paging.current = 4; - expect(paging.isLast()).toBeTruthy(); - }); - - it('isLast for first page', function () { - paging.current = 1; - expect(paging.isLast()).toBeFalsy(); - }); - }); - - describe('countPages method', function () { - it('correct number of pages', function () { - paging.countPages(); - expect(paging.pages).toBe(4); - }); - - it('if no records', function () { - paging.totalRecords = 0; - paging.countPages(); - expect(paging.pages).toBe(1); - }); - }); - describe('onPagesChange method', function () { it('pages amount became less than current', function () { paging.current = 4; expect(paging.current).toBe(4); - paging.onPagesChange(2); - expect(paging.current).toBe(2); + paging.pageSize = 3; + paging.onPagesChange(); + expect(paging.current).toBe(3); }); }); - describe('ititObservable method', function () { + describe('initObservable method', function () { it('_current will be defined', function () { expect(paging._current).toBeDefined(); }); @@ -144,14 +58,6 @@ define([ paging.current = 2; expect(paging._current()).toBe(2); }); - - it('write into current', function () { - spyOn(paging, 'normalize').and.callThrough(); - spyOn(paging._current, 'notifySubscribers'); - paging._current(4); - expect(paging.current).toBe(4); - expect(paging._current.notifySubscribers).toHaveBeenCalledWith(4); - }); }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js index 948bfb84a85da7621273661ccf8da12483e196ab..4cbb9e73d5ae770bb1121b635dbf7ab4da260ecc 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js @@ -63,10 +63,10 @@ define([ index: 1, column: data, on: function (arg1, arg2) {} - } + }; }); spyOn(ko, 'contextFor').and.callFake(function () { - return {$index: 1, $parent: obj} + return {$index: 1, $parent: obj}; }); $._data = jasmine.createSpy().and.callFake(function () { return { @@ -82,45 +82,6 @@ define([ type = typeof obj.initColumn; expect(type).toEqual('function'); }); - it('Check call "this.getDefaultWidth" method', function () { - spyOn(obj, 'getDefaultWidth'); - obj.initColumn('magento'); - expect(obj.getDefaultWidth).toHaveBeenCalledWith('magento'); - }); - it('Check call "this.hasColumn" method', function () { - spyOn(obj, 'hasColumn').and.callFake(function () { - return false; - }); - obj.initColumn('magento'); - expect(obj.hasColumn).toHaveBeenCalled(); - }); - it('Check call "this.initResizableElement" method', function () { - spyOn(obj, 'hasColumn').and.callFake(function () { - return false; - }); - spyOn(obj, 'initResizableElement').and.callFake(function (arg) { - return true; - }); - obj.initColumn('magento'); - expect(obj.initResizableElement).toHaveBeenCalled(); - }); - it('Check call "this.setStopPropagationHandler" method', function () { - spyOn(obj, 'hasColumn').and.callFake(function () { - return false; - }); - spyOn(obj, 'setStopPropagationHandler').and.callFake(function (arg) { - return true; - }); - obj.initColumn('magento'); - expect(obj.setStopPropagationHandler).toHaveBeenCalledWith('magento'); - }); - it('Check call "this.refreshLastColumn" method', function () { - spyOn(obj, 'refreshLastColumn').and.callFake(function (arg) { - return true; - }); - obj.initColumn('magento'); - expect(obj.refreshLastColumn).toHaveBeenCalledWith('magento'); - }); }); describe('"initResizableElement" method', function () { beforeEach(function(){ @@ -194,9 +155,9 @@ define([ } }); spyOn(ko, 'contextFor').and.callFake(function () { - return {$index: ko.observable(1), $parent: obj} + return {$index: ko.observable(1), $parent: obj}; }); - spyOn(obj, 'getNextElement').and.callFake(function () { + spyOn(obj, 'getNextElements').and.callFake(function () { return true; }); event = {stopImmediatePropagation: function(){}} @@ -215,9 +176,9 @@ define([ obj.mousedownHandler(event); expect(obj.hasColumn).toHaveBeenCalled(); }); - it('Check call "this.getNextElement" method', function () { + it('Check call "this.getNextElements" method', function () { obj.mousedownHandler(event); - expect(obj.getNextElement).toHaveBeenCalled(); + expect(obj.getNextElements).toHaveBeenCalled(); }); }); describe('"mousemoveHandler" method', function () { @@ -261,7 +222,7 @@ define([ expect(obj.storageColumnsData[2]).toEqual(200); }); }); - describe('"getNextElement" method', function () { + describe('"getNextElements" method', function () { beforeEach(function(){ spyOn(ko, 'dataFor').and.callFake(function (data) { return { @@ -275,24 +236,24 @@ define([ }); }); it('Check for defined ', function () { - expect(obj.hasOwnProperty('getNextElement')).toBeDefined(); + expect(obj.hasOwnProperty('getNextElements')).toBeDefined(); }); it('Check method type', function () { - type = typeof obj.getNextElement; + type = typeof obj.getNextElements; expect(type).toEqual('function'); }); it('Check call "this.hasColumn" method', function () { spyOn(obj, 'hasColumn').and.callFake(function () { return 'magento'; }); - obj.getNextElement('magento'); + obj.getNextElements('magento'); expect(obj.hasColumn).toHaveBeenCalled(); }); it('Check returned value', function () { spyOn(obj, 'hasColumn').and.callFake(function () { return 'magento'; }); - expect(obj.getNextElement('magento')).toEqual('magento'); + expect(obj.getNextElements('magento')).toEqual('magento'); }); }); describe('"getDefaultWidth" method', function () { @@ -337,21 +298,11 @@ define([ arg = { index: 'magento' }; expect(typeof obj.hasColumn(arg, false)).toEqual('boolean'); }); - it('Must return false if object columnsElements has not model.index property', function () { - arg = { index: 'magento' }; - obj.columnsElements = {}; - expect(obj.hasColumn(arg, false)).toEqual(false); - }); it('Must return true if object columnsElements has model.index property', function () { arg = { index: 'magento' }; obj.columnsElements = {magento: 'magentoProp'}; expect(obj.hasColumn(arg, false)).toEqual(true); }); - it('Must return property if object columnsElements has property and second argument is true', function () { - arg = { index: 'magento' }; - obj.columnsElements = {magento: 'magentoProp'}; - expect(obj.hasColumn(arg, true)).toEqual('magentoProp'); - }); }); describe('"hasRow" method', function () { it('Check for defined ', function () { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js index b407fe3bebeae0153d60fe37a76953a50a1d72f6..e10061263d13a14214e50ab1266f809c96ec0883 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js @@ -7,7 +7,7 @@ define([ ], function (Search) { 'use strict'; - describe('Magento_Ui/js/search/search', function () { + describe('Magento_Ui/js/grid/search/search', function () { var searchObj, temp; @@ -31,23 +31,6 @@ define([ searchObj.initChips(); expect(searchObj.chips).toHaveBeenCalled(); }); - it('has clear', function () { - spyOn(searchObj, 'value'); - searchObj.clear(); - expect(searchObj.value).toHaveBeenCalled(); - }); - it('has clear', function () { - spyOn(searchObj, 'inputValue'); - searchObj.cancel(); - expect(searchObj.inputValue).toHaveBeenCalled(); - }); - it('has apply', function () { - spyOn(searchObj, 'value'); - spyOn(searchObj, 'inputValue'); - searchObj.apply(); - expect(searchObj.value).toHaveBeenCalled(); - expect(searchObj.inputValue).toHaveBeenCalled(); - }); it('has updatePreview', function () { spyOn(searchObj, 'updatePreview'); searchObj.updatePreview(); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/sticky/sticky.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/sticky/sticky.test.js index 4c2b68d8fcd01046895f88589d339948b032b269..426b453ab42852caf01763e5d6f73ff11933fffb 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/sticky/sticky.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/sticky/sticky.test.js @@ -135,10 +135,13 @@ define([ stickyObj.resetToTop(); expect(stickyObj.resetToTop).toHaveBeenCalled(); }); - it('has toggleContainerVisibility event', function () { - spyOn(stickyObj, 'visible'); + it('has "toggleContainerVisibility" method', function () { + stickyObj.visible = false; stickyObj.toggleContainerVisibility(); - expect(stickyObj.visible).toHaveBeenCalled(); + expect(stickyObj.visible).toEqual(true); + stickyObj.visible = true; + stickyObj.toggleContainerVisibility(); + expect(stickyObj.visible).toEqual(false); }); it('has adjustContainerElemsWidth event', function () { stickyObj.resizeContainer = function(){ @@ -156,17 +159,6 @@ define([ stickyObj.adjustOffset(); expect(stickyObj.adjustOffset).toHaveBeenCalled(); }); - it('has checkPos event', function () { - stickyObj.visible = function(){ - return false; - }; - stickyObj.getMustBeSticky = function(){ - return false; - }; - - data = stickyObj.checkPos(); - expect(data).toBeDefined(); - }) }); }) }); \ No newline at end of file diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/core.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/core.test.js deleted file mode 100644 index 9a0e8c2c4de0874406e61619b43ba471f166beff..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/core.test.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -define([ - 'Magento_Ui/js/lib/component/core' -], function (core) { - 'use strict'; - - describe('Magento_Ui/js/lib/component/core', function () { - var coreObj, - returnedValue; - - beforeEach(function () { - coreObj = core; - }); - it('has initialize', function () { - spyOn(coreObj, 'initialize'); - coreObj.initialize(); - expect(coreObj.initialize).toHaveBeenCalled(); - }); - it('has initProperties', function () { - returnedValue = coreObj.initProperties(); - expect(typeof returnedValue).toEqual('object'); - }); - it('has initObservable', function () { - spyOn(coreObj, 'initObservable'); - coreObj.initObservable(); - expect(coreObj.initObservable).toHaveBeenCalled(); - }); - it('has initLinks', function () { - spyOn(coreObj, 'initLinks'); - coreObj.initLinks(); - expect(coreObj.initLinks).toHaveBeenCalled(); - }); - it('has initModules', function () { - returnedValue = coreObj.initModules(); - expect(typeof returnedValue).toEqual('object'); - }); - it('has initUnique', function () { - returnedValue = coreObj.initUnique(); - expect(typeof returnedValue).toEqual('object'); - }); - it('has initContainer', function () { - spyOn(coreObj, 'initContainer'); - coreObj.initContainer(); - expect(coreObj.initContainer).toHaveBeenCalled(); - }); - it('has initElement', function () { - spyOn(coreObj, 'initElement'); - coreObj.initElement(); - expect(coreObj.initElement).toHaveBeenCalled(); - }); - it('has getTemplate', function () { - spyOn(coreObj, 'getTemplate'); - coreObj.getTemplate(); - expect(coreObj.getTemplate).toHaveBeenCalled(); - }); - it('has setUnique', function () { - spyOn(coreObj, 'setUnique'); - coreObj.setUnique(); - expect(coreObj.setUnique).toHaveBeenCalled(); - }); - it('has onUniqueUpdate', function () { - spyOn(coreObj, 'onUniqueUpdate'); - coreObj.onUniqueUpdate(); - expect(coreObj.onUniqueUpdate).toHaveBeenCalled(); - }); - }); -}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js index cf122dbc31fdfe14c0e7654abd232f2558562447..ff17bd826b5c212cf7e2fe624d7da70a3fca2177 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js @@ -19,9 +19,6 @@ define([ }; }); - it('has defaults', function () { - expect(typeof linksObj.defaults).toEqual('object'); - }); it('has setLinks method', function () { returnedValue = linksObj.setLinks(undefined, 'imports'); expect(typeof returnedValue).toEqual('object'); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/manip.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/manip.test.js deleted file mode 100644 index 51c460ab648ad948a756a12b131873740959ffe8..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/manip.test.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'Magento_Ui/js/lib/component/manip' - ], function (manip) { - 'use strict'; - - describe( 'Magento_Ui/js/lib/component/manip', function(){ - var manipObj, - returnedValue; - - beforeEach(function(){ - manipObj = manip; - }); - it('has getRegion method', function(){ - returnedValue = manipObj.getRegion("region"); - expect(returnedValue).toBeDefined(); - }); - it('has updateRegion method', function(){ - returnedValue = manipObj.updateRegion([],"region"); - expect(typeof returnedValue).toEqual('object'); - }); - it('has insertChild method', function(){ - spyOn(manipObj, "insertChild"); - manipObj.insertChild(); - expect(manipObj.insertChild).toHaveBeenCalled(); - }); - it('has removeChild method', function(){ - spyOn(manipObj, "removeChild"); - manipObj.removeChild(); - expect(manipObj.removeChild).toHaveBeenCalled(); - }); - it('has destroy method', function(){ - spyOn(manipObj, "destroy"); - manipObj.destroy(); - expect(manipObj.destroy).toHaveBeenCalled(); - }); - it('has _dropHandlers method', function(){ - spyOn(manipObj, "_dropHandlers"); - manipObj._dropHandlers(); - expect(manipObj._dropHandlers).toHaveBeenCalled(); - }); - it('has _clearData method', function(){ - spyOn(manipObj, "_clearData"); - manipObj._clearData(); - expect(manipObj._clearData).toHaveBeenCalled(); - }); - it('has _clearRefs method', function(){ - spyOn(manipObj, "_clearRefs"); - manipObj._clearRefs(); - expect(manipObj._clearRefs).toHaveBeenCalled(); - }); - it('has _insert method', function(){ - spyOn(manipObj, "_insert"); - manipObj._insert(); - expect(manipObj._insert).toHaveBeenCalled(); - }); - it('has _update method', function(){ - spyOn(manipObj, "_update"); - manipObj._update(); - expect(manipObj._update).toHaveBeenCalled(); - }); - - }); - }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/provider.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/provider.test.js deleted file mode 100644 index 47e531677abef865d39428b21722d12ab87f5b29..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/provider.test.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'Magento_Ui/js/lib/component/provider' - ], function (provider) { - 'use strict'; - - describe( 'Magento_Ui/js/lib/component/provider', function(){ - var providerObj, - returnedValue; - - beforeEach(function(){ - providerObj = provider; - }); - it('has observe method', function(){ - returnedValue = providerObj.observe("elems"); - expect(typeof returnedValue).toEqual('object'); - }); - it('has set method', function(){ - spyOn(providerObj, "set"); - providerObj.set(); - expect(providerObj.set).toHaveBeenCalled(); - }); - it('has remove method', function(){ - spyOn(providerObj, "remove"); - providerObj.remove(); - expect(providerObj.remove).toHaveBeenCalled(); - }); - it('has restore method', function(){ - spyOn(providerObj, "restore"); - providerObj.restore(); - expect(providerObj.restore).toHaveBeenCalled(); - }); - it('has removeStored method', function(){ - spyOn(providerObj, "removeStored"); - providerObj.removeStored(); - expect(providerObj.removeStored).toHaveBeenCalled(); - }); - }); - }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/traversal.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/traversal.test.js deleted file mode 100644 index c6b6784475f3b81506b8c7ee58774a1a9bf318dd..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/traversal.test.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'Magento_Ui/js/lib/component/traversal' - ], function (traversal) { - 'use strict'; - - describe( 'Magento_Ui/js/lib/component/traversal', function(){ - var traversalObj; - - beforeEach(function(){ - traversalObj = traversal; - }); - it('has delegate method', function(){ - spyOn(traversalObj, "delegate"); - traversalObj.delegate(); - expect(traversalObj.delegate).toHaveBeenCalled(); - }); - }); - }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/i18n.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/i18n.test.js index 8d0a99361ea547eb8b1894346861c20a6fceae42..8f7485a2f0bed94f9460be567d8e39c2f7ded2cb 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/i18n.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/i18n.test.js @@ -82,36 +82,5 @@ define([ expect(elWithVariable.attr(dataTranslateAttrName)) .toEqual(dataTranslateAttr.replace(/\$/g, variableText).replace(/\&/g, variableText)); }); - - it('if inline translation is on, ' + - 'and there is translation for this text,' + - ' set translated text for element', function () { - turnOnInlineTranslation(); - $.mage.translate.add(staticText, staticTextTranslatedRaw); - $.mage.translate.add(variableText, variableTranslatedRaw); - spyOn($.mage.translate, 'parsedTranslate').and.callThrough(); - - context.config.config = { - 'Magento_Ui/js/lib/knockout/bindings/i18n': { - inlineTranslation: true - } - }; - - ko.applyBindingsToNode(elWithStaticText[0], { - i18n: staticText - }); - ko.applyBindingsToNode(elWithVariable[0], { - i18n: variable - }); - - expect($.mage.translate.parsedTranslate).toHaveBeenCalledWith(staticText); - expect($.mage.translate.parsedTranslate).toHaveBeenCalledWith(variableText); - expect(elWithStaticText.text()).toEqual(staticTextTranslated); - expect(elWithVariable.text()).toEqual(variableTranslated); - expect(elWithStaticText.attr(dataTranslateAttrName)) - .toEqual(dataTranslateAttr.replace(/\$/g, staticText).replace(/\&/g, staticTextTranslated)); - expect(elWithVariable.attr(dataTranslateAttrName)) - .toEqual(dataTranslateAttr.replace(/\$/g, variableText).replace(/\&/g, variableTranslated)); - }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/events.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/events.test.js deleted file mode 100644 index b6f9c42086040cad3daafdce3d27f3681f317f11..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/events.test.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - - -define([ - 'Magento_Ui/js/lib/registry/events' -], function (EventBus) { - 'use strict'; - - describe('Magento_Ui/js/lib/registry/events', function () { - var storage = { - has : function(){ - return false; - }, - get : function(){ - return []; - } - }, - eventsClass = new EventBus(storage); - - describe('"resolve" method', function () { - it('Check for defined ', function () { - expect(eventsClass.resolve()).toBeDefined(); - }); - it('Check answer type', function () { - var type = typeof(eventsClass.resolve()); - - expect(type).toEqual('object'); - }); - }); - describe('"wait" method', function () { - it('Check for defined ', function () { - expect(eventsClass.wait([],{})).toBeDefined(); - }); - it('Check return object property "requests" defined', function () { - var thisObject = eventsClass.wait([],{}).requests; - - expect(thisObject).toBeDefined(); - }); - it('Check return object property "requests" type', function () { - var thisObject = typeof(eventsClass.wait([],{}).requests); - - expect(thisObject).toEqual('object'); - }); - }); - describe('"_resolve" method', function () { - it('Check completion method', function () { - eventsClass.request = [{ - callback: function(){return true;}, - deps: {} - }]; - expect(eventsClass._resolve(0)).toEqual(false); - }); - }); - }); -}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js index fd814d0a68fd41a79daf74825595cbb402a6f752..a45deb1df23afc9263ad1476732ce58c912e6752 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js @@ -38,13 +38,6 @@ define([ expect(type).toEqual('object'); }); - it('Check assigned value after used method', function () { - var elem = 'test', - prop = 'magento'; - - registry.set(elem, prop); - expect(registry.storage.data.get(elem)).toEqual(prop); - }); }); describe('"registry.get" method', function () { it('Check for defined', function () { @@ -63,14 +56,6 @@ define([ expect(type).toBeFalsy(); }); - it('Check called callback with arguments', function () { - var elems = ['magento'], - callback = function () {}; - - registry.events.wait = jasmine.createSpy(); - registry.get(elems, callback); - expect(registry.events.wait).toHaveBeenCalledWith(elems, callback); - }); }); describe('"registry.remove" method', function () { it('Check for defined', function () { @@ -89,13 +74,6 @@ define([ expect(type).toEqual('object'); }); - it('Check called registry.storage.remove with arguments', function () { - var elems = ['magento']; - - registry.storage.remove = jasmine.createSpy(); - registry.remove(elems); - expect(registry.storage.remove).toHaveBeenCalledWith(elems); - }); }); describe('"registry.has" method', function () { it('Check for defined', function () { @@ -106,24 +84,11 @@ define([ expect(type).toEqual('function'); }); - it('Check returned value if registry.storage has property', function () { - var name = 'magento'; - - registry.storage.data.set(name, 'magentoValue'); - expect(registry.has(name)).toEqual(true); - }); it('Check returned value if registry.storage has not property', function () { var name = 'magentoNonProperty'; expect(registry.has(name)).toEqual(false); }); - it('Check called registry.storage.has with arguments', function () { - var elems = ['magento']; - - registry.storage.has = jasmine.createSpy(); - registry.has(elems); - expect(registry.storage.has).toHaveBeenCalledWith(elems); - }); }); describe('"registry.async" method', function () { it('Check for defined', function () { @@ -149,22 +114,6 @@ define([ expect(type).toEqual('object'); }); - it('Check registry.storage for defined', function () { - registry.create(); - expect(registry.storage).toBeDefined(); - }); - it('Check registry.storage type', function () { - registry.create(); - expect(typeof registry.storage).toEqual('object'); - }); - it('Check registry.events for defined', function () { - registry.create(); - expect(registry.events).toBeDefined(); - }); - it('Check registry.events type', function () { - registry.create(); - expect(typeof registry.events).toEqual('object'); - }); }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/storage.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/storage.test.js deleted file mode 100644 index a2e2fd3c1206b79b1da01ebba2f4cdb248a25ed7..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/storage.test.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -/*eslint max-nested-callbacks: 0*/ - -define([ - 'Magento_Ui/js/lib/registry/storage' -], function (Storage) { - 'use strict'; - - describe('Magento_Ui/js/lib/registry/storage', function () { - var storage = new Storage(); - describe('"Storage constructor"', function () { - it('Check for defined', function () { - expect(storage).toBeDefined(); - }); - it('Check type', function () { - var type = typeof storage; - - expect(type).toEqual('object'); - }); - it('Check storage.data for defined', function () { - var data = storage.data; - - expect(typeof data).toEqual('object'); - }); - }); - describe('"storage.get" method', function () { - it('Check for defined', function () { - expect(storage.hasOwnProperty('get')).toBeDefined(); - }); - it('Check type', function () { - var type = typeof storage.get; - - expect(type).toEqual('function'); - }); - it('Check returned value if argument is array values', function () { - var elem = 'magento', - value = 'magentoValue'; - - storage.data.set(elem, value); - expect(storage.get([elem])).toEqual([value]); - }); - it('Check returned value if called withot arguments', function () { - expect(storage.get()).toEqual([]); - }); - }); - describe('"storage.set" method', function () { - it('Check for defined', function () { - expect(storage.hasOwnProperty('set')).toBeDefined(); - }); - it('Check type', function () { - var type = typeof storage.set; - - expect(type).toEqual('function'); - }); - it('Check returned value for defined', function () { - expect(storage.set()).toBeDefined(); - }); - it('Check returned value type', function () { - var type = typeof storage.set(); - - expect(type).toEqual('object'); - }); - it('Check returned value if argument is "elem, value" ', function () { - var elem = 'magento', - value = 'magentoValue'; - - storage.set(elem, value); - expect(storage.data.get(elem)).toEqual(value); - }); - }); - describe('"storage.remove" method', function () { - it('Check for defined', function () { - expect(storage.hasOwnProperty('remove')).toBeDefined(); - }); - it('Check type', function () { - var type = typeof storage.remove; - - expect(type).toEqual('function'); - }); - it('Check returned value for defined', function () { - expect(storage.remove([])).toBeDefined(); - }); - it('Check returned value type', function () { - var type = typeof storage.remove([]); - - expect(type).toEqual('object'); - }); - it('Check if called with argument "elem" ', function () { - var elem = 'magento', - value = 'magentoValue'; - - storage.data.set(elem, value); - storage.remove([elem]); - expect(storage.data.get(elem)).not.toBeDefined(); - }); - }); - describe('"storage.has" method', function () { - it('Check for defined', function () { - expect(storage.hasOwnProperty('has')).toBeDefined(); - }); - it('Check type', function () { - var type = typeof storage.has; - - expect(type).toEqual('function'); - }); - it('Check returned value if data has element property', function () { - var elem = 'magento', - value = 'magentoValue'; - - storage.data.set(elem, value); - expect(storage.has([elem])).toEqual(true); - }); - it('Check returned value if data has not element property', function () { - expect(storage.has(['value'])).toEqual(false); - }); - }); - }); -}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js deleted file mode 100644 index 984bdf0cc3919ca35d55f82bd730aa129ea935e6..0000000000000000000000000000000000000000 --- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Copyright © 2016 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'jquery', - 'text!tests/assets/gallery/config.json', - 'mage/gallery/gallery', - 'magnifier/magnify' -], function ($, config, gallery, magnifier) { - - 'use strict'; - - var body = $('body'), - galleryAPI, - conf = JSON.parse(config), - gallerySelector = '[data-gallery-role="gallery"]', - magnifierSelector = '[data-gallery-role="magnifier"]', - stageSelector = '[data-gallery-role="stage-shaft"]', - navSelector = '[data-gallery-role="nav-frame"]', - dotSelector = '[data-nav-type="dot"]', - navWrap = '[data-gallery-role="nav-wrap"]', - dataToUpdate = [ - { - img: 'data:image/png;base64,' + - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII=' - }, { - img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' + - 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII=' - }, { - img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' + - 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII=' - }, { - img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' + - 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII=' - } - ], - waitsFor = function (test, fn) { - if (test()) { - fn(); - } else { - setTimeout(function () { - waitsFor(test, fn); - }, 10); - } - }; - - gallery(magnifier(conf, body), body); - - beforeEach(function () { - galleryAPI = $(gallerySelector).data('gallery'); - }); - - describe('magnifier/magnify', function () { - - if ('ontouchstart' in document.documentElement) { - it('magnifier is not initialized on mobile platforms', function () { - expect($(magnifierSelector).length).toBe(0); - }); - } else { - it('magnifier is defined', function () { - expect($(gallerySelector).magnify).toBeDefined(); - expect(typeof $(gallerySelector).magnify).toBe('function'); - expect($(magnifierSelector).hasClass('hidden')).toBeTruthy(); - }); - - it('magnifier is initialized on desktop platforms', function () { - expect($(magnifierSelector + ' img').attr('src')).toBe($(stageSelector + ' img').attr('src')); - }); - it('magnifier appearing on event on desktop platforms', function () { - var ev = conf.magnifierOpts.eventType === 'click' ? 'click' : 'mouseover'; - expect($($(magnifierSelector).children()[0]).hasClass('magnifier-large hidden')).toBeTruthy(); - $(stageSelector + ' img').trigger(ev); - expect($($(magnifierSelector).children()[0]).hasClass('magnifier-large hidden')).toBeFalsy(); - $(stageSelector + ' img').trigger('mouseleave'); - }); - } - }); - - describe('mage/gallery/gallery', function () { - - it('gallery loaded', function () { - expect($(navSelector).length).toBe(conf.data.length); - }); - - it('show last', function () { - galleryAPI.last(); - expect($(navSelector + ':eq(' + (conf.data.length - 1) + ')') - .attr('data-active') === 'true').toBeTruthy(); - }); - - it('show first', function () { - galleryAPI.first(); - expect($(navSelector + ':eq(0)').attr('data-active') === 'true').toBeTruthy(); - }); - - it('show next', function () { - galleryAPI.next(); - expect($(navSelector + ':eq(1)').attr('data-active') === 'true').toBeTruthy(); - }); - - it('show previous', function () { - galleryAPI.prev(); - expect($(navSelector + ':eq(0)').attr('data-active') === 'true').toBeTruthy(); - }); - - it('show by number', function () { - galleryAPI.seek(3); - expect($(navSelector + ':eq(2)').attr('data-active') === 'true').toBeTruthy(); - }); - - it('update options', function () { - expect($(navSelector).attr('data-nav-type') === 'thumb').toBeTruthy(); - galleryAPI.updateOptions({ - nav: 'dots' - }); - expect($(dotSelector).length).toBe(conf.data.length); - }); - - it('update data', function () { - galleryAPI.updateData(dataToUpdate); - expect($(dotSelector).length).toBe(dataToUpdate.length); - }); - - it('breakpoints override configs', function () { - expect($('.fotorama__arr').css('display')).toBe('block'); - }); - - it('fullscreen enter', function (done) { - expect($(navWrap).css('display') === 'block').toBeTruthy(); - galleryAPI.fotorama.requestFullScreen(); - - waitsFor(function () { - return $(navWrap).css('display') !== 'block'; - }, function () { - expect($(navWrap).css('display') === 'none').toBeTruthy(); - done(); - }); - }); - - it('fullscreen exit', function (done) { - expect($(navWrap).css('display') === 'none').toBeTruthy(); - galleryAPI.fotorama.cancelFullScreen(); - - waitsFor(function () { - return $(navWrap).css('display') !== 'none'; - }, function () { - expect($(navWrap).css('display') === 'block').toBeTruthy(); - done(); - }); - }); - - }); -}); diff --git a/package.json.sample b/package.json.sample index 384aa88c65611a9e20892aade71488b31847ac5c..40169b3179052d98ad2c1a79baf48e376689f3c1 100644 --- a/package.json.sample +++ b/package.json.sample @@ -18,7 +18,7 @@ "grunt-contrib-connect": "^0.9.0", "grunt-contrib-cssmin": "^0.10.0", "grunt-contrib-imagemin": "^0.9.2", - "grunt-contrib-jasmine": "^0.8.1", + "grunt-contrib-jasmine": "^1.0.0", "grunt-contrib-less": "^0.12.0", "grunt-contrib-watch": "^0.6.1", "grunt-eslint": "17.3.1",