diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/GalleryManagement.php b/app/code/Magento/Catalog/Model/Product/Gallery/GalleryManagement.php index 950e2253a95dc21218ee666bb5d747b3991d3118..d2a3196868543db0fb9832aca40529df2c32f965 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/GalleryManagement.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/GalleryManagement.php @@ -94,13 +94,16 @@ class GalleryManagement implements \Magento\Catalog\Api\ProductAttributeMediaGal } $found = false; foreach ($existingMediaGalleryEntries as $key => $existingEntry) { + $entryTypes = (array)$entry->getTypes(); + $existingEntryTypes = (array)$existingMediaGalleryEntries[$key]->getTypes(); + $existingMediaGalleryEntries[$key]->setTypes(array_diff($existingEntryTypes, $entryTypes)); + if ($existingEntry->getId() == $entry->getId()) { $found = true; if ($entry->getFile()) { $entry->setId(null); } $existingMediaGalleryEntries[$key] = $entry; - break; } } if (!$found) { diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php b/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php index 3c757f8a05a2daf0ab30c9efb2031c15cefa1d4f..ec2521350d14d991e9c8deff2a74f5ff4865fbfc 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php @@ -298,11 +298,11 @@ class Processor if (is_array($mediaAttribute)) { foreach ($mediaAttribute as $attribute) { if (in_array($attribute, $mediaAttributeCodes)) { - $product->setData($attribute, null); + $product->setData($attribute, 'no_selection'); } } } elseif (in_array($mediaAttribute, $mediaAttributeCodes)) { - $product->setData($mediaAttribute, null); + $product->setData($mediaAttribute, 'no_selection'); } return $this; diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/GalleryManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/GalleryManagementTest.php index fb2d197749e01bdd15b1574d2fca4831a04e4583..e3845a2b51cec716d37e27430023ee2be2409bef 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/GalleryManagementTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/GalleryManagementTest.php @@ -191,20 +191,33 @@ class GalleryManagementTest extends \PHPUnit_Framework_TestCase $productSku = 'testProduct'; $entryMock = $this->getMock(\Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface::class); $entryId = 42; + $entrySecondId = 43; $this->productRepositoryMock->expects($this->once())->method('get')->with($productSku) ->willReturn($this->productMock); $existingEntryMock = $this->getMock( \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface::class ); + $existingSecondEntryMock = $this->getMock( + \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface::class + ); + $existingEntryMock->expects($this->once())->method('getId')->willReturn($entryId); + $existingEntryMock->expects($this->once())->method('getTypes')->willReturn(['small_image']); + $existingEntryMock->expects($this->once())->method('setTypes')->with(['small_image']); + $existingSecondEntryMock->expects($this->once())->method('getId')->willReturn($entrySecondId); + $existingSecondEntryMock->expects($this->once())->method('getTypes')->willReturn(['image']); + $existingSecondEntryMock->expects($this->once())->method('setTypes')->with([]); $this->productMock->expects($this->once())->method('getMediaGalleryEntries') - ->willReturn([$existingEntryMock]); - $entryMock->expects($this->once())->method('getId')->willReturn($entryId); + ->willReturn([$existingEntryMock, $existingSecondEntryMock]); + + $entryMock->expects($this->exactly(2))->method('getId')->willReturn($entryId); $entryMock->expects($this->once())->method('getFile')->willReturn("base64"); $entryMock->expects($this->once())->method('setId')->with(null); + $entryMock->expects($this->exactly(2))->method('getTypes')->willReturn(['image']); $this->productMock->expects($this->once())->method('setMediaGalleryEntries') - ->willReturn([$entryMock]); + ->with([$entryMock, $existingSecondEntryMock]) + ->willReturnSelf(); $this->productRepositoryMock->expects($this->once())->method('save')->with($this->productMock); $this->assertTrue($this->model->update($productSku, $entryMock)); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/ProcessorTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/ProcessorTest.php index 61d4e3a5c76d5a3fdf57438c082a210c9b60ac5a..50c3c4ad0122c5490fa535c07fa7d677514d91c9 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/ProcessorTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Gallery/ProcessorTest.php @@ -197,4 +197,56 @@ class ProcessorTest extends \PHPUnit_Framework_TestCase [false] ]; } + + /** + * @param int $setDataExpectsCalls + * @param string|null $setDataArgument + * @param array|string $mediaAttribute + * @dataProvider clearMediaAttributeDataProvider + */ + public function testClearMediaAttribute($setDataExpectsCalls, $setDataArgument, $mediaAttribute) + { + $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) + ->disableOriginalConstructor() + ->getMock(); + + $productMock->expects($this->exactly($setDataExpectsCalls)) + ->method('setData') + ->with($setDataArgument, 'no_selection'); + + $this->mediaConfig->expects($this->once()) + ->method('getMediaAttributeCodes') + ->willReturn(['image', 'small_image']); + + $this->assertSame($this->model, $this->model->clearMediaAttribute($productMock, $mediaAttribute)); + } + + /** + * @return array + */ + public function clearMediaAttributeDataProvider() + { + return [ + [ + 'setDataExpectsCalls' => 1, + 'setDataArgument' => 'image', + 'mediaAttribute' => 'image', + ], + [ + 'setDataExpectsCalls' => 1, + 'setDataArgument' => 'image', + 'mediaAttribute' => ['image'], + ], + [ + 'setDataExpectsCalls' => 0, + 'setDataArgument' => null, + 'mediaAttribute' => 'some_image', + ], + [ + 'setDataExpectsCalls' => 0, + 'setDataArgument' => null, + 'mediaAttribute' => ['some_image'], + ], + ]; + } } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php index 324404ead6c9f5845526512ed6ed39e87f94157c..0f5a0a425a5a5358cf98715827a7950d5e0489fd 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php @@ -237,8 +237,8 @@ class ProductAttributeMediaGalleryManagementInterfaceTest extends \Magento\TestF $targetProduct = $this->getTargetSimpleProduct(); $this->assertEquals('/m/a/magento_image.jpg', $targetProduct->getData('thumbnail')); - $this->assertNull($targetProduct->getData('image')); - $this->assertNull($targetProduct->getData('small_image')); + $this->assertEquals('no_selection', $targetProduct->getData('image')); + $this->assertEquals('no_selection', $targetProduct->getData('small_image')); $mediaGallery = $targetProduct->getData('media_gallery'); $this->assertCount(1, $mediaGallery['images']); $updatedImage = array_shift($mediaGallery['images']); diff --git a/dev/tests/functional/credentials.xml.dist b/dev/tests/functional/credentials.xml.dist index 88794d183e8781d5cea1c9199370c67daae1585c..78186091a568ddba7368126c4b9217714e35d127 100644 --- a/dev/tests/functional/credentials.xml.dist +++ b/dev/tests/functional/credentials.xml.dist @@ -32,10 +32,15 @@ <field path="payment/authorizenet_directpost/trans_key" value="" /> <field path="payment/authorizenet_directpost/trans_md5" value="" /> - <field path="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" value="" /> - <field path="payment/braintree_section/braintree/braintree_required/merchant_id" value="" /> - <field path="payment/braintree_section/braintree/braintree_required/public_key" value="" /> - <field path="payment/braintree_section/braintree/braintree_required/private_key" value="" /> + <field replace="braintree_enabled_fraud_merchant_account_id" value="" /> + <field replace="braintree_enabled_fraud_merchant_id" value="" /> + <field replace="braintree_enabled_fraud_public_key" value="" /> + <field replace="braintree_enabled_fraud_private_key" value="" /> + + <field replace="braintree_disabled_fraud_merchant_account_id" value="" /> + <field replace="braintree_disabled_fraud_merchant_id" value="" /> + <field replace="braintree_disabled_fraud_public_key" value="" /> + <field replace="braintree_disabled_fraud_private_key" value="" /> <field path="payment/paypal_group_all_in_one/wpp_usuk/wpp_required_settings/wpp_and_express_checkout/business_account" value="" /> <field path="payment/paypal_group_all_in_one/wpp_usuk/wpp_required_settings/wpp_and_express_checkout/api_username" value="" /> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml index 7f01e4f46106c020c10457a8f3e0fb0a7f1de8d7..268ce5795221dbbe3f545891c4d2e420bc87440e 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/ConfigData.xml @@ -11,26 +11,26 @@ <field name="payment/braintree_section/braintree/braintree_required/merchant_id" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> <item name="scope_id" xsi:type="number">1</item> - <item name="label" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ID</item> - <item name="value" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ID</item> + <item name="label" xsi:type="string">Merchant ID</item> + <item name="value" xsi:type="string">%braintree_disabled_fraud_merchant_id%</item> </field> <field name="payment/braintree_section/braintree/braintree_required/public_key" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> <item name="scope_id" xsi:type="number">1</item> - <item name="label" xsi:type="string">PAYMENT_PAYMENT_BRAINTREE_PUBLIC_KEY</item> - <item name="value" xsi:type="string">PAYMENT_PAYMENT_BRAINTREE_PUBLIC_KEY</item> + <item name="label" xsi:type="string">Public Key</item> + <item name="value" xsi:type="string">%braintree_disabled_fraud_public_key%</item> </field> <field name="payment/braintree_section/braintree/braintree_required/private_key" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> <item name="scope_id" xsi:type="number">1</item> - <item name="label" xsi:type="string">PAYMENT_BRAINTREE_PRIVATE_KEY</item> - <item name="value" xsi:type="string">PAYMENT_BRAINTREE_PRIVATE_KEY</item> + <item name="label" xsi:type="string">Private Key</item> + <item name="value" xsi:type="string">%braintree_disabled_fraud_private_key%</item> </field> <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> <item name="scope_id" xsi:type="number">1</item> - <item name="label" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ACCOUNT_ID</item> - <item name="value" xsi:type="string">PAYMENT_BRAINTREE_MERCHANT_ACCOUNT_ID</item> + <item name="label" xsi:type="string">Merchant Account ID</item> + <item name="value" xsi:type="string">%braintree_disabled_fraud_merchant_account_id%</item> </field> <field name="payment/braintree_section/braintree/braintree_required/payment_action" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -51,6 +51,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_rollback"> <field name="payment/braintree/active" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -59,6 +60,16 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + + <dataset name="braintree_incorrect_merchant_account_id"> + <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Merchant Account ID</item> + <item name="value" xsi:type="string">incorrect</item> + </field> + </dataset> + <dataset name="braintree_sale"> <field name="payment/braintree/payment_action" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -67,6 +78,7 @@ <item name="value" xsi:type="string">authorize_capture</item> </field> </dataset> + <dataset name="braintree_3d_secure"> <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -75,6 +87,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_3d_secure_rollback"> <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -83,6 +96,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_3d_secure_uk"> <field name="payment/braintree/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -107,6 +121,7 @@ </item> </field> </dataset> + <dataset name="braintree_3d_secure_uk_rollback"> <field name="payment/braintree_section/braintree/braintree_3dsecure/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -121,6 +136,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_3d_secure_not_triggered_due_threshold"> <field name="payment/braintree/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -135,6 +151,7 @@ <item name="value" xsi:type="number">300</item> </field> </dataset> + <dataset name="braintree_3d_secure_not_triggered_due_threshold_rollback"> <field name="payment/braintree/verify_3dsecure" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -143,6 +160,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_use_vault"> <field name="payment/braintree_section/braintree/braintree_cc_vault_active" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -151,6 +169,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_use_vault_rollback"> <field name="payment/braintree_section/braintree/braintree_cc_vault_active" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -159,6 +178,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_paypal"> <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -173,6 +193,7 @@ <item name="value" xsi:type="string">authorize</item> </field> </dataset> + <dataset name="braintree_paypal_rollback"> <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -181,7 +202,14 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_paypal_sale"> + <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Yes</item> + <item name="value" xsi:type="number">1</item> + </field> <field name="payment/braintree_section/braintree/braintree_paypal/payment_action" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> <item name="scope_id" xsi:type="number">1</item> @@ -189,6 +217,16 @@ <item name="value" xsi:type="string">authorize_capture</item> </field> </dataset> + + <dataset name="braintree_paypal_sale_rollback"> + <field name="payment/braintree_section/braintree/active_braintree_paypal" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">No</item> + <item name="value" xsi:type="number">0</item> + </field> + </dataset> + <dataset name="braintree_paypal_skip_order_review"> <field name="payment/braintree_section/braintree/braintree_paypal/skip_order_review" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -197,6 +235,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_paypal_skip_order_review_rollback"> <field name="payment/braintree_section/braintree/braintree_paypal/skip_order_review" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -205,6 +244,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_paypal_use_vault"> <field name="payment/braintree_section/braintree/braintree_paypal/braintree_paypal_vault_active" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -213,6 +253,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_paypal_use_vault_rollback"> <field name="payment/braintree_section/braintree/braintree_paypal/braintree_paypal_vault_active" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -221,6 +262,7 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + <dataset name="braintree_fraudprotection"> <field name="payment/braintree/fraudprotection" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -229,6 +271,7 @@ <item name="value" xsi:type="number">1</item> </field> </dataset> + <dataset name="braintree_fraudprotection_rollback"> <field name="payment/braintree/fraudprotection" xsi:type="array"> <item name="scope" xsi:type="string">payment</item> @@ -237,5 +280,59 @@ <item name="value" xsi:type="number">0</item> </field> </dataset> + + <dataset name="braintree_fraud_tool_enabled_account"> + <field name="payment/braintree_section/braintree/braintree_required/merchant_id" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Merchant ID</item> + <item name="value" xsi:type="string">%braintree_enabled_fraud_merchant_id%</item> + </field> + <field name="payment/braintree_section/braintree/braintree_required/public_key" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Public Key</item> + <item name="value" xsi:type="string">%braintree_enabled_fraud_public_key%</item> + </field> + <field name="payment/braintree_section/braintree/braintree_required/private_key" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Private Key</item> + <item name="value" xsi:type="string">%braintree_enabled_fraud_private_key%</item> + </field> + <field name="payment/braintree_section/braintree/braintree_advanced/merchant_account_id" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Merchant Account ID</item> + <item name="value" xsi:type="string">%braintree_enabled_fraud_merchant_account_id%</item> + </field> + <field name="payment/braintree_section/braintree/braintree_required/payment_action" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Authorize</item> + <item name="value" xsi:type="string">authorize</item> + </field> + <field name="payment/braintree_section/braintree/braintree_advanced/debug" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Yes</item> + <item name="value" xsi:type="number">1</item> + </field> + <field name="payment/braintree_section/braintree/active" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">Yes</item> + <item name="value" xsi:type="number">1</item> + </field> + </dataset> + + <dataset name="braintree_fraud_tool_enabled_account_rollback"> + <field name="payment/braintree/active" xsi:type="array"> + <item name="scope" xsi:type="string">payment</item> + <item name="scope_id" xsi:type="number">1</item> + <item name="label" xsi:type="string">No</item> + <item name="value" xsi:type="number">0</item> + </field> + </dataset> </repository> </config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml index e750aa9cb423444e2cc17b8e269a7a62b9289f20..6aa9383ff2bd1051364b1498d799ebb681714aca 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/Repository/CreditCard.xml @@ -13,17 +13,26 @@ <field name="credit_card_exp_year" xsi:type="string">2020</field> <field name="cvv" xsi:type="string">123</field> </dataset> + <dataset name="visa_braintree_3dsecure"> <field name="credit_card_number" xsi:type="string">4000000000000002</field> <field name="credit_card_exp_month" xsi:type="string">01</field> <field name="credit_card_exp_year" xsi:type="string">20</field> <field name="cvv" xsi:type="string">123</field> </dataset> + <dataset name="visa_braintree_3dsecure_failed"> <field name="credit_card_number" xsi:type="string">4000000000000028</field> <field name="credit_card_exp_month" xsi:type="string">01</field> <field name="credit_card_exp_year" xsi:type="string">2020</field> <field name="cvv" xsi:type="string">123</field> </dataset> + + <dataset name="visa_braintree_fraud_rejected"> + <field name="credit_card_number" xsi:type="string">4000111111111511</field> + <field name="credit_card_exp_month" xsi:type="string">01</field> + <field name="credit_card_exp_year" xsi:type="string">2020</field> + <field name="cvv" xsi:type="string">123</field> + </dataset> </repository> </config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml index 9614923691c6c097702c3a222bfc52edfcd2489a..083bd33feca7b133903b9f83eb12c4d5b3f1fcfa 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml @@ -64,5 +64,28 @@ <constraint name="Magento\Sales\Test\Constraint\AssertCaptureInCommentsHistory" /> <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" /> </variation> + <variation name="CreateOrderBackendTestBraintreeVariation3" summary="Checkout with Braintree Credit Card from Admin (Basic Fraud Protection)" ticketId="MAGETWO-46470"> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S0</data> + <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data> + <data name="products/1" xsi:type="string">configurableProduct::with_one_option</data> + <data name="products/2" xsi:type="string">bundleProduct::bundle_fixed_100_dollar_product</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="taxRule" xsi:type="string">us_ca_ny_rule</data> + <data name="billingAddress/dataset" xsi:type="string">US_address_1_without_email</data> + <data name="saveAddress" xsi:type="string">No</data> + <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data> + <data name="shipping/shipping_method" xsi:type="string">Fixed</data> + <data name="prices" xsi:type="array"> + <item name="grandTotal" xsi:type="string">145.98</item> + </data> + <data name="payment/method" xsi:type="string">braintree</data> + <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> + <data name="creditCard/dataset" xsi:type="string">visa_braintree_fraud_rejected</data> + <data name="configData" xsi:type="string">braintree</data> + <data name="status" xsi:type="string">Processing</data> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderSuccessCreateMessage" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" /> + <constraint name="Magento\Sales\Test\Constraint\AssertOrderInOrdersGridOnFrontend" /> + </variation> </testCase> </config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a2aa551a18170002045f821de2d492ddb7a2082 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutDeclinedTest.xml @@ -0,0 +1,43 @@ +<?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\Checkout\Test\TestCase\OnePageCheckoutDeclinedTest" summary="Error message during OnePageCheckout"> + <variation name="OnePageCheckoutBraintreeDeclinedTestVariation1" summary="Registered Checkout with Braintree Credit Card from Storefront with Advanced Fraud Protection failed" ticketId="MAGETWO-46469"> + <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</data> + <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> + <data name="creditCard/dataset" xsi:type="string">visa_braintree_fraud_rejected</data> + <data name="expectedErrorMessage" xsi:type="string">Transaction has been declined. Please try again later.</data> + <data name="configData" xsi:type="string">braintree_fraud_tool_enabled_account, braintree_fraudprotection</data> + <data name="status" xsi:type="string">Processing</data> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" /> + </variation> + <variation name="OnePageCheckoutBraintreeDeclinedTestVariation2" summary="Checkout with Braintree Credit Card configured with incorrect credentials" ticketId="MAGETWO-46244"> + <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</data> + <data name="checkoutMethod" xsi:type="string">guest</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</data> + <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> + <data name="creditCard/dataset" xsi:type="string">visa_braintree</data> + <data name="expectedErrorMessage" xsi:type="string">Sorry, but something went wrong</data> + <data name="configData" xsi:type="string">braintree, braintree_incorrect_merchant_account_id</data> + <data name="status" xsi:type="string">Processing</data> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml index 920047e7037e135115424a192b9c9cb3267982d5..54fdfc96dc947db330c37b701132bfc0e3fcbeb0 100644 --- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutTest.xml @@ -23,7 +23,7 @@ <data name="payment/method" xsi:type="string">braintree</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure</data> - <data name="isVaultEnabled" xsi:type="boolean">false</data> + <data name="isVaultPresent" xsi:type="boolean">false</data> <data name="configData" xsi:type="string">braintree, braintree_3d_secure_not_triggered_due_threshold</data> <data name="status" xsi:type="string">Processing</data> <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> @@ -47,7 +47,7 @@ <data name="payment/method" xsi:type="string">braintree</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure</data> - <data name="isVaultEnabled" xsi:type="boolean">false</data> + <data name="isVaultPresent" xsi:type="boolean">false</data> <data name="configData" xsi:type="string">braintree, braintree_3d_secure_uk</data> <data name="status" xsi:type="string">Processing</data> <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> @@ -71,7 +71,7 @@ <data name="payment/method" xsi:type="string">braintree</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree</data> - <data name="isVaultEnabled" xsi:type="boolean">false</data> + <data name="isVaultPresent" xsi:type="boolean">false</data> <data name="configData" xsi:type="string">braintree</data> <data name="status" xsi:type="string">Processing</data> <data name="tag" xsi:type="string">test_type:extended_acceptance_test, test_type:3rd_party_test, severity:S0</data> @@ -99,7 +99,7 @@ <data name="payment/method" xsi:type="string">braintree</data> <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> <data name="creditCard/dataset" xsi:type="string">visa_braintree</data> - <data name="isVaultEnabled" xsi:type="boolean">false</data> + <data name="isVaultPresent" xsi:type="boolean">false</data> <data name="configData" xsi:type="string">braintree, braintree_sale</data> <data name="status" xsi:type="string">Processing</data> <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S0</data> diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0f21b8f219cb13dd426c1aad3cdb0f6ba24b06a6 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.php @@ -0,0 +1,49 @@ +<?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 payment method. + * 2. Create products. + * + * Steps: + * 1. Log in Storefront. + * 2. Add products to the Shopping Cart. + * 5. Click the 'Proceed to Checkout' button. + * 6. Fill shipping information. + * 7. Select shipping method. + * 8. Select payment method. + * 9. Verify order total on review step. + * 10. Click 'Place Order' button. + * 11. Specify password in 3D Secure popup. + * 12. Click 'Submit'. + * 13. Perform assertions. + * + * @group Braintree + * @ZephyrId MAGETWO-46477 + */ +class OnePageCheckoutWith3dSecureFailedTest extends Scenario +{ + /* tags */ + const MVP = 'yes'; + const TEST_TYPE = '3rd_party_test'; + const SEVERITY = 'S1'; + /* end tags */ + + /** + * Verifies error message on Onepage Checkout if 3d secure validation is failed. + * + * @return void + */ + public function test() + { + $this->executeScenario(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..2a17d1496a72dfb1bb63073ccd982abf3522ca9f --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/OnePageCheckoutWith3dSecureFailedTest.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Braintree\Test\TestCase\OnePageCheckoutWith3dSecureFailedTest" summary="Onepage checkout with Braintree payment method with 3D Secure enabled."> + <variation name="OnePageCheckoutBraintree3dSecureFailedTestVariation1" summary="Guest Checkout with Braintree Credit Card from Storefront with 3D Secure verification failed" ticketId="MAGETWO-46477"> + <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</data> + <data name="checkoutMethod" xsi:type="string">guest</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</data> + <data name="creditCardClass" xsi:type="string">credit_card_braintree</data> + <data name="creditCard/dataset" xsi:type="string">visa_braintree_3dsecure_failed</data> + <data name="secure3d/dataset" xsi:type="string">secure3d_braintree</data> + <data name="configData" xsi:type="string">braintree, braintree_3d_secure</data> + <data name="expectedErrorMessage" xsi:type="string">Please try again with another form of payment.</data> + <data name="status" xsi:type="string">Processing</data> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> + <constraint name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage" /> + </variation> + </testCase> +</config> 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 ad4d5cc06e92e260aed4c90e6f534f2540d25034..66d912d77bba7836ab2f747757f32f2a82cf02ec 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 @@ -20,6 +20,7 @@ </data> <data name="payment/method" xsi:type="string">braintree</data> <data name="vault/method" xsi:type="string">braintree_cc_vault</data> + <data name="isVaultPresent" xsi:type="boolean">false</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/TestStep/PlaceOrderWith3dSecureFailedStep.php b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWith3dSecureFailedStep.php new file mode 100644 index 0000000000000000000000000000000000000000..00a8fce571617e5cd643d9b05bd914dc24e3eb43 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestStep/PlaceOrderWith3dSecureFailedStep.php @@ -0,0 +1,55 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Braintree\Test\TestStep; + +use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Mtf\TestStep\TestStepInterface; +use Magento\Braintree\Test\Fixture\Secure3dBraintree; + +/** + * Click 'Place order' button and submit 3D secure verification step. + */ +class PlaceOrderWith3dSecureFailedStep implements TestStepInterface +{ + /** + * Onepage checkout page. + * + * @var CheckoutOnepage + */ + private $checkoutOnepage; + + /** + * 3D Secure fixture. + * + * @var Secure3dBraintree + */ + private $secure3d; + + /** + * @param CheckoutOnepage $checkoutOnepage + * @param Secure3dBraintree $secure3d + */ + public function __construct( + CheckoutOnepage $checkoutOnepage, + Secure3dBraintree $secure3d + ) { + $this->checkoutOnepage = $checkoutOnepage; + $this->secure3d = $secure3d; + } + + /** + * Click 'Place order' button and submit 3D secure verification. + * + * @return array + */ + public function run() + { + $this->checkoutOnepage->getPaymentBlock()->getSelectedPaymentMethodBlock()->clickPlaceOrder(); + + $this->checkoutOnepage->getBraintree3dSecureBlock()->fill($this->secure3d); + } +} 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 12aa92d35064d457cef4a544daace01314723d99..6ad46774f0f765b01761f6227465c63b695535d6 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 @@ -21,6 +21,19 @@ <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrderWith3dSecure" /> <step name="placeOrderWith3dSecure" module="Magento_Braintree" /> </scenario> + <scenario name="OnePageCheckoutWith3dSecureFailedTest" 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="proceedToCheckout" /> + <step name="proceedToCheckout" 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="fillBillingInformation" /> + <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrderWith3dSecureFailed" /> + <step name="placeOrderWith3dSecureFailed" module="Magento_Braintree" /> + </scenario> <scenario name="UseVaultWith3dSecureOnCheckoutTest" firstStep="setupConfiguration"> <step name="setupConfiguration" module="Magento_Config" next="createProducts" /> <step name="createProducts" module="Magento_Catalog" next="addProductsToTheCart" /> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php index de6adb0efd8b21df23cf0531624fa0b90983225d..5baf4a4cb7c3e273588d85c1217e6824cdefad92 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php @@ -522,14 +522,16 @@ class View extends AbstractConfigureBlock } /** - * Check id media gallery is visible for the product. + * Check if media gallery is visible for the product. * * @return bool */ public function isGalleryVisible() { $this->waitForElementNotVisible($this->galleryLoader); - return $this->_rootElement->find($this->mediaGallery)->isVisible(); + $this->waitForElementVisible($this->mediaGallery); + + return true; } /** 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 49b900e4eedce313df7809a574e150f3c63c4787..507bb5673effc80e7525b238d0b14b2ee6d40c11 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 @@ -6,6 +6,7 @@ namespace Magento\Checkout\Test\Block\Onepage; use Magento\Checkout\Test\Fixture\Checkout; +use Magento\Customer\Test\Fixture\Customer; use Magento\Mtf\Block\Form; use Magento\Mtf\Fixture\FixtureInterface; @@ -93,14 +94,15 @@ class Login extends Form /** * Fill required fields for guest checkout. * - * @param FixtureInterface $customer + * @param Customer $customer * @return void */ - public function fillGuestFields(FixtureInterface $customer) + public function fillGuestFields(Customer $customer) { $mapping = $this->dataMapping(); $this->_rootElement->find($mapping['email']['selector'], $mapping['email']['strategy']) ->setValue($customer->getEmail()); + $this->waitForElementNotVisible($this->loadingMask); } /** diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php index cce29d23f63b18fc2c469e3df964cb2dd81188e0..24bddf79c1a07c9205e0b22426946e11b92d0489 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping/Method.php @@ -22,26 +22,49 @@ class Method extends Block protected $shippingMethod = './/tbody//tr[td[contains(., "%s")] and td[contains(., "%s")]]//input'; /** - * Continue checkout button + * Continue checkout button. * * @var string */ protected $continue = '#shipping-method-buttons-container button'; /** - * Wait element + * Wait element. * * @var string */ protected $waitElement = '.loading-mask'; /** - * Block wait element + * Block wait element. * * @var string */ protected $blockWaitElement = '._block-content-loading'; + /** + * Wait until shipping rates will appear. + * + * @return void + */ + private function waitForShippingRates() + { + // Code under test uses JavaScript setTimeout at this point as well. + sleep(3); + $this->waitForElementNotVisible($this->blockWaitElement); + } + + /** + * Retrieve if the shipping methods loader appears. + * + * @return bool|null + */ + public function isLoaderAppeared() + { + $this->_rootElement->click(); + return $this->waitForElementVisible($this->waitElement); + } + /** * Select shipping method. * @@ -50,15 +73,26 @@ class Method extends Block */ public function selectShippingMethod(array $method) { - // Code under test uses JavaScript setTimeout at this point as well. - sleep(3); + $this->waitForShippingRates(); $selector = sprintf($this->shippingMethod, $method['shipping_method'], $method['shipping_service']); - $this->waitForElementNotVisible($this->blockWaitElement); $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)->click(); } /** - * Click continue button + * Check whether shipping method is available in the shipping rates. + * + * @param array $method + * @return bool + */ + public function isShippingMethodAvaiable(array $method) + { + $this->waitForShippingRates(); + $selector = sprintf($this->shippingMethod, $method['shipping_method'], $method['shipping_service']); + return $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)->isVisible(); + } + + /** + * Click continue button. * * @return void */ diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..24fc2419721b51e3b16c4bcc25e88d13497591c2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCheckoutErrorMessage.php @@ -0,0 +1,42 @@ +<?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 that error message is correct. + */ +class AssertCheckoutErrorMessage extends AbstractConstraint +{ + /** + * Assert that error message is correct. + * + * @param CheckoutOnepage $checkoutOnepage + * @param string $expectedErrorMessage + * @return void + */ + public function processAssert(CheckoutOnepage $checkoutOnepage, $expectedErrorMessage) + { + \PHPUnit_Framework_Assert::assertEquals( + $expectedErrorMessage, + $checkoutOnepage->getMessagesBlock()->getErrorMessage(), + 'Wrong error message is displayed.' + ); + } + + /** + * Returns string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return 'Error message on Checkout onepage page is correct.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml index 0ab3bbb2c2cfcb01330fecd582bb235ed7805068..00ac573da2e7e658b2dc3a9de50a7185bb2512fb 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Page/CheckoutOnepage.xml @@ -17,7 +17,7 @@ <block name="paymentBlock" class="Magento\Checkout\Test\Block\Onepage\Payment" locator="#checkout-step-payment" strategy="css selector" /> <block name="discountCodesBlock" class="Magento\Checkout\Test\Block\Onepage\Payment\DiscountCodes" locator=".discount-code" strategy="css selector" /> <block name="reviewBlock" class="Magento\Checkout\Test\Block\Onepage\Review" locator=".opc-block-summary" strategy="css selector" /> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator=".page.messages" strategy="css selector" /> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="//*[@id='checkout']//div[@data-role='checkout-messages' and .//div]" strategy="xpath" /> <block name="customAddressBlock" class="Magento\Checkout\Test\Block\Onepage\CustomAddress" locator=".checkout-billing-address" strategy="css selector" /> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php new file mode 100644 index 0000000000000000000000000000000000000000..990c3df13e9b1f00e6a2171dfb8f2216b38f0ec3 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestCase/OnePageCheckoutDeclinedTest.php @@ -0,0 +1,46 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Checkout\Test\TestCase; + +use Magento\Mtf\TestCase\Scenario; + +/** + * Preconditions: + * 1. Configure payment method. + * 2. Create products. + * + * Steps: + * 1. Log in Storefront. + * 2. Add products to the Shopping Cart. + * 3. Click the 'Proceed to Checkout' button. + * 4. Fill shipping information. + * 5. Select shipping method. + * 6. Select payment method. + * 7. Click 'Place Order' button. + * 8. Perform assertions. + * + * @group Checkout + * @ZephyrId MAGETWO-46469 + */ +class OnePageCheckoutDeclinedTest extends Scenario +{ + /* tags */ + const MVP = 'yes'; + const TEST_TYPE = '3rd_party_test'; + const SEVERITY = 'S1'; + /* end tags */ + + /** + * Verifies error message on Onepage Checkout. + * + * @return void + */ + public function test() + { + $this->executeScenario(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php new file mode 100644 index 0000000000000000000000000000000000000000..cf086e55d5a305f716f4b64513190b32c7708cba --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/ClickPlaceOrderButtonStep.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Checkout\Test\TestStep; + +use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Mtf\TestStep\TestStepInterface; + +/** + * Click 'Place order' button. + */ +class ClickPlaceOrderButtonStep implements TestStepInterface +{ + /** + * Onepage checkout page. + * + * @var CheckoutOnepage + */ + private $checkoutOnepage; + + /** + * @param CheckoutOnepage $checkoutOnepage + */ + public function __construct(CheckoutOnepage $checkoutOnepage) + { + $this->checkoutOnepage = $checkoutOnepage; + } + + /** + * Click 'Place order' button. + * + * @return array + */ + public function run() + { + $this->checkoutOnepage->getPaymentBlock()->getSelectedPaymentMethodBlock()->clickPlaceOrder(); + } +} 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 cb32e5f0ddfe61d9e97e8ef211ce71bfa46ee71a..3af915e22bfcb1c85ebb53b84872ef4ed255fac2 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 @@ -59,13 +59,6 @@ class SelectCheckoutMethodStep implements TestStepInterface */ private $customerAccountCreatePage; - /** - * Shipping carrier and method. - * - * @var array - */ - protected $shipping; - /** * @constructor * @param CheckoutOnepage $checkoutOnepage @@ -74,7 +67,6 @@ class SelectCheckoutMethodStep implements TestStepInterface * @param LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend * @param ClickProceedToCheckoutStep $clickProceedToCheckoutStep * @param string $checkoutMethod - * @param array $shipping */ public function __construct( CheckoutOnepage $checkoutOnepage, @@ -82,8 +74,7 @@ class SelectCheckoutMethodStep implements TestStepInterface Customer $customer, LogoutCustomerOnFrontendStep $logoutCustomerOnFrontend, ClickProceedToCheckoutStep $clickProceedToCheckoutStep, - $checkoutMethod, - array $shipping = [] + $checkoutMethod ) { $this->checkoutOnepage = $checkoutOnepage; $this->customerAccountCreatePage = $customerAccountCreatePage; @@ -91,7 +82,6 @@ class SelectCheckoutMethodStep implements TestStepInterface $this->logoutCustomerOnFrontend = $logoutCustomerOnFrontend; $this->clickProceedToCheckoutStep = $clickProceedToCheckoutStep; $this->checkoutMethod = $checkoutMethod; - $this->shipping = $shipping; } /** @@ -120,9 +110,7 @@ class SelectCheckoutMethodStep implements TestStepInterface $this->checkoutOnepage->getLoginBlock()->loginCustomer($this->customer); } } elseif ($this->checkoutMethod === 'guest') { - if (empty($this->shipping)) { - $this->checkoutOnepage->getLoginBlock()->fillGuestFields($this->customer); - } + $this->checkoutOnepage->getLoginBlock()->fillGuestFields($this->customer); } elseif ($this->checkoutMethod === 'sign_in') { $this->checkoutOnepage->getAuthenticationWrapperBlock()->signInLinkClick(); $this->checkoutOnepage->getAuthenticationWrapperBlock()->loginCustomer($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 24b369200e71d99df604457603969594b40862ca..d7a61b0eaaa2fece41b7d1f464f0e56bdb80d159 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 @@ -22,4 +22,9 @@ <argument name="severity" xsi:type="string">S0</argument> </arguments> </type> + <type name="Magento\Checkout\Test\Constraint\AssertCheckoutErrorMessage"> + <arguments> + <argument name="severity" xsi:type="string">S1</argument> + </arguments> + </type> </config> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml index 24eb96c0a9347741384ffd6718bf349eeb452c85..e9b49babbba1936aae49b20339a56732b5b2531b 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/etc/testcase.xml @@ -28,4 +28,17 @@ <step name="addProductsToTheCart" module="Magento_Checkout" next="ProceedToCheckout" /> <step name="ProceedToCheckout" module="Magento_Checkout" /> </scenario> + <scenario name="OnePageCheckoutDeclinedTest" 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="proceedToCheckout" /> + <step name="proceedToCheckout" 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="fillBillingInformation" /> + <step name="fillBillingInformation" module="Magento_Checkout" next="clickPlaceOrderButton" /> + <step name="clickPlaceOrderButton" module="Magento_Checkout" /> + </scenario> </config> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Address.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Address.xml index 8baa7ce0d9310f7e2d7a17fab8c904530cf25629..ba85d0d13bfc68761ea562802f259dcda28ff738 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Address.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Repository/Address.xml @@ -241,6 +241,40 @@ <field name="telephone" xsi:type="string">333-33-333-33</field> </dataset> + <dataset name="DE_address_Frankfurt"> + <field name="firstname" xsi:type="string">Jan</field> + <field name="lastname" xsi:type="string">Jansen</field> + <field name="company" xsi:type="string">Magento %isolation%</field> + <field name="city" xsi:type="string">Frankfurt</field> + <field name="street" xsi:type="string">Marzellenstrasse 13-17</field> + <field name="postcode" xsi:type="string">10789</field> + <field name="country_id" xsi:type="string">Germany</field> + <field name="region" xsi:type="string">Hessen</field> + <field name="telephone" xsi:type="string">333-33-333-33</field> + </dataset> + + <dataset name="KE_Nairobi"> + <field name="firstname" xsi:type="string">John</field> + <field name="lastname" xsi:type="string">Doe</field> + <field name="company" xsi:type="string">Magento %isolation%</field> + <field name="city" xsi:type="string">Nairobi</field> + <field name="street" xsi:type="string">6161 West Centinela Avenue</field> + <field name="telephone" xsi:type="string">555-55-555-55</field> + <field name="country_id" xsi:type="string">Kenya</field> + <field name="postcode" xsi:type="string">12345</field> + </dataset> + + <dataset name="KE_Mombasa"> + <field name="firstname" xsi:type="string">John</field> + <field name="lastname" xsi:type="string">Doe</field> + <field name="company" xsi:type="string">Magento %isolation%</field> + <field name="city" xsi:type="string">Mombasa</field> + <field name="street" xsi:type="string">6161 West Centinela Avenue</field> + <field name="telephone" xsi:type="string">555-55-555-55</field> + <field name="country_id" xsi:type="string">Kenya</field> + <field name="postcode" xsi:type="string">12345</field> + </dataset> + <dataset name="customer_UK_US_addresses"> <field name="firstname" xsi:type="string">John</field> <field name="lastname" xsi:type="string">Doe%isolation%</field> diff --git a/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/CityBasedShippingRateTest.xml b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/CityBasedShippingRateTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..e54439c8cd05c5537542d1769d58714d89fc4fb2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Dhl/Test/TestCase/CityBasedShippingRateTest.xml @@ -0,0 +1,44 @@ +<?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\Shipping\Test\TestCase\CityBasedShippingRateTest" summary="Shipping rates can be reloaded based on changes in City field value"> + <variation name="CityBasedShippingRateDHLTestVariation" summary="Shipping rates can be reloaded based on changes in City field value for DHL shipping method" ticketId="MAGETWO-56124"> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> + <data name="products/0" xsi:type="string">catalogProductSimple::default</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="shippingMethod/shipping_service" xsi:type="string">DHL</data> + <data name="shippingMethod/shipping_method" xsi:type="string">Express easy</data> + <data name="clearShippingAddress/postcode" xsi:type="string" /> + <data name="clearShippingAddress/city" xsi:type="string" /> + <data name="clearShippingAddress/country_id" xsi:type="string" /> + <data name="shippingAddresses/0/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/1/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/1/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/2/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/2/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/2/city" xsi:type="string">Nairobi</data> + <data name="shippingAddresses/3/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/3/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/3/city" xsi:type="string">Mombasa</data> + <data name="shippingAddresses/4/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/4/city" xsi:type="string">Mombasa</data> + <data name="shippingAddresses/5/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/5/city" xsi:type="string">Nairobi</data> + <data name="isShippingAvailable" xsi:type="array"> + <item name="0" xsi:type="boolean">false</item> + <item name="1" xsi:type="boolean">false</item> + <item name="2" xsi:type="boolean">true</item> + <item name="3" xsi:type="boolean">true</item> + <item name="4" xsi:type="boolean">true</item> + <item name="5" xsi:type="boolean">true</item> + </data> + <data name="configData" xsi:type="string">dhl_eu, shipping_origin_CH, config_base_currency_ch</data> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/CityBasedShippingRateTest.xml b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/CityBasedShippingRateTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6a2fd5776a27d307e7c0f8372438b42f38fd7f5 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Fedex/Test/TestCase/CityBasedShippingRateTest.xml @@ -0,0 +1,44 @@ +<?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\Shipping\Test\TestCase\CityBasedShippingRateTest" summary="Shipping rates can be reloaded based on changes in City field value"> + <variation name="CityBasedShippingRateFedexTestVariation" summary="Shipping rates can be reloaded based on changes in City field value for Fedex shipping method" ticketId="MAGETWO-56124"> + <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> + <data name="products/0" xsi:type="string">catalogProductSimple::default</data> + <data name="checkoutMethod" xsi:type="string">guest</data> + <data name="customer/dataset" xsi:type="string">default</data> + <data name="shippingMethod/shipping_service" xsi:type="string">Federal Express</data> + <data name="shippingMethod/shipping_method" xsi:type="string">International Economy</data> + <data name="clearShippingAddress/postcode" xsi:type="string" /> + <data name="clearShippingAddress/city" xsi:type="string" /> + <data name="clearShippingAddress/country_id" xsi:type="string" /> + <data name="shippingAddresses/0/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/1/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/1/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/2/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/2/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/2/city" xsi:type="string">Nairobi</data> + <data name="shippingAddresses/3/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/3/postcode" xsi:type="string">12345</data> + <data name="shippingAddresses/3/city" xsi:type="string">Mombasa</data> + <data name="shippingAddresses/4/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/4/city" xsi:type="string">Mombasa</data> + <data name="shippingAddresses/5/country_id" xsi:type="string">Kenya</data> + <data name="shippingAddresses/5/city" xsi:type="string">Nairobi</data> + <data name="isShippingAvailable" xsi:type="array"> + <item name="0" xsi:type="boolean">false</item> + <item name="1" xsi:type="boolean">true</item> + <item name="2" xsi:type="boolean">true</item> + <item name="3" xsi:type="boolean">true</item> + <item name="4" xsi:type="boolean">false</item> + <item name="5" xsi:type="boolean">false</item> + </data> + <data name="configData" xsi:type="string">fedex, shipping_origin_US_CA</data> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml index f6ac4ac4f0a3c4591c12de7215600010c5fb857c..11f9d9d5270e679df9cd5237b4a51139cb51475e 100644 --- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml +++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/OnePageCheckoutTest.xml @@ -21,7 +21,7 @@ </data> <data name="creditCardClass" xsi:type="string">credit_card</data> <data name="creditCard/dataset" xsi:type="string">visa_default</data> - <data name="isVaultEnabled" xsi:type="boolean">false</data> + <data name="isVaultPresent" xsi:type="boolean">false</data> <data name="configData" xsi:type="string">payflowpro</data> <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data> <constraint name="Magento\Checkout\Test\Constraint\AssertOrderSuccessPlacedMessage" /> diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/View/Tab/Invoices/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/View/Tab/Invoices/Grid.php index d1f27d14a6619f71fc2e459adad23888d4fb51b7..4b3768295799695fbb45db1a17e75acb193b91f7 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/View/Tab/Invoices/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/View/Tab/Invoices/Grid.php @@ -9,7 +9,7 @@ namespace Magento\Sales\Test\Block\Adminhtml\Order\View\Tab\Invoices; /** * Invoices grid on order view page. */ -class Grid extends \Magento\Backend\Test\Block\Widget\Grid +class Grid extends \Magento\Ui\Test\Block\Adminhtml\DataGrid { /** * Locator value for link in action column. @@ -34,6 +34,9 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid 'id' => [ 'selector' => 'input[name="increment_id"]', ], + 'order_id' => [ + 'selector' => 'input[name="order_increment_id"]', + ], 'status' => [ 'selector' => 'select[name="state"]', 'input' => 'select', diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceStatusInOrdersGrid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceStatusInOrdersGrid.php new file mode 100644 index 0000000000000000000000000000000000000000..6695786923b5c00c71e12101855421554e940281 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceStatusInOrdersGrid.php @@ -0,0 +1,53 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Test\Constraint; + +use Magento\Sales\Test\Page\Adminhtml\SalesOrderView; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Assert invoice status on order page in Admin. + */ +class AssertInvoiceStatusInOrdersGrid extends AbstractConstraint +{ + /** + * Assert invoice status on order page in Admin. + * + * @param SalesOrderView $salesOrderView + * @param string $invoiceStatus + * @param string $orderId + * @return void + */ + public function processAssert( + SalesOrderView $salesOrderView, + $invoiceStatus, + $orderId + ) { + $salesOrderView->open(['order_id' => $orderId]); + $salesOrderView->getOrderForm()->openTab('invoices'); + /** @var \Magento\Sales\Test\Block\Adminhtml\Order\View\Tab\Invoices\Grid $grid */ + $grid = $salesOrderView->getOrderForm()->getTab('invoices')->getGridBlock(); + $filter = [ + 'order_id' => $orderId, + 'status' => $invoiceStatus, + ]; + \PHPUnit_Framework_Assert::assertTrue( + $grid->isRowVisible($filter), + 'Invoice status is incorrect.' + ); + } + + /** + * Returns a string representation of the object. + * + * @return string + */ + public function toString() + { + return 'Invoice status is correct.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml index f42c97e1a6614a927da685f9cd5e1f8c84ff0c32..df10cccbd82136f027f4ee6b236cafe272cdbdc8 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/di.xml @@ -11,6 +11,11 @@ <argument name="severity" xsi:type="string">S0</argument> </arguments> </type> + <type name="Magento\Sales\Test\Constraint\AssertInvoiceStatusInOrdersGrid"> + <arguments> + <argument name="severity" xsi:type="string">S1</argument> + </arguments> + </type> <type name="Magento\Sales\Test\Constraint\AssertOrderStatusDuplicateStatus"> <arguments> <argument name="severity" xsi:type="string">S0</argument> diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php b/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php new file mode 100644 index 0000000000000000000000000000000000000000..a10b47a2f9950f311d4c8ebcbdd3babb46faf6a8 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertCityBasedShippingRateChanged.php @@ -0,0 +1,50 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Shipping\Test\Constraint; + +use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Check that Shipping rate changes due to City change. + */ +class AssertCityBasedShippingRateChanged extends AbstractConstraint +{ + /** + * Assert that Shipping rate changed on City change. + * + * @param CheckoutOnepage $checkoutOnepage + * @param array $shippingMethod + * @param bool $isShippingAvailable + * @return void + */ + public function processAssert(CheckoutOnepage $checkoutOnepage, $shippingMethod, $isShippingAvailable) + { + if ($isShippingAvailable) { + \PHPUnit_Framework_Assert::assertTrue( + $checkoutOnepage->getShippingMethodBlock()->isLoaderAppeared(), + 'Shipping rate has not been changed.' + ); + } + $shippingAvaialability = $isShippingAvailable ? 'avaiable' : 'unavailable'; + \PHPUnit_Framework_Assert::assertEquals( + $isShippingAvailable, + $checkoutOnepage->getShippingMethodBlock()->isShippingMethodAvaiable($shippingMethod), + "Shipping rates for {$shippingMethod['shipping_service']} should be $shippingAvaialability." + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "Shipping rate has been changed."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/TestCase/CityBasedShippingRateTest.php b/dev/tests/functional/tests/app/Magento/Shipping/Test/TestCase/CityBasedShippingRateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..294cf129c607308425fc6e9a3574b047d8b2ff18 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/TestCase/CityBasedShippingRateTest.php @@ -0,0 +1,44 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Shipping\Test\TestCase; + +use Magento\Mtf\TestCase\Scenario; + +/** + * Preconditions: + * 1. Configure shipping method. + * 2. Create products. + * 3. Create and setup customer. + * + * Steps: + * 1. Go to Frontend. + * 2. Add products to the cart. + * 3. Click the 'Proceed to Checkout' button. + * 4. Fill shipping information. + * 5. Perform assertions. + * + * @group Shipping + * @ZephyrId MAGETWO-56124 + */ +class CityBasedShippingRateTest extends Scenario +{ + /* tags */ + const MVP = 'yes'; + const TEST_TYPE = '3rd_party_test'; + const SEVERITY = 'S1'; + /* end tags */ + + /** + * Runs City Based Shipping Rate test. + * + * @return void + */ + public function test() + { + $this->executeScenario(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/TestStep/FillShippingAddressesStep.php b/dev/tests/functional/tests/app/Magento/Shipping/Test/TestStep/FillShippingAddressesStep.php new file mode 100644 index 0000000000000000000000000000000000000000..8a0f5ea7e269d71234e3cdacbc8c570c6bb040ed --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/TestStep/FillShippingAddressesStep.php @@ -0,0 +1,98 @@ +<?php +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Shipping\Test\TestStep; + +use Magento\Mtf\Fixture\FixtureFactory; +use Magento\Mtf\TestStep\TestStepInterface; +use Magento\Customer\Test\Fixture\Address; +use Magento\Checkout\Test\Page\CheckoutOnepage; +use Magento\Shipping\Test\Constraint\AssertCityBasedShippingRateChanged; + +/** + * Fill shipping addresses and assert rates relouding. + */ +class FillShippingAddressesStep implements TestStepInterface +{ + /** + * Onepage checkout page. + * + * @var CheckoutOnepage + */ + private $checkoutOnepage; + + /** + * Address fixture. + * + * @var Address[] + */ + private $shippingAddresses; + + /** + * Assert City based Shipping rate. + * + * @var array + */ + private $assertRate; + + /** + * @var array + */ + private $isShippingAvailable; + + /** + * Shipping method. + * + * @var array + */ + private $shippingMethod; + + /** + * @param CheckoutOnepage $checkoutOnepage + * @param FixtureFactory $fixtureFactory + * @param AssertCityBasedShippingRateChanged $assertRate + * @param array $shippingMethod + * @param array $shippingAddresses + * @param array $clearShippingAddress + * @param array $isShippingAvailable + */ + public function __construct( + CheckoutOnepage $checkoutOnepage, + FixtureFactory $fixtureFactory, + AssertCityBasedShippingRateChanged $assertRate, + array $shippingMethod, + array $shippingAddresses, + array $clearShippingAddress, + array $isShippingAvailable + ) { + $this->checkoutOnepage = $checkoutOnepage; + $this->assertRate = $assertRate; + + foreach ($shippingAddresses as $address) { + $data = array_merge($clearShippingAddress, $address); + $this->shippingAddresses[] = $fixtureFactory->createByCode('address', ['data' => $data]); + } + $this->isShippingAvailable = $isShippingAvailable; + $this->shippingMethod = $shippingMethod; + } + + /** + * Fill shipping address and assert if the shipping rates is reloaded. + * + * @return void + */ + public function run() + { + foreach ($this->shippingAddresses as $key => $shippingAddress) { + $this->checkoutOnepage->getShippingBlock()->fill($shippingAddress); + $this->assertRate->processAssert( + $this->checkoutOnepage, + $this->shippingMethod, + $this->isShippingAvailable[$key] + ); + } + } +} diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/di.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0d24b810fb44bd0caa7dec1e6b302006904b102 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/di.xml @@ -0,0 +1,14 @@ +<?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="urn:magento:framework:ObjectManager/etc/config.xsd"> + <type name="Magento\Shipping\Test\Constraint\AssertCityBasedShippingRateChanged"> + <arguments> + <argument name="severity" xsi:type="string">S1</argument> + </arguments> + </type> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/testcase.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1fabed80066b6933f58f89e69aa59ea20042d65 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/etc/testcase.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2016 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/TestCase/etc/testcase.xsd"> + <scenario name="CityBasedShippingRateTest" 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="proceedToCheckout" /> + <step name="proceedToCheckout" module="Magento_Checkout" next="createCustomer" /> + <step name="createCustomer" module="Magento_Customer" next="selectCheckoutMethod" /> + <step name="selectCheckoutMethod" module="Magento_Checkout" next="fillShippingAddresses" /> + <step name="fillShippingAddresses" module="Magento_Shipping" /> + </scenario> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php index b0f33872103f27ffe00e2b1323574fa0fdc6b88a..eee0f1be86ef79198a7864df8be90e8a225ea840 100644 --- a/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php +++ b/dev/tests/functional/tests/app/Magento/Vault/Test/TestStep/CheckSaveCreditCardOptionStep.php @@ -36,28 +36,28 @@ class CheckSaveCreditCardOptionStep implements TestStepInterface private $payment; /** - * If vault is enabled for payment method. + * If 'Save for later use' checkbox is present in credit card form. * * @var null|bool */ - private $isVaultEnabled; + private $isVaultPresent; /** * @param CheckoutOnepage $checkoutOnepage * @param AssertSaveCreditCardOptionNotPresent $assertSaveCreditCardOptionNotPresent * @param array $payment - * @param null|bool $isVaultEnabled + * @param null|bool $isVaultPresent */ public function __construct( CheckoutOnepage $checkoutOnepage, AssertSaveCreditCardOptionNotPresent $assertSaveCreditCardOptionNotPresent, array $payment, - $isVaultEnabled = null + $isVaultPresent = null ) { $this->checkoutOnepage = $checkoutOnepage; $this->assertSaveCreditCardOptionNotPresent = $assertSaveCreditCardOptionNotPresent; $this->payment = $payment; - $this->isVaultEnabled = $isVaultEnabled; + $this->isVaultPresent = $isVaultPresent; } /** @@ -67,7 +67,7 @@ class CheckSaveCreditCardOptionStep implements TestStepInterface */ public function run() { - if ($this->isVaultEnabled === false) { + if ($this->isVaultPresent === false) { $this->assertSaveCreditCardOptionNotPresent->processAssert( $this->checkoutOnepage, $this->payment['method'] diff --git a/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml index 6289a8392ee7544777959e8afffe9fd999388713..ee55d7ef5ba905973cbbfb38effab1ccc7f750e0 100644 --- a/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml +++ b/dev/tests/functional/tests/app/Magento/Vault/Test/etc/testcase.xml @@ -56,7 +56,8 @@ <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="fillBillingInformation" /> + <step name="selectPaymentMethod" module="Magento_Checkout" next="checkSaveCreditCardOption" /> + <step name="checkSaveCreditCardOption" module="Magento_Vault" next="fillBillingInformation" /> <step name="fillBillingInformation" module="Magento_Checkout" next="placeOrder" /> <step name="placeOrder" module="Magento_Checkout" next="openOrder" /> <step name="openOrder" module="Magento_Sales" next="reorder" /> diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/ProcessorTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/ProcessorTest.php index 9c9e564939070e99b097477a221f445811a25ef1..ae954fdc7cfbb7bdc7c66dfb4ab9a25e977e8fae 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/ProcessorTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/ProcessorTest.php @@ -146,15 +146,15 @@ class ProcessorTest extends \PHPUnit_Framework_TestCase ); $product->setData(['image' => 'test1', 'small_image' => 'test2', 'thumbnail' => 'test3']); - $this->assertNotEmpty($product->getData('image')); + $this->assertNotEquals('no_selection', $product->getData('image')); $this->_model->clearMediaAttribute($product, 'image'); - $this->assertNull($product->getData('image')); + $this->assertEquals('no_selection', $product->getData('image')); - $this->assertNotEmpty($product->getData('small_image')); - $this->assertNotEmpty($product->getData('thumbnail')); + $this->assertNotEquals('no_selection', $product->getData('small_image')); + $this->assertNotEquals('no_selection', $product->getData('thumbnail')); $this->_model->clearMediaAttribute($product, ['small_image', 'thumbnail']); - $this->assertNull($product->getData('small_image')); - $this->assertNull($product->getData('thumbnail')); + $this->assertEquals('no_selection', $product->getData('small_image')); + $this->assertEquals('no_selection', $product->getData('thumbnail')); } public function testSetMediaAttribute() diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php index 389fd4b253eb7c8e8a89237f1b7a20be9aa777fe..95fd6110bb432e72daa2af66d7b65f7abbdb3d0f 100644 --- a/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php +++ b/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php @@ -62,12 +62,12 @@ class ObserverTest extends \PHPUnit_Framework_TestCase { //skipping test if service is unavailable $url = str_replace('{{CURRENCY_FROM}}', 'USD', - \Magento\Directory\Model\Currency\Import\Webservicex::CURRENCY_CONVERTER_URL + \Magento\Directory\Model\Currency\Import\Webservicex::CURRENCY_CONVERTER_URL ); $url = str_replace('{{CURRENCY_TO}}', 'GBP', $url); try { file_get_contents($url); - } catch (\PHPUnit_Framework_Error_Warning $e) { + } catch (\PHPUnit_Framework_Exception $e) { $this->markTestSkipped('http://www.webservicex.net is unavailable '); }