diff --git a/app/code/Magento/Authorizenet/Model/Authorizenet.php b/app/code/Magento/Authorizenet/Model/Authorizenet.php
index 9ab3317a43bb97d950ab32196ce1f9596ba8f7e4..4408c68436707cbfae7332f32cf7d3c902b531f0 100644
--- a/app/code/Magento/Authorizenet/Model/Authorizenet.php
+++ b/app/code/Magento/Authorizenet/Model/Authorizenet.php
@@ -332,7 +332,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
                     ->setXCity($billing->getCity())
                     ->setXState($billing->getRegion())
                     ->setXZip($billing->getPostcode())
-                    ->setXCountry($billing->getCountry())
+                    ->setXCountry($billing->getCountryId())
                     ->setXPhone($billing->getTelephone())
                     ->setXFax($billing->getFax())
                     ->setXCustId($order->getCustomerId())
@@ -352,7 +352,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
                     ->setXShipToCity($shipping->getCity())
                     ->setXShipToState($shipping->getRegion())
                     ->setXShipToZip($shipping->getPostcode())
-                    ->setXShipToCountry($shipping->getCountry());
+                    ->setXShipToCountry($shipping->getCountryId());
             }
 
             $request->setXPoNum($payment->getPoNumber())
diff --git a/app/code/Magento/Authorizenet/Model/Directpost/Request.php b/app/code/Magento/Authorizenet/Model/Directpost/Request.php
index 8be7ed5da15ac1dd627ce691ef1cd6eaf9455824..4d5da3e76dc1c3eb4ff204e9ec388f9cece87865 100644
--- a/app/code/Magento/Authorizenet/Model/Directpost/Request.php
+++ b/app/code/Magento/Authorizenet/Model/Directpost/Request.php
@@ -123,7 +123,7 @@ class Request extends AuthorizenetRequest
                 ->setXCity(strval($billing->getCity()))
                 ->setXState(strval($billing->getRegion()))
                 ->setXZip(strval($billing->getPostcode()))
-                ->setXCountry(strval($billing->getCountry()))
+                ->setXCountry(strval($billing->getCountryId()))
                 ->setXPhone(strval($billing->getTelephone()))
                 ->setXFax(strval($billing->getFax()))
                 ->setXCustId(strval($billing->getCustomerId()))
@@ -151,7 +151,7 @@ class Request extends AuthorizenetRequest
             )->setXShipToZip(
                 strval($shipping->getPostcode())
             )->setXShipToCountry(
-                strval($shipping->getCountry())
+                strval($shipping->getCountryId())
             );
         }
 
diff --git a/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js b/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js
index ea832acb537e0051e34f976c050c9b8bd7d289b7..14729714b4e608f8c422da8c220b9ea1ed115ffb 100644
--- a/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js
+++ b/app/code/Magento/Braintree/view/adminhtml/web/js/vault.js
@@ -28,7 +28,7 @@ define([
             self.$selector = $('#' + self.selector);
             self.$container =  $('#' + self.container);
             self.$selector.on(
-                'setVaultNotActive',
+                'setVaultNotActive.' + self.getCode(),
                 function () {
                     self.$selector.off('submitOrder.' + self.getCode());
                 }
diff --git a/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php b/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php
index a940e09bd57b56a026bba1a45312b94b7f1c80e3..c144daf8c71bd3dc035338af0283df31009e0126 100644
--- a/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php
+++ b/app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php
@@ -29,18 +29,8 @@ class FinalPriceBox extends BasePriceBox
         }
 
         $result = parent::_toHtml();
-
-        try {
-            /** @var MsrpPrice $msrpPriceType */
-            $msrpPriceType = $this->getSaleableItem()->getPriceInfo()->getPrice('msrp_price');
-        } catch (\InvalidArgumentException $e) {
-            $this->_logger->critical($e);
-            return $this->wrapResult($result);
-        }
-
         //Renders MSRP in case it is enabled
-        $product = $this->getSaleableItem();
-        if ($msrpPriceType->canApplyMsrp($product) && $msrpPriceType->isMinimalPriceLessMsrp($product)) {
+        if ($this->isMsrpPriceApplicable()) {
             /** @var BasePriceBox $msrpBlock */
             $msrpBlock = $this->rendererPool->createPriceRender(
                 MsrpPrice::PRICE_CODE,
@@ -56,6 +46,25 @@ class FinalPriceBox extends BasePriceBox
         return $this->wrapResult($result);
     }
 
+    /**
+     * Check is MSRP applicable for the current product.
+     *
+     * @return bool
+     */
+    protected function isMsrpPriceApplicable()
+    {
+        try {
+            /** @var MsrpPrice $msrpPriceType */
+            $msrpPriceType = $this->getSaleableItem()->getPriceInfo()->getPrice('msrp_price');
+        } catch (\InvalidArgumentException $e) {
+            $this->_logger->critical($e);
+            return false;
+        }
+
+        $product = $this->getSaleableItem();
+        return $msrpPriceType->canApplyMsrp($product) && $msrpPriceType->isMinimalPriceLessMsrp($product);
+    }
+
     /**
      * Wrap with standard required container
      *
diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
index 51c68145b24cf5e72061a51647d4b311f39e60bf..a5f85df1c96f66bb911bf92303c40d14c3be49b6 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
@@ -193,6 +193,7 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
         $config = [
             'attributes' => $attributesData['attributes'],
             'template' => str_replace('%s', '<%- data.price %>', $store->getCurrentCurrency()->getOutputFormat()),
+            'currencyFormat' => $store->getCurrentCurrency()->getOutputFormat(),
             'optionPrices' => $this->getOptionPrices(),
             'prices' => [
                 'oldPrice' => [
@@ -229,7 +230,17 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
     {
         $prices = [];
         foreach ($this->getAllowProducts() as $product) {
+            $tierPrices = [];
             $priceInfo = $product->getPriceInfo();
+            $tierPriceModel =  $priceInfo->getPrice('tier_price');
+            $tierPricesList = $tierPriceModel->getTierPriceList();
+            foreach ($tierPricesList as $tierPrice) {
+                $tierPrices[] = [
+                    'qty' => $this->_registerJsPrice($tierPrice['price_qty']),
+                    'price' => $this->_registerJsPrice($tierPrice['price']->getValue()),
+                    'percentage' => $this->_registerJsPrice($tierPriceModel->getSavePercent($tierPrice['price'])),
+                ];
+            }
 
             $prices[$product->getId()] =
                 [
@@ -247,8 +258,9 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
                         'amount' => $this->_registerJsPrice(
                             $priceInfo->getPrice('final_price')->getAmount()->getValue()
                         ),
-                    ]
-                ];
+                    ],
+                    'tierPrices' => $tierPrices,
+                 ];
         }
         return $prices;
     }
@@ -263,4 +275,14 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
     {
         return str_replace(',', '.', $price);
     }
+
+    /**
+     * Should we generate "As low as" block or not
+     *
+     * @return bool
+     */
+    public function showMinimalPrice()
+    {
+        return true;
+    }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Render/TierPriceBox.php b/app/code/Magento/ConfigurableProduct/Pricing/Render/TierPriceBox.php
new file mode 100644
index 0000000000000000000000000000000000000000..af2414204fd1a3aea6acecceb34f28c613f3c6dc
--- /dev/null
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Render/TierPriceBox.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\ConfigurableProduct\Pricing\Render;
+
+/**
+ * Responsible for displaying tier price box on configurable product page.
+ *
+ * @package Magento\ConfigurableProduct\Pricing\Render
+ */
+class TierPriceBox extends FinalPriceBox
+{
+    /**
+     * @inheritdoc
+     */
+    public function toHtml()
+    {
+        // Hide tier price block in case of MSRP.
+        if (!$this->isMsrpPriceApplicable()) {
+            return parent::toHtml();
+        }
+    }
+}
diff --git a/app/code/Magento/ConfigurableProduct/view/base/layout/catalog_product_prices.xml b/app/code/Magento/ConfigurableProduct/view/base/layout/catalog_product_prices.xml
index 47fe31681b5bf0d96ba4cf4935283d415de23ce7..545b04dc0a3279c92100166bda0ff3922b820bb9 100644
--- a/app/code/Magento/ConfigurableProduct/view/base/layout/catalog_product_prices.xml
+++ b/app/code/Magento/ConfigurableProduct/view/base/layout/catalog_product_prices.xml
@@ -10,6 +10,10 @@
         <arguments>
             <argument name="configurable" xsi:type="array">
                 <item name="prices" xsi:type="array">
+                    <item name="tier_price" xsi:type="array">
+                        <item name="render_class" xsi:type="string">Magento\ConfigurableProduct\Pricing\Render\TierPriceBox</item>
+                        <item name="render_template" xsi:type="string">Magento_ConfigurableProduct::product/price/tier_price.phtml</item>
+                    </item>
                     <item name="final_price" xsi:type="array">
                         <item name="render_class" xsi:type="string">Magento\ConfigurableProduct\Pricing\Render\FinalPriceBox</item>
                         <item name="render_template" xsi:type="string">Magento_ConfigurableProduct::product/price/final_price.phtml</item>
diff --git a/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/tier_price.phtml b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/tier_price.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..01e6bb4222fd3cf6b178a350b0a3c0667c0263ca
--- /dev/null
+++ b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/tier_price.phtml
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+?>
+<script type="text/x-magento-template" id="tier-prices-template">
+    <ul class="prices-tier items">
+        <% _.each(tierPrices, function(item, key) { %>
+        <%  var priceStr = '<span class="price-container price-tier_price">'
+                + '<span data-price-amount="' + priceUtils.formatPrice(item.price, currencyFormat) + '"'
+                + ' data-price-type=""' + ' class="price-wrapper ">'
+                + '<span class="price">' + priceUtils.formatPrice(item.price, currencyFormat) + '</span>'
+                + '</span>'
+            + '</span>'; %>
+        <li class="item">
+            <%= $t('Buy %1 for %2 each and').replace('%1', item.qty).replace('%2', priceStr) %>
+                <strong class="benefit">
+                        <%= $t('save') %><span class="percent tier-<%= key %>">&nbsp;<%= item.percentage %></span>%
+                </strong>
+        </li>
+        <% }); %>
+    </ul>
+</script>
+<div data-role="tier-price-block"></div>
diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index 59b313bcb497ddb64e1fdca9bc480afdbbb2f1d9..0c7157f920d9c5f97ec6429fea11bc2aa0af9403 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -7,11 +7,12 @@ define([
     'jquery',
     'underscore',
     'mage/template',
+    'mage/translate',
     'priceUtils',
     'priceBox',
     'jquery/ui',
     'jquery/jquery.parsequery'
-], function ($, _, mageTemplate) {
+], function ($, _, mageTemplate, $t, priceUtils) {
     'use strict';
 
     $.widget('mage.configurable', {
@@ -38,7 +39,10 @@ define([
              *
              * @type {String}
              */
-            gallerySwitchStrategy: 'replace'
+            gallerySwitchStrategy: 'replace',
+            tierPriceTemplateSelector: '#tier-prices-template',
+            tierPriceBlockSelector: '[data-role="tier-price-block"]',
+            tierPriceTemplate: ''
         },
 
         /**
@@ -84,6 +88,7 @@ define([
                 options.priceFormat = priceBoxOptions.priceFormat;
             }
             options.optionTemplate = mageTemplate(options.optionTemplate);
+            options.tierPriceTemplate = $(this.options.tierPriceTemplateSelector).html();
 
             options.settings = options.spConfig.containerId ?
                 $(options.spConfig.containerId).find(options.superSelector) :
@@ -259,6 +264,7 @@ define([
             }
             this._reloadPrice();
             this._displayRegularPriceBlock(this.simpleProduct);
+            this._displayTierPriceBlock(this.simpleProduct);
             this._changeProductImage();
         },
 
@@ -513,6 +519,31 @@ define([
             var galleryObject = element.data('gallery');
 
             this.options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+        },
+
+        /**
+         * Show or hide tier price block
+         *
+         * @param {*} optionId
+         * @private
+         */
+        _displayTierPriceBlock: function (optionId) {
+            if (typeof optionId != 'undefined' &&
+                this.options.spConfig.optionPrices[optionId].tierPrices != []
+            ) {
+                var options = this.options.spConfig.optionPrices[optionId];
+                if (this.options.tierPriceTemplate) {
+                    var tierPriceHtml = mageTemplate(this.options.tierPriceTemplate, {
+                        'tierPrices': options.tierPrices,
+                        '$t': $t,
+                        'currencyFormat': this.options.spConfig.currencyFormat,
+                        'priceUtils': priceUtils
+                    });
+                    $(this.options.tierPriceBlockSelector).html(tierPriceHtml).show();
+                }
+            } else {
+                $(this.options.tierPriceBlockSelector).hide();
+            }
         }
     });
 
diff --git a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js
index 8af48829df438261aaed469c88245fc50a349853..c1d2fd3f910518ddcf15ae50122db3e5f30cd098 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js
@@ -6,11 +6,14 @@
 define([
     'jquery',
     'underscore',
+    'mage/template',
     'mage/smart-keyboard-handler',
+    'mage/translate',
+    'priceUtils',
     'jquery/ui',
     'jquery/jquery.parsequery',
     'mage/validation/validation'
-], function ($, _, keyboardHandler) {
+], function ($, _, mageTemplate, keyboardHandler, $t, priceUtils) {
     'use strict';
 
     /**
@@ -254,7 +257,13 @@ define([
             gallerySwitchStrategy: 'replace',
 
             // whether swatches are rendered in product list or on product page
-            inProductList: false
+            inProductList: false,
+
+            // tier prise selectors start
+            tierPriceTemplateSelector: '#tier-prices-template',
+            tierPriceBlockSelector: '[data-role="tier-price-block"]',
+            tierPriceTemplate: ''
+            // tier prise selectors end
         },
 
         /**
@@ -279,6 +288,7 @@ define([
             } else {
                 console.log('SwatchRenderer: No input data received');
             }
+            this.options.tierPriceTemplate = $(this.options.tierPriceTemplateSelector).html();
         },
 
         /**
@@ -809,7 +819,8 @@ define([
                 $product = $widget.element.parents($widget.options.selectorProduct),
                 $productPrice = $product.find(this.options.selectorProductPrice),
                 options = _.object(_.keys($widget.optionsMap), {}),
-                result;
+                result,
+                tierPriceHtml;
 
             $widget.element.find('.' + $widget.options.classes.attributeClass + '[option-selected]').each(function () {
                 var attributeId = $(this).attr('attribute-id');
@@ -825,6 +836,23 @@ define([
                     'prices': $widget._getPrices(result, $productPrice.priceBox('option').prices)
                 }
             );
+
+            if (result.tierPrices.length) {
+                if (this.options.tierPriceTemplate) {
+                    tierPriceHtml = mageTemplate(
+                        this.options.tierPriceTemplate,
+                        {
+                            'tierPrices': result.tierPrices,
+                            '$t': $t,
+                            'currencyFormat': this.options.jsonConfig.currencyFormat,
+                            'priceUtils': priceUtils
+                        }
+                    );
+                    $(this.options.tierPriceBlockSelector).html(tierPriceHtml).show();
+                }
+            } else {
+                $(this.options.tierPriceBlockSelector).hide();
+            }
         },
 
         /**
diff --git a/app/code/Magento/Vault/view/adminhtml/web/js/vault.js b/app/code/Magento/Vault/view/adminhtml/web/js/vault.js
index 560e65c007f8ab22c2b5b1e76bac0c9062e2af78..66c17801ec02edb262434bc807988bed1bece940 100644
--- a/app/code/Magento/Vault/view/adminhtml/web/js/vault.js
+++ b/app/code/Magento/Vault/view/adminhtml/web/js/vault.js
@@ -33,8 +33,8 @@ define([
                 .observe(['active']);
 
             // re-init payment method events
-            self.$selector.off('changePaymentMethod.' + this.code)
-                .on('changePaymentMethod.' + this.code, this.changePaymentMethod.bind(this));
+            self.$selector.off('changePaymentMethod.' + this.getCode())
+                .on('changePaymentMethod.' + this.getCode(), this.changePaymentMethod.bind(this));
 
             if (this.active()) {
                 $('#' + this.fieldset + ' input:radio:first').trigger('click');
@@ -50,7 +50,7 @@ define([
          * @returns {exports.changePaymentMethod}
          */
         changePaymentMethod: function (event, method) {
-            this.active(method === this.code);
+            this.active(method === this.getCode());
 
             return this;
         },
@@ -61,13 +61,21 @@ define([
          */
         onActiveChange: function (isActive) {
             if (!isActive) {
-                this.$selector.trigger('setVaultNotActive');
+                this.$selector.trigger('setVaultNotActive.' + this.getCode());
 
                 return;
             }
 
             $('#' + this.fieldset + ' input:radio:first').trigger('click');
-            window.order.addExcludedPaymentMethod(this.code);
+            window.order.addExcludedPaymentMethod(this.getCode());
+        },
+
+        /**
+         * Get payment method code
+         * @returns {String}
+         */
+        getCode: function () {
+            return this.code;
         }
     });
 });
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 66d912d77bba7836ab2f747757f32f2a82cf02ec..5f5e2f50594bf8d0473b65ee584e50f47bc852a4 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
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Vault\Test\TestCase\ReorderUsingVaultTest" summary="Reorder from Admin with saved within Braintree credit card">
-        <variation name="ReorderUsingVaultBraintreeTestVariation1" summary="Reorder from Admin with saved within Braintree credit card for Guest Customer" ticketId="MAGETWO-54870">
+        <variation name="ReorderUsingVaultBraintreeTestVariation1" summary="Reorder from Admin with saved within Braintree credit card for Guest Customer" ticketId="MAGETWO-54869, MAGETWO-54870">
             <data name="description" xsi:type="string">Reorder from Admin with saved within Braintree credit card for Guest Customer</data>
             <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
             <data name="customer/dataset" xsi:type="string">default</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php
index e99b63d5b8ce7727b93cc3ef2898ef6ba95caf01..fd6f99d13f40fb8bce3f99142d6004f8652087d1 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php
@@ -31,6 +31,11 @@ class AssertProductPage extends AbstractAssertForm
      */
     protected $product;
 
+    /**
+     * @var CatalogProductView
+     */
+    protected $pageView;
+
     /**
      * Assert that displayed product data on product page(front-end) equals passed from fixture:
      * 1. Product Name
@@ -53,6 +58,7 @@ class AssertProductPage extends AbstractAssertForm
         $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html');
 
         $this->product = $product;
+        $this->pageView = $catalogProductView;
         $this->productView = $catalogProductView->getViewBlock();
 
         $errors = $this->verify();
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple/CheckoutData.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple/CheckoutData.xml
index 180da27ca2a099ab36c00473ac35572c45a31ffd..a1f34f46b0a7cb89342a17a382a0ba1c86de9059 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple/CheckoutData.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Repository/CatalogProductSimple/CheckoutData.xml
@@ -137,6 +137,14 @@
             </field>
         </dataset>
 
+        <dataset name="simple_order_tier_price_5">
+            <field name="qty" xsi:type="string">5</field>
+            <field name="cartItem" xsi:type="array">
+                <item name="price" xsi:type="string">40</item>
+                <item name="subtotal" xsi:type="string">40</item>
+            </field>
+        </dataset>
+
         <dataset name="simple_order_10_dollar_product">
             <field name="qty" xsi:type="string">1</field>
             <field name="cartItem" xsi:type="array">
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php
index d5279557ec5af84902fbc2a57548df2dcf0aadf6..4edee00a57dbefd8a15846731fa7e888b66186ad 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View/ConfigurableOptions.php
@@ -34,6 +34,13 @@ class ConfigurableOptions extends CustomOptions
      */
     protected $priceBlock = '//*[@class="product-info-main"]//*[contains(@class,"price-box")]';
 
+    /**
+     * Selector for tier prices.
+     *
+     * @var string
+     */
+    private $tierPricesSelector = '.prices-tier li';
+
     /**
      * Get configurable product options
      *
@@ -93,11 +100,16 @@ class ConfigurableOptions extends CustomOptions
         }
 
         $productVariations = array_keys($productVariations);
-
         $result = [];
         foreach ($productVariations as $variation) {
             $variationOptions = explode(' ', $variation);
-            $result[$variation]['price'] = $this->getOptionPrice($variationOptions, $attributesData);
+            //Select all options specified in variation
+            $this->chooseOptions($variationOptions, $attributesData);
+            $result[$variation]['price'] = $this->getOptionPrice();
+            $tierPrices = $this->getOptionTierPrices();
+            if (count($tierPrices) > 0) {
+                $result[$variation]['tierPrices'] = $tierPrices;
+            }
         }
 
         return $result;
@@ -106,25 +118,34 @@ class ConfigurableOptions extends CustomOptions
     /**
      * Get option price
      *
-     * @param array $variationOptions
-     * @param array $attributesData
      * @return null|string
      */
-    protected function getOptionPrice($variationOptions, $attributesData)
+    protected function getOptionPrice()
     {
-        //Select all options specified in variation
-        foreach ($variationOptions as $variationSelection) {
-            list ($attribute, $option) = explode(':', $variationSelection);
-            $attributeTitle = $attributesData[$attribute]['label'];
-            $optionTitle = $attributesData[$attribute]['options'][$option]['label'];
-            $this->selectOption($attributeTitle, $optionTitle);
-        }
-
         $priceBlock = $this->getPriceBlock();
         $price = ($priceBlock->isOldPriceVisible()) ? $priceBlock->getOldPrice() : $priceBlock->getPrice();
         return $price;
     }
 
+    /**
+     * Get tier prices of all variations
+     *
+     * @return array
+     */
+    private function getOptionTierPrices()
+    {
+        $prices = [];
+        $tierPricesNodes = $this->_rootElement->getElements($this->tierPricesSelector);
+        foreach ($tierPricesNodes as $node) {
+            preg_match('#^[^\d]+(\d+)[^\d]+(\d+(?:(?:,\d+)*)+(?:.\d+)*).*#i', $node->getText(), $matches);
+            $prices[] = [
+                'qty' => isset($matches[1]) ? $matches[1] : null,
+                'price_qty' => isset($matches[2]) ? $matches[2] : null,
+            ];
+        }
+        return $prices;
+    }
+
     /**
      * Get block price.
      *
@@ -139,6 +160,8 @@ class ConfigurableOptions extends CustomOptions
     }
 
     /**
+     * Select option from the select element.
+     *
      * @param string $attributeTitle
      * @param string $optionTitle
      */
@@ -147,4 +170,22 @@ class ConfigurableOptions extends CustomOptions
         $this->_rootElement->find(sprintf($this->optionSelector, $attributeTitle), Locator::SELECTOR_XPATH, 'select')
             ->setValue($optionTitle);
     }
+
+    /**
+     * Choose options of the configurable product
+     *
+     * @param $variationOptions
+     * @param $attributesData
+     * @return void
+     */
+    protected function chooseOptions($variationOptions, $attributesData)
+    {
+        //Select all options specified in variation
+        foreach ($variationOptions as $variationSelection) {
+            list ($attribute, $option) = explode(':', $variationSelection);
+            $attributeTitle = $attributesData[$attribute]['label'];
+            $optionTitle = $attributesData[$attribute]['options'][$option]['label'];
+            $this->selectOption($attributeTitle, $optionTitle);
+        }
+    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductTierPriceOnProductPage.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductTierPriceOnProductPage.php
new file mode 100644
index 0000000000000000000000000000000000000000..74c885a727880edffd79717f5f30689135a3704d
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductTierPriceOnProductPage.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\ConfigurableProduct\Test\Constraint;
+
+use Magento\Catalog\Test\Constraint\AssertProductPage;
+use Magento\ConfigurableProduct\Test\Block\Product\View\ConfigurableOptions;
+
+/**
+ * Open created configurble product on frontend and choose variation with tier price
+ */
+class AssertProductTierPriceOnProductPage extends AssertProductPage
+{
+    /**
+     * Verify that tier prices configured for all variations of configured product displayed as expected.
+     *
+     * @return array
+     */
+    public function verify()
+    {
+        $errors = [];
+        /** @var ConfigurableOptions $optionsBlock */
+        $optionsBlock = $this->pageView->getConfigurableAttributesBlock();
+        $formTierPrices = $optionsBlock->getOptionsPrices($this->product);
+        $products = ($this->product->getDataFieldConfig('configurable_attributes_data')['source'])->getProducts();
+        foreach ($products as $key => $product) {
+            $configuredTierPrice = [];
+            $actualTierPrices = isset($formTierPrices[$key]['tierPrices']) ? $formTierPrices[$key]['tierPrices'] : [];
+            $tierPrices = $product->getTierPrice() ?: [];
+            foreach ($tierPrices as $tierPrice) {
+                $configuredTierPrice[] = [
+                    'qty' => $tierPrice['price_qty'],
+                    'price_qty' => $tierPrice['price'],
+                ];
+            }
+
+            if ($configuredTierPrice != $actualTierPrices) {
+                $errors[] = sprintf('Tier prices for variation %s doesn\'t equals to configured.', $key);
+            }
+        }
+
+        return $errors;
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Page/Product/CatalogProductView.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Page/Product/CatalogProductView.xml
index c2c5d8428b480dd5ccae46f67d2065bc203b8331..c825f733de1790ef5e8f0a81ad38c37a493df12f 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Page/Product/CatalogProductView.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Page/Product/CatalogProductView.xml
@@ -10,6 +10,6 @@
     <block name="viewBlock">
       <render name="configurable" class="Magento\ConfigurableProduct\Test\Block\Product\View"/>
     </block>
-    <block name="configurableAttributesBlock" class="Magento\ConfigurableProduct\Test\Block\Product\View\ConfigurableOptions" locator="#product-options-wrapper" strategy="css selector"/>
+    <block name="configurableAttributesBlock" class="Magento\ConfigurableProduct\Test\Block\Product\View\ConfigurableOptions" locator=".product-info-main" strategy="css selector"/>
   </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/CheckoutData.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/CheckoutData.xml
index bb9f7a4ae03b19500b954e187a8765121579acf7..949c6dc065c494a18e2ae617ef859f6663dd05d4 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/CheckoutData.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/CheckoutData.xml
@@ -154,6 +154,22 @@
             </field>
         </dataset>
 
+        <dataset name="configurable_two_new_options_with_tier_price">
+            <field name="options" xsi:type="array">
+                <item name="configurable_options" xsi:type="array">
+                    <item name="0" xsi:type="array">
+                        <item name="title" xsi:type="string">attribute_key_0</item>
+                        <item name="value" xsi:type="string">option_key_1</item>
+                    </item>
+                </item>
+            </field>
+            <field name="cartItem" xsi:type="array">
+                <item name="price" xsi:type="string">9</item>
+                <item name="qty" xsi:type="string">1</item>
+                <item name="subtotal" xsi:type="string">9</item>
+            </field>
+        </dataset>
+
         <dataset name="configurable_two_options_with_assigned_product">
             <field name="options" xsi:type="array">
                 <item name="configurable_options" xsi:type="array">
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml
index cf9d73d3dcd2e727dc7cdb290ecf74d17a453c31..44e2e14545db02103bfe2fa2613f196937cfc558 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct/ConfigurableAttributesData.xml
@@ -440,6 +440,42 @@
             </field>
         </dataset>
 
+        <dataset name="two_options_with_assigned_product_tier_price">
+            <field name="attributes_data" xsi:type="array">
+                <item name="attribute_key_0" xsi:type="array">
+                    <item name="options" xsi:type="array">
+                        <item name="option_key_0" xsi:type="array">
+                            <item name="label" xsi:type="string">option_key_1_%isolation%</item>
+                            <item name="pricing_value" xsi:type="string">560</item>
+                            <item name="include" xsi:type="string">Yes</item>
+                        </item>
+                        <item name="option_key_1" xsi:type="array">
+                            <item name="label" xsi:type="string">option_key_2_%isolation%</item>
+                            <item name="pricing_value" xsi:type="string">10</item>
+                            <item name="include" xsi:type="string">Yes</item>
+                        </item>
+                    </item>
+                </item>
+            </field>
+            <field name="attributes" xsi:type="array">
+                <item name="attribute_key_0" xsi:type="string">catalogProductAttribute::attribute_type_dropdown_two_options</item>
+            </field>
+            <field name="products" xsi:type="array">
+                <item name="attribute_key_0:option_key_0" xsi:type="string">catalogProductSimple::default</item>
+                <item name="attribute_key_0:option_key_1" xsi:type="string">catalogProductSimple::simple_with_tier_price</item>
+            </field>
+            <field name="matrix" xsi:type="array">
+                <item name="attribute_key_0:option_key_0" xsi:type="array">
+                    <item name="qty" xsi:type="string">10</item>
+                    <item name="weight" xsi:type="string">1</item>
+                </item>
+                <item name="attribute_key_0:option_key_1" xsi:type="array">
+                    <item name="qty" xsi:type="string">20</item>
+                    <item name="weight" xsi:type="string">1</item>
+                </item>
+            </field>
+        </dataset>
+
         <dataset name="color_and_size">
             <field name="attributes_data" xsi:type="array">
                 <item name="attribute_key_0" xsi:type="array">
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
index 14ff24f18908da187a0631662cf74bfdaad5db6f..42277101cfbdaf5622efb6b4347dafb75bb113aa 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
@@ -159,5 +159,19 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductOnCustomWebsite" />
         </variation>
+        <variation name="CreateConfigurableProductEntityTestVariation10" summary="Create configurable product with tier price for one item">
+            <data name="product/data/url_key" xsi:type="string">configurable-product-%isolation%</data>
+            <data name="product/data/configurable_attributes_data/dataset" xsi:type="string">two_options_with_assigned_product_tier_price</data>
+            <data name="product/data/checkout_data/dataset" xsi:type="string">configurable_two_new_options_with_special_price</data>
+            <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
+            <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
+            <data name="product/data/price/value" xsi:type="string">1</data>
+            <data name="product/data/weight" xsi:type="string">2</data>
+            <data name="product/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
+            <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
+            <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
+            <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
+            <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertProductTierPriceOnProductPage" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml
index b1da43e473bc5d78d4bfaf0fbcbb718dac6acd3e..ad937cf472de7145429b16983288df69bb851134 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/ReorderUsingVaultTest.xml
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Vault\Test\TestCase\ReorderUsingVaultTest" summary="Reorder from Admin with saved within PayPal Payflow Pro credit card">
-        <variation name="ReorderUsingVaultPayflowProTestVariation1" summary="Reorder from Admin with saved within PayPal Payflow Pro credit card for Guest Customer" ticketId="MAGETWO-54872">
+        <variation name="ReorderUsingVaultPayflowProTestVariation1" summary="Reorder from Admin with saved within PayPal Payflow Pro credit card for Guest Customer" ticketId="MAGETWO-34217, MAGETWO-54872">
             <data name="description" xsi:type="string">Reorder from Admin with saved within PayPal Payflow Pro credit card for Guest Customer</data>
             <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
             <data name="customer/dataset" xsi:type="string">default</data>
diff --git a/dev/tests/integration/testsuite/Magento/Authorizenet/Model/Directpost/RequestTest.php b/dev/tests/integration/testsuite/Magento/Authorizenet/Model/Directpost/RequestTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab35c27985da8f13fb2fd4362c719fe0d3267315
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Authorizenet/Model/Directpost/RequestTest.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Authorizenet\Model\Directpost;
+
+use Magento\Authorizenet\Model\Directpost;
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\Api\SearchCriteriaBuilder;
+use Magento\Framework\App\ObjectManager;
+use Magento\Sales\Api\Data\OrderInterface;
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Sales\Model\Order;
+use Magento\TestFramework\Helper\Bootstrap;
+use PHPUnit_Framework_MockObject_MockObject as MockObject;
+
+/**
+ * Class contains tests for Authorize.net Direct Post request handler
+ */
+class RequestTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Order
+     */
+    private $order;
+
+    /**
+     * @var Request
+     */
+    private $request;
+
+    /**
+     * @var ObjectManager
+     */
+    private $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = Bootstrap::getObjectManager();
+
+        $this->order = $this->getOrder();
+        $this->request = $this->objectManager->get(Request::class);
+    }
+
+    /**
+     * @covers \Magento\Authorizenet\Model\Directpost\Request::setDataFromOrder
+     * @magentoDataFixture Magento/Authorizenet/_files/order.php
+     */
+    public function testSetDataFromOrder()
+    {
+        $customerEmail = 'john.doe@example.com';
+        $merchantEmail = 'merchant@example.com';
+
+        /** @var Directpost|MockObject $payment */
+        $payment = $this->getMockBuilder(Directpost::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getConfigData'])
+            ->getMock();
+
+        $payment->expects(static::exactly(2))
+            ->method('getConfigData')
+            ->willReturnMap([
+                ['email_customer', null, $customerEmail],
+                ['merchant_email', null, $merchantEmail]
+            ]);
+
+        $result = $this->request->setDataFromOrder($this->order, $payment);
+
+        static::assertEquals('US', $result->getXCountry());
+        static::assertEquals('UK', $result->getXShipToCountry());
+        static::assertEquals($customerEmail, $result->getXEmailCustomer());
+        static::assertEquals($merchantEmail, $result->getXMerchantEmail());
+    }
+
+    /**
+     * Get stored order
+     * @return Order
+     */
+    private function getOrder()
+    {
+        /** @var FilterBuilder $filterBuilder */
+        $filterBuilder = $this->objectManager->get(FilterBuilder::class);
+        $filters = [
+            $filterBuilder->setField(OrderInterface::INCREMENT_ID)
+                ->setValue('100000002')
+                ->create()
+        ];
+
+        /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
+        $searchCriteria = $searchCriteriaBuilder->addFilters($filters)
+            ->create();
+
+        $orderRepository = $this->objectManager->get(OrderRepositoryInterface::class);
+        $orders = $orderRepository->getList($searchCriteria)
+            ->getItems();
+
+        /** @var OrderInterface $order */
+        return array_pop($orders);
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Authorizenet/Model/DirectpostTest.php b/dev/tests/integration/testsuite/Magento/Authorizenet/Model/DirectpostTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c20db43c127b4a9c058cb206cde14822f9aafd84
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Authorizenet/Model/DirectpostTest.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Authorizenet\Model;
+
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\Api\SearchCriteriaBuilder;
+use Magento\Framework\App\ObjectManager;
+use Magento\Framework\HTTP\ZendClient;
+use Magento\Framework\HTTP\ZendClientFactory;
+use Magento\Sales\Api\Data\OrderInterface;
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Sales\Model\Order\Payment;
+use Magento\TestFramework\Helper\Bootstrap;
+use PHPUnit_Framework_MockObject_MockObject as MockObject;
+use Zend_Http_Response;
+
+/**
+ * Class contains tests for Direct Post integration
+ */
+class DirectpostTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManager
+     */
+    private $objectManager;
+
+    /**
+     * @var ZendClientFactory|MockObject
+     */
+    private $httpClientFactory;
+
+    /**
+     * @var Directpost
+     */
+    private $directPost;
+
+    protected function setUp()
+    {
+        $this->objectManager = Bootstrap::getObjectManager();
+
+        $this->httpClientFactory = $this->getMockBuilder(ZendClientFactory::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->directPost = $this->objectManager->create(Directpost::class, [
+            'httpClientFactory' => $this->httpClientFactory
+        ]);
+    }
+
+    /**
+     * @covers \Magento\Authorizenet\Model\Directpost::capture
+     * @magentoDataFixture Magento/Authorizenet/_files/order.php
+     */
+    public function testCapture()
+    {
+        $amount = 120.15;
+        /** @var Payment $payment */
+        $payment = $this->getPayment();
+        $transactionId = '106235225';
+
+        /** @var ZendClient|MockObject $httpClient */
+        $httpClient = $this->getMockBuilder(ZendClient::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['setUri', 'setConfig', 'setParameterPost', 'setMethod', 'request'])
+            ->getMock();
+
+        $this->httpClientFactory->expects(static::once())
+            ->method('create')
+            ->willReturn($httpClient);
+
+        $response = $this->getMockBuilder(Zend_Http_Response::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getBody'])
+            ->getMock();
+        $response->expects(static::once())
+            ->method('getBody')
+            ->willReturn(
+                "1(~)1(~)1(~)This transaction has been approved.(~)AWZFTG(~)P(~){$transactionId}(~)100000002(~)
+                (~)120.15(~)CC(~)prior_auth_capture(~)(~)Anthony(~)Nealy(~)(~)Pearl St(~)Los Angeles(~)California
+                (~)10020(~)US(~)22-333-44(~)(~)customer@example.com(~)John(~)Doe(~)
+                (~)Bourne St(~)London(~)(~)DW23W(~)UK(~)0.00(~)(~){$amount}(~)(~)
+                (~)74B5D54ADFE98093A0FF6446(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)XXXX1111(~)Visa(~)(~)(~)(~)(~)
+                (~)(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)(~)"
+            );
+
+        $httpClient->expects(static::once())
+            ->method('request')
+            ->willReturn($response);
+
+        $this->directPost->capture($payment, $amount);
+
+        static::assertEquals($transactionId, $payment->getTransactionId());
+        static::assertFalse($payment->getIsTransactionClosed());
+        static::assertEquals('US', $payment->getOrder()->getBillingAddress()->getCountryId());
+        static::assertEquals('UK', $payment->getOrder()->getShippingAddress()->getCountryId());
+    }
+
+    /**
+     * Get order payment
+     * @return Payment
+     */
+    private function getPayment()
+    {
+        /** @var FilterBuilder $filterBuilder */
+        $filterBuilder = $this->objectManager->get(FilterBuilder::class);
+        $filters = [
+            $filterBuilder->setField(OrderInterface::INCREMENT_ID)
+                ->setValue('100000002')
+                ->create()
+        ];
+
+        /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
+        $searchCriteria = $searchCriteriaBuilder->addFilters($filters)
+            ->create();
+
+        $orderRepository = $this->objectManager->get(OrderRepositoryInterface::class);
+        $orders = $orderRepository->getList($searchCriteria)
+            ->getItems();
+
+        /** @var OrderInterface $order */
+        $order = array_pop($orders);
+        return $order->getPayment();
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Authorizenet/_files/order.php b/dev/tests/integration/testsuite/Magento/Authorizenet/_files/order.php
new file mode 100644
index 0000000000000000000000000000000000000000..564ab84a8f8527c61bf8e79f7a57ad53b971089f
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Authorizenet/_files/order.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Sales\Model\Order;
+use Magento\Sales\Model\Order\Address;
+use Magento\Sales\Model\Order\Payment;
+use Magento\TestFramework\Helper\Bootstrap;
+
+$objectManager = Bootstrap::getObjectManager();
+
+$amount = 120.15;
+
+/** @var Payment $payment */
+$payment = $objectManager->get(Payment::class);
+$payment
+    ->setMethod('authorizenet_directpost')
+    ->setAnetTransType('AUTH_ONLY')
+    ->setBaseAmountAuthorized($amount)
+    ->setPoNumber('10101200');
+
+/** @var Address\ $billingAddress */
+$billingAddress = $objectManager->create(Address::class, [
+    'data' => [
+        'firstname' => 'John',
+        'lastname' => 'Doe',
+        'email' => 'customer@example.com',
+        'street' => 'Pearl St',
+        'city' => 'Los Angeles',
+        'region' => 'CA',
+        'postcode' => '10020',
+        'country_id' => 'US',
+        'telephone' => '22-333-44',
+        'address_type' => 'billing'
+    ]
+]);
+
+$shippingAddress = $objectManager->create(Address::class, [
+    'data' => [
+        'firstname' => 'John',
+        'lastname' => 'Doe',
+        'email' => 'customer@example.com',
+        'street' => 'Bourne St',
+        'city' => 'London',
+        'postcode' => 'DW23W',
+        'country_id' => 'UK',
+        'telephone' => '22-333-44',
+        'address_type' => 'billing'
+    ]
+]);
+
+/** @var Order $order */
+$order = $objectManager->create(Order::class);
+$order->setIncrementId('100000002')
+    ->setQuoteId(2)
+    ->setIncrementId('100000002')
+    ->setBaseGrandTotal($amount)
+    ->setBaseCurrencyCode('USD')
+    ->setBaseTaxAmount($amount)
+    ->setBaseShippingAmount($amount)
+    ->setCustomerEmail('customer@example.com')
+    ->setBillingAddress($billingAddress)
+    ->setShippingAddress($shippingAddress)
+    ->setPayment($payment);
+
+/** @var OrderRepositoryInterface $orderRepository */
+$orderRepository = $objectManager->get(OrderRepositoryInterface::class);
+$orderRepository->save($order);
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ApiAnnotationTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ApiAnnotationTest.php
deleted file mode 100644
index a1e7c25e3d6008cff744a090c0c01a810efad8a4..0000000000000000000000000000000000000000
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ApiAnnotationTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Scan source code for unmarked API interfaces
- *
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Test\Integrity;
-
-use Magento\Framework\App\Utility\Files;
-use Magento\Framework\Component\ComponentRegistrar;
-
-class ApiAnnotationTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * API annotation pattern
-     */
-    private $apiAnnotation  = '~/\*{2}(.*@api.*)\*/\s+(?=interface)~s';
-
-    public function testApiAnnotations()
-    {
-        $modulePaths = array_map(function ($path) {
-            return $path . DIRECTORY_SEPARATOR .  'Api';
-        }, (new ComponentRegistrar())->getPaths(ComponentRegistrar::MODULE));
-
-        foreach (Files::init()->getFiles($modulePaths, '*.php', true) as $file) {
-            $fileContent = file_get_contents($file);
-            if (!preg_match($this->apiAnnotation, $fileContent)) {
-                $result[] = $file;
-            }
-        }
-        if (!empty($result)) {
-            $this->fail(sprintf(
-                'Found %s file(s) without @api annotations under Api namespace: %s',
-                count($result),
-                PHP_EOL . implode(PHP_EOL, $result)
-            ));
-        }
-    }
-}