diff --git a/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php new file mode 100644 index 0000000000000..27ef64918dee4 --- /dev/null +++ b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php @@ -0,0 +1,65 @@ +productRepository = $productRepository; + $this->visibility = $visibility; + } + + /** + * Get product + * + * @param int $productId + * @return ProductInterface + * @throws GraphQlNoSuchEntityException + */ + public function execute(int $productId): ProductInterface + { + try { + $product = $this->productRepository->getById($productId); + + if (!in_array( + $product->getVisibility(), + $this->visibility->getVisibleInCatalogIds() + )) { + throw new GraphQlNoSuchEntityException( + __("The product that was requested doesn't exist. Verify the product and try again.") + ); + } + } catch (NoSuchEntityException $e) { + throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); + } + return $product; + } +} diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index c0c01c71df764..fe13e074d98fd 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -7,18 +7,15 @@ namespace Magento\SendFriendGraphQl\Model\Resolver; -use Magento\Catalog\Api\Data\ProductInterface; -use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Framework\DataObjectFactory; use Magento\Framework\Event\ManagerInterface; -use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\GraphQl\Config\Element\Field; use Magento\Framework\GraphQl\Exception\GraphQlInputException; -use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException; use Magento\Framework\GraphQl\Query\ResolverInterface; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; +use Magento\SendFriendGraphQl\Model\Provider\GetProduct; /** * @inheritdoc @@ -30,11 +27,6 @@ class SendEmailToFriend implements ResolverInterface */ private $sendFriendFactory; - /** - * @var ProductRepositoryInterface - */ - private $productRepository; - /** * @var DataObjectFactory */ @@ -45,22 +37,27 @@ class SendEmailToFriend implements ResolverInterface */ private $eventManager; + /** + * @var GetProduct + */ + private $getProductProvider; + /** * @param SendFriendFactory $sendFriendFactory - * @param ProductRepositoryInterface $productRepository * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager + * @param GetProduct $getProductProvider */ public function __construct( SendFriendFactory $sendFriendFactory, - ProductRepositoryInterface $productRepository, DataObjectFactory $dataObjectFactory, - ManagerInterface $eventManager + ManagerInterface $eventManager, + GetProduct $getProductProvider ) { $this->sendFriendFactory = $sendFriendFactory; - $this->productRepository = $productRepository; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; + $this->getProductProvider = $getProductProvider; } /** @@ -77,7 +74,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ); } - $product = $this->getProduct($args['input']['product_id']); + $product = $this->getProductProvider->execute($args['input']['product_id']); $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); $sendFriend->setProduct($product); @@ -117,28 +114,6 @@ private function validateSendFriendModel(SendFriend $sendFriend, array $senderDa } } - /** - * Get product - * - * @param int $productId - * @return ProductInterface - * @throws GraphQlNoSuchEntityException - */ - private function getProduct(int $productId): ProductInterface - { - try { - $product = $this->productRepository->getById($productId); - if (!$product->isVisibleInCatalog()) { - throw new GraphQlNoSuchEntityException( - __("The product that was requested doesn't exist. Verify the product and try again.") - ); - } - } catch (NoSuchEntityException $e) { - throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e); - } - return $product; - } - /** * Extract recipients data * diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php index e7401100b7860..e67c1ff40ae6c 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/SendFriend/SendFriendTest.php @@ -11,6 +11,7 @@ use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\TestCase\GraphQl\ResponseContainsErrorsException; use Magento\TestFramework\TestCase\GraphQlAbstract; /** @@ -219,15 +220,8 @@ public function testSendProductWithoutVisibility() email:"recipient2@mail.com" }'; $query = $this->getQuery($productId, $recipients); - - $response = $this->graphQlMutation($query); - self::assertEquals('Name', $response['sendEmailToFriend']['sender']['name']); - self::assertEquals('e@mail.com', $response['sendEmailToFriend']['sender']['email']); - self::assertEquals('Lorem Ipsum', $response['sendEmailToFriend']['sender']['message']); - self::assertEquals('Recipient Name 1', $response['sendEmailToFriend']['recipients'][0]['name']); - self::assertEquals('recipient1@mail.com', $response['sendEmailToFriend']['recipients'][0]['email']); - self::assertEquals('Recipient Name 2', $response['sendEmailToFriend']['recipients'][1]['name']); - self::assertEquals('recipient2@mail.com', $response['sendEmailToFriend']['recipients'][1]['email']); + $this->expectException(ResponseContainsErrorsException::class); + $this->graphQlMutation($query); } /**