/**
  * @param string $currency
  * @param ProductUnitQuantity[] $productUnitQuantities
  * @param OrderLineItem[] $lineItemsWithIdentifier
  */
 protected function fillLineItemsPrice($currency, array $productUnitQuantities, array $lineItemsWithIdentifier)
 {
     $prices = $this->productPriceProvider->getMatchedPrices($productUnitQuantities, $currency);
     foreach ($lineItemsWithIdentifier as $identifier => $lineItem) {
         if (array_key_exists($identifier, $prices) && $prices[$identifier] instanceof Price) {
             $lineItem->setPrice($prices[$identifier]);
         }
     }
 }
 /**
  * @param Product $product
  * @param ProductUnit $productUnit
  * @param float $quantity
  * @param string $currency
  * @param PriceList $priceList
  * @return Price
  */
 protected function getPrice(Product $product, ProductUnit $productUnit, $quantity, $currency, PriceList $priceList)
 {
     $productUnitQuantity = new ProductUnitQuantity($product, $productUnit, $quantity);
     $identifier = $productUnitQuantity->getIdentifier();
     if (!isset($this->prices[$priceList->getId()][$currency][$identifier])) {
         $prices = $this->productPriceProvider->getMatchedPrices([$productUnitQuantity], $currency, $priceList);
         $this->prices[$priceList->getId()][$currency][$identifier] = $prices[$identifier];
     }
     $price = $this->prices[$priceList->getId()][$currency][$identifier];
     return $price ?: Price::create(mt_rand(10, 1000), $currency);
 }
 /**
  * @dataProvider getMatchedPricesDataProvider
  *
  * @param array $productUnitQuantities
  * @param string $currency
  * @param bool $withPriceList
  * @param array $repositoryData
  * @param array $expectedData
  */
 public function testGetMatchedPrices(array $productUnitQuantities, $currency, $withPriceList, array $repositoryData, array $expectedData)
 {
     $priceList = $this->getEntity('OroB2B\\Bundle\\PricingBundle\\Entity\\PriceList', 12);
     if ($withPriceList) {
         $this->requestHandler->expects($this->never())->method('getPriceList');
     } else {
         $this->requestHandler->expects($this->once())->method('getPriceList')->willReturn($priceList);
     }
     $repository = $this->getMockBuilder('OroB2B\\Bundle\\PricingBundle\\Entity\\Repository\\ProductPriceRepository')->disableOriginalConstructor()->getMock();
     $repository->expects($this->once())->method('getPricesBatch')->willReturn($repositoryData);
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $em->expects($this->once())->method('getRepository')->with(self::CLASS_NAME)->willReturn($repository);
     $this->registry->expects($this->once())->method('getManagerForClass')->with(self::CLASS_NAME)->willReturn($em);
     $prices = $this->provider->getMatchedPrices($productUnitQuantities, $currency, $withPriceList ? $priceList : null);
     $this->assertInternalType('array', $prices);
     $this->assertEquals(count($productUnitQuantities), count($prices));
     $this->assertEquals($expectedData, $prices);
 }