/**
  * @param array $addressData
  * @param bool $useBaseCurrency
  * @param string $shippingTaxClass
  * @param bool shippingPriceInclTax
  * @param array $expectedValue
  * @dataProvider getShippingDataObjectDataProvider
  */
 public function testGetShippingDataObject(array $addressData, $useBaseCurrency, $shippingTaxClass, $shippingPriceInclTax)
 {
     $baseShippingAmount = $addressData['base_shipping_amount'];
     $shippingAmount = $addressData['shipping_amount'];
     $itemMock = $this->getMock('Magento\\Tax\\Api\\Data\\QuoteDetailsItemInterface');
     $this->taxConfig->expects($this->any())->method('getShippingTaxClass')->with($this->store)->will($this->returnValue($shippingTaxClass));
     $this->taxConfig->expects($this->any())->method('shippingPriceIncludesTax')->with($this->store)->will($this->returnValue($shippingPriceInclTax));
     $this->address->expects($this->atLeastOnce())->method('getShippingDiscountAmount')->willReturn($shippingAmount);
     if ($shippingAmount) {
         if ($useBaseCurrency && $shippingAmount != 0) {
             $this->address->expects($this->once())->method('getBaseShippingDiscountAmount')->willReturn($baseShippingAmount);
             $this->quoteDetailsItemBuilderMock->expects($this->once())->method('setDiscountAmount')->with($baseShippingAmount);
         } else {
             $this->address->expects($this->never())->method('getBaseShippingDiscountAmount');
             $this->quoteDetailsItemBuilderMock->expects($this->once())->method('setDiscountAmount')->with($shippingAmount);
         }
     }
     foreach ($addressData as $key => $value) {
         $this->address->setData($key, $value);
     }
     $this->taxClassKeyBuilderMock->expects($this->any())->method('setType')->willReturnSelf();
     $this->taxClassKeyBuilderMock->expects($this->any())->method('setValue')->with($shippingTaxClass)->willReturnSelf();
     $this->quoteDetailsItemBuilderMock->expects($this->once())->method('create')->willReturn($itemMock);
     $this->assertEquals($itemMock, $this->commonTaxCollector->getShippingDataObject($this->address, $useBaseCurrency));
 }
 /**
  * @param array $addressData
  * @param bool $useBaseCurrency
  * @param string $shippingTaxClass
  * @param bool $shippingPriceInclTax
  * @dataProvider getShippingDataObjectDataProvider
  */
 public function testGetShippingDataObject(array $addressData, $useBaseCurrency, $shippingTaxClass, $shippingPriceInclTax)
 {
     $baseShippingAmount = $addressData['base_shipping_amount'];
     $shippingAmount = $addressData['shipping_amount'];
     $this->taxConfig->expects($this->any())->method('getShippingTaxClass')->with($this->store)->will($this->returnValue($shippingTaxClass));
     $this->taxConfig->expects($this->any())->method('shippingPriceIncludesTax')->with($this->store)->will($this->returnValue($shippingPriceInclTax));
     $this->address->expects($this->atLeastOnce())->method('getShippingDiscountAmount')->willReturn($shippingAmount);
     if ($shippingAmount) {
         if ($useBaseCurrency && $shippingAmount != 0) {
             $this->address->expects($this->once())->method('getBaseShippingDiscountAmount')->willReturn($baseShippingAmount);
             $expectedDiscountAmount = $baseShippingAmount;
         } else {
             $this->address->expects($this->never())->method('getBaseShippingDiscountAmount');
             $expectedDiscountAmount = $shippingAmount;
         }
     }
     foreach ($addressData as $key => $value) {
         $this->address->setData($key, $value);
     }
     $this->assertEquals($this->quoteDetailsItemDataObject, $this->commonTaxCollector->getShippingDataObject($this->address, $useBaseCurrency));
     if ($shippingAmount) {
         $this->assertEquals($expectedDiscountAmount, $this->quoteDetailsItemDataObject->getDiscountAmount());
     }
 }
Exemplo n.º 3
0
 /**
  * Set and validate Quote address
  * All errors added to _errors
  *
  * @param \Magento\Quote\Model\Quote\Address $address
  * @param array $data
  * @return $this
  */
 protected function _setQuoteAddress(\Magento\Quote\Model\Quote\Address $address, array $data)
 {
     $isAjax = !$this->getIsValidate();
     // Region is a Data Object, so it is represented by an array. validateData() doesn't understand arrays, so we
     // need to merge region data with address data. This is going to be removed when we switch to use address Data
     // Object instead of the address model.
     // Note: if we use getRegion() here it will pull region from db using the region_id
     $data = isset($data['region']) && is_array($data['region']) ? array_merge($data, $data['region']) : $data;
     $addressForm = $this->_metadataFormFactory->create(AddressMetadataInterface::ENTITY_TYPE_ADDRESS, 'adminhtml_customer_address', $data, $isAjax, CustomerForm::DONT_IGNORE_INVISIBLE, []);
     // prepare request
     // save original request structure for files
     if ($address->getAddressType() == \Magento\Quote\Model\Quote\Address::TYPE_SHIPPING) {
         $requestData = ['order' => ['shipping_address' => $data]];
         $requestScope = 'order/shipping_address';
     } else {
         $requestData = ['order' => ['billing_address' => $data]];
         $requestScope = 'order/billing_address';
     }
     $request = $addressForm->prepareRequest($requestData);
     $addressData = $addressForm->extractData($request, $requestScope);
     if ($this->getIsValidate()) {
         $errors = $addressForm->validateData($addressData);
         if ($errors !== true) {
             if ($address->getAddressType() == \Magento\Quote\Model\Quote\Address::TYPE_SHIPPING) {
                 $typeName = __('Shipping Address: ');
             } else {
                 $typeName = __('Billing Address: ');
             }
             foreach ($errors as $error) {
                 $this->_errors[] = $typeName . $error;
             }
             $address->setData($addressForm->restoreData($addressData));
         } else {
             $address->setData($addressForm->compactData($addressData));
         }
     } else {
         $address->addData($addressForm->restoreData($addressData));
     }
     return $this;
 }
Exemplo n.º 4
0
 /**
  * @param Address $address
  * @return string
  */
 protected function getAddressId(Address $address)
 {
     if ($address == null) {
         return '';
     }
     if (!$address->hasData('address_sales_rule_id')) {
         if ($address->hasData('address_id')) {
             $address->setData('address_sales_rule_id', $address->getData('address_id'));
         } else {
             $type = $address->getAddressType();
             $tempId = $type . $this->counter++;
             $address->setData('address_sales_rule_id', $tempId);
         }
     }
     return $address->getData('address_sales_rule_id');
 }