diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js index 075a1fdaf1fc118f42832fa438762715420a585a..2d5e0b3a270b71991a48e526aaa8248c9a60c87b 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js @@ -296,7 +296,7 @@ define([ getShippingAddress: function () { var address = quote.shippingAddress(); - if (address.postcode === null) { + if (_.isNull(address.postcode) || _.isUndefined(address.postcode)) { return {}; } diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml index 7e38e6f0303b64e55ce6e126a2653f0ce7420df7..7bc8fe883dc2df1945871e039d9d67d52ab40516 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWithBraintreePaypalTest.xml @@ -50,5 +50,21 @@ <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> <constraint name="Magento\Sales\Test\Constraint\AssertCaptureInCommentsHistory" /> </variation> + <variation name="OnePageCheckoutWithBraintreePaypalTestVariation3" summary="Guest Checkout virtual quote with Braintree PayPal from Cart" ticketId="MAGETWO-41559"> + <data name="products/0" xsi:type="string">catalogProductVirtual::product_50_dollar</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">50.00</item> + </data> + <data name="payment/method" xsi:type="string">braintree_paypal</data> + <data name="configData" xsi:type="string">braintree, braintree_paypal, braintree_paypal_skip_order_review</data> + <data name="status" xsi:type="string">Processing</data> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S2</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderGrandTotal" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertAuthorizationInCommentsHistory" /> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php index 0ff7f164b0996108ab332343b8b6528e0af54630..d61e2fff6337a4ddc3c616bd9dbc1ad2c8e0540e 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWithPaypalStep.php @@ -6,6 +6,7 @@ namespace Magento\Braintree\Test\TestStep; use Magento\Checkout\Test\Constraint\AssertGrandTotalOrderReview; +use Magento\Checkout\Test\Constraint\AssertBillingAddressAbsentInPayment; use Magento\Checkout\Test\Page\CheckoutOnepage; use Magento\Checkout\Test\Page\CheckoutOnepageSuccess; use Magento\Mtf\Fixture\FixtureFactory; @@ -26,6 +27,11 @@ class PlaceOrderWithPaypalStep implements TestStepInterface */ private $assertGrandTotalOrderReview; + /** + * @var AssertBillingAddressAbsentInPayment + */ + private $assertBillingAddressAbsentInPayment; + /** * @var CheckoutOnepageSuccess */ @@ -49,6 +55,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface /** * @param CheckoutOnepage $checkoutOnepage * @param AssertGrandTotalOrderReview $assertGrandTotalOrderReview + * @param AssertBillingAddressAbsentInPayment $assertBillingAddressAbsentInPayment * @param CheckoutOnepageSuccess $checkoutOnepageSuccess * @param FixtureFactory $fixtureFactory * @param array $products @@ -57,6 +64,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface public function __construct( CheckoutOnepage $checkoutOnepage, AssertGrandTotalOrderReview $assertGrandTotalOrderReview, + AssertBillingAddressAbsentInPayment $assertBillingAddressAbsentInPayment, CheckoutOnepageSuccess $checkoutOnepageSuccess, FixtureFactory $fixtureFactory, array $products, @@ -64,6 +72,7 @@ class PlaceOrderWithPaypalStep implements TestStepInterface ) { $this->checkoutOnepage = $checkoutOnepage; $this->assertGrandTotalOrderReview = $assertGrandTotalOrderReview; + $this->assertBillingAddressAbsentInPayment = $assertBillingAddressAbsentInPayment; $this->checkoutOnepageSuccess = $checkoutOnepageSuccess; $this->fixtureFactory = $fixtureFactory; $this->products = $products; @@ -78,6 +87,9 @@ class PlaceOrderWithPaypalStep implements TestStepInterface if (isset($this->prices['grandTotal'])) { $this->assertGrandTotalOrderReview->processAssert($this->checkoutOnepage, $this->prices['grandTotal']); } + + $this->assertBillingAddressAbsentInPayment->processAssert($this->checkoutOnepage); + $parentWindow = $this->checkoutOnepage->getPaymentBlock() ->getSelectedPaymentMethodBlock() ->clickPayWithPaypal(); diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php index 789069299d22c62342e65d46c8492d37d7600692..49b900e4eedce313df7809a574e150f3c63c4787 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Login.php @@ -90,6 +90,19 @@ class Login extends Form $this->waitForElementNotVisible($this->loadingMask); } + /** + * Fill required fields for guest checkout. + * + * @param FixtureInterface $customer + * @return void + */ + public function fillGuestFields(FixtureInterface $customer) + { + $mapping = $this->dataMapping(); + $this->_rootElement->find($mapping['email']['selector'], $mapping['email']['strategy']) + ->setValue($customer->getEmail()); + } + /** * Click continue on checkout method block. * diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php new file mode 100644 index 0000000000000000000000000000000000000000..62fd88e98eed4b4ee9d19393525d55be898ca248 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertBillingAddressAbsentInPayment.php @@ -0,0 +1,43 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Checkout\Test\Constraint; + +use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Assert billing address is not present in selected payment method. + */ +class AssertBillingAddressAbsentInPayment extends AbstractConstraint +{ + /** + * Assert billing address is not present in selected payment method. + * + * @param CheckoutOnepage $checkoutOnepage + * @return void + */ + public function processAssert(CheckoutOnepage $checkoutOnepage) + { + \PHPUnit_Framework_Assert::assertFalse( + $checkoutOnepage->getPaymentBlock() + ->getSelectedPaymentMethodBlock() + ->getBillingBlock() + ->isVisible(), + 'Billing address is present in payment method' + ); + } + + /** + * Returns string representation of successful assertion + * + * @return string + */ + public function toString() + { + return 'Billing address is absent in payment method'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php index 444b98adb7f836b140a52d6c3644b6ee9e7c3c72..eef5f2fbdd03a9b7325b01aa8b5d4293e566ffbb 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/SelectCheckoutMethodStep.php @@ -51,6 +51,13 @@ class SelectCheckoutMethodStep implements TestStepInterface */ private $clickProceedToCheckoutStep; + /** + * Shipping carrier and method. + * + * @var array + */ + protected $shipping; + /** * @constructor * @param CheckoutOnepage $checkoutOnepage @@ -58,19 +65,22 @@ class SelectCheckoutMethodStep implements TestStepInterface * @param LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend * @param ClickProceedToCheckoutStep $clickProceedToCheckoutStep * @param string $checkoutMethod + * @param array $shipping */ public function __construct( CheckoutOnepage $checkoutOnepage, Customer $customer, LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend, ClickProceedToCheckoutStep $clickProceedToCheckoutStep, - $checkoutMethod + $checkoutMethod, + array $shipping = [] ) { $this->checkoutOnepage = $checkoutOnepage; $this->customer = $customer; $this->logoutCustomerOnFrontend = $logoutCustomerOnFrontend; $this->clickProceedToCheckoutStep = $clickProceedToCheckoutStep; $this->checkoutMethod = $checkoutMethod; + $this->shipping = $shipping; } /** @@ -87,6 +97,10 @@ class SelectCheckoutMethodStep implements TestStepInterface } else { $this->checkoutOnepage->getLoginBlock()->loginCustomer($this->customer); } + } elseif ($this->checkoutMethod === 'guest') { + if (empty($this->shipping)) { + $this->checkoutOnepage->getLoginBlock()->fillGuestFields($this->customer); + } } } diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml index 2f20c20f6e87f2f0df2f8e4991d4d3d5a0b26970..24b369200e71d99df604457603969594b40862ca 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/di.xml @@ -12,6 +12,11 @@ <argument name="severity" xsi:type="string">middle</argument> </arguments> </type> + <type name="Magento\Checkout\Test\Constraint\AssertBillingAddressAbsentInPayment"> + <arguments> + <argument name="severity" xsi:type="string">S2</argument> + </arguments> + </type> <type name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage"> <arguments> <argument name="severity" xsi:type="string">S0</argument> diff --git a/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml b/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml index f6c93407a0ccdb42eed3c22519c9d3b109e648a8..8e742ab30ba960dd022870fea86e08c74d71c3fd 100644 --- a/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml +++ b/dev/tests/functional/tests/app/Magento/Payment/Test/Repository/CreditCard.xml @@ -14,6 +14,13 @@ <field name="cc_cid" xsi:type="string">123</field> </dataset> + <dataset name="visa_alt"> + <field name="cc_number" xsi:type="string">4012888888881881</field> + <field name="cc_exp_month" xsi:type="string">02 - February</field> + <field name="cc_exp_year" xsi:type="string">2021</field> + <field name="cc_cid" xsi:type="string">123</field> + </dataset> + <dataset name="amex_default"> <field name="cc_number" xsi:type="string">378282246310005</field> <field name="cc_exp_month" xsi:type="string">02 - February</field> diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml b/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml index ac69bfb9f47e4550e6ab4592cccbdf56cf682da3..2cafc815fed1dfc1865d1f2627f536d1ba909563 100644 --- a/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml +++ b/dev/tests/functional/tests/app/Magento/Vault/Test/TestCase/DeleteSavedCreditCardTest.xml @@ -26,7 +26,7 @@ <item name="method" xsi:type="string">payflowpro</item> <item name="creditCardClass" xsi:type="string">credit_card</item> <item name="creditCard" xsi:type="array"> - <item name="dataset" xsi:type="string">amex_default</item> + <item name="dataset" xsi:type="string">visa_alt</item> </item> </item> <item name="2" xsi:type="array"> @@ -43,7 +43,7 @@ <item name="method" xsi:type="string">payflowpro</item> <item name="creditCardClass" xsi:type="string">credit_card</item> <item name="creditCard" xsi:type="array"> - <item name="dataset" xsi:type="string">amex_default</item> + <item name="dataset" xsi:type="string">visa_alt</item> </item> <item name="vault" xsi:type="array"> <item name="method" xsi:type="string">payflowpro_cc_vault</item>