/**
  * @param int $productId
  * @param string $unitCode
  * @param int $quantity
  * @param float $value
  * @param string $currency
  * @return ProductPrice
  */
 protected function createPrice($productId, $unitCode, $quantity, $value, $currency)
 {
     $productPrice = new ProductPrice();
     $price = new Price();
     $price->setCurrency($currency);
     $price->setValue($value);
     $product = new Product();
     $idReflection = new \ReflectionProperty(get_class($product), 'id');
     $idReflection->setAccessible(true);
     $idReflection->setValue($product, $productId);
     $unit = new ProductUnit();
     $unit->setCode($unitCode);
     $productPrice->setProduct($product);
     $productPrice->setUnit($unit);
     $productPrice->setQuantity($quantity);
     $productPrice->setPrice($price);
     return $productPrice;
 }
 public function testProcessLoadPriceAndProduct()
 {
     $productPrice = new ProductPrice();
     $productPrice->setQuantity(555);
     $this->setValue($productPrice, 'value', 1.2);
     $this->setValue($productPrice, 'currency', 'USD');
     /** @var ProductUnit $unit */
     $unit = $this->getReference('product_unit.liter');
     /** @var Product $product */
     $product = $this->getReference('product.1');
     /** @var PriceList $priceList */
     $priceList = $this->getReference('price_list_1');
     $productObject = new Product();
     $productObject->setSku($product->getSku());
     $productPrice->setProduct($product);
     $productPrice->setUnit($unit);
     $productPrice->setPriceList($priceList);
     $this->strategy->process($productPrice);
     $this->assertNotEmpty($productPrice->getPrice());
     $this->assertEquals('USD', $productPrice->getPrice()->getCurrency());
     $this->assertEquals(1.2, $productPrice->getPrice()->getValue());
     $this->assertNotEmpty($productPrice->getProduct());
     $this->assertEquals($product->getSku(), $productPrice->getProduct()->getSku());
 }