/**
  * Test isStockAvailable() with a purchasable non variant.
  *
  * @dataProvider dataIsValidVariant
  */
 public function testIsValidVariant($variantIsEnabled, $variantStock, $stockRequired, $useStock, $isValid)
 {
     $variant = $this->prophesize('Elcodi\\Component\\Product\\Entity\\Interfaces\\VariantInterface');
     $variant->isEnabled()->willReturn($variantIsEnabled);
     $variant->getStock()->willReturn($variantStock);
     $variant = $variant->reveal();
     $variantValidator = new VariantStockValidator();
     $this->assertEquals($isValid, $variantValidator->isStockAvailable($variant, $stockRequired, $useStock));
     $purchasableValidator = new PurchasableStockValidator();
     $purchasableValidator->addPurchasableStockValidator($variantValidator);
     $this->assertEquals($isValid, $purchasableValidator->isStockAvailable($variant, $stockRequired, $useStock));
 }
 /**
  * Test isStockAvailable() with a purchasable non pack.
  *
  * @dataProvider dataIsValidPack
  */
 public function testIsValidPack($packIsEnabled, $packType, $packStock, $productIsEnabled, $productStock, $variantIsEnabled, $variantStock, $stockRequired, $useStock, $isValid)
 {
     $product = $this->prophesize('Elcodi\\Component\\Product\\Entity\\Interfaces\\ProductInterface');
     $product->isEnabled()->willReturn($productIsEnabled);
     $product->getStock()->willReturn($productStock);
     $variant = $this->prophesize('Elcodi\\Component\\Product\\Entity\\Interfaces\\VariantInterface');
     $variant->isEnabled()->willReturn($variantIsEnabled);
     $variant->getStock()->willReturn($variantStock);
     $pack = $this->prophesize('Elcodi\\Component\\Product\\Entity\\Interfaces\\PackInterface');
     $pack->isEnabled()->willReturn($packIsEnabled);
     $pack->getStockType()->willReturn($packType);
     $pack->getStock()->willReturn($packStock);
     $pack->getPurchasables()->willReturn(new ArrayCollection([$product->reveal(), $variant->reveal()]));
     $pack = $pack->reveal();
     $packValidator = new PackStockValidator();
     $packValidator->addPurchasableStockValidator(new ProductStockValidator());
     $packValidator->addPurchasableStockValidator(new VariantStockValidator());
     $this->assertEquals($isValid, $packValidator->isStockAvailable($pack, $stockRequired, $useStock));
     $purchasableValidator = new PurchasableStockValidator();
     $purchasableValidator->addPurchasableStockValidator(new ProductStockValidator());
     $purchasableValidator->addPurchasableStockValidator(new VariantStockValidator());
     $purchasableValidator->addPurchasableStockValidator($packValidator);
     $this->assertEquals($isValid, $purchasableValidator->isStockAvailable($pack, $stockRequired, $useStock));
 }