/** * @Transform /^product "([^"]+)"$/ * @Transform /^"([^"]+)" product$/ * @Transform /^"([^"]+)" products$/ * @Transform /^(?:a|an) "([^"]+)"$/ * @Transform :product */ public function getProductByName($productName) { $product = $this->productRepository->findOneByName($productName); if (null === $product) { throw new \InvalidArgumentException(sprintf('Product with name "%s" does not exist', $productName)); } return $product; }
/** * @Transform /^"([^"]+)" variant of product "([^"]+)"$/ */ public function getProductVariantByNameAndProduct($variantName, $productName) { $product = $this->productRepository->findOneByName($productName); if (null === $product) { throw new \InvalidArgumentException(sprintf('Product with name "%s" does not exist', $productName)); } $productVariant = $this->productVariantRepository->findOneBy(['name' => $variantName, 'object' => $product]); if (null === $productVariant) { throw new \InvalidArgumentException(sprintf('Product variant with name "%s" of product "%s" does not exist', $variantName, $productName)); } return $productVariant; }
/** * @Transform /^product(?:|s) "([^"]+)"$/ * @Transform /^"([^"]+)" product(?:|s)$/ * @Transform /^(?:a|an) "([^"]+)"$/ * @Transform :product */ public function getProductByName($productName) { $product = $this->productRepository->findOneByName($productName); Assert::notNull($product, sprintf('Product with name "%s" does not exist', $productName)); return $product; }
function it_throws_element_not_found_exception_if_product_variant_has_not_been_found(ProductRepositoryInterface $productRepository, ProductVariantRepositoryInterface $productVariantRepository, ProductInterface $product) { $productRepository->findOneByName('T-Shirt')->willReturn($product); $productVariantRepository->findOneBy(['presentation' => 'Han Solo T-Shirt', 'object' => $product])->willReturn(null); $this->shouldThrow(\InvalidArgumentException::class)->during('getProductVariantByNameAndProduct', ['Han Solo T-Shirt', 'T-Shirt']); }
function it_throws_element_not_found_exception_if_product_has_not_been_found(ProductRepositoryInterface $productRepository) { $productRepository->findOneByName('T-Shirt')->willReturn(null); $this->shouldThrow(\InvalidArgumentException::class)->during('getProductByName', ['T-Shirt']); }