From a1d87ba69b48c86812115b89fbf6441404292535 Mon Sep 17 00:00:00 2001 From: Roman Date: Sat, 22 Jun 2019 17:19:18 +0300 Subject: [PATCH 1/3] magento/graphql-ce:#678 Send email to friend --- .../Model/Resolver/ProductService.php | 65 +++++++++++++++++++ .../Model/Resolver/SendEmailToFriend.php | 47 ++++---------- .../GraphQl/SendFriend/SendFriendTest.php | 12 +--- 3 files changed, 79 insertions(+), 45 deletions(-) create mode 100644 app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php new file mode 100644 index 0000000000000..4a37892a44f4c --- /dev/null +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php @@ -0,0 +1,65 @@ +productRepository = $productRepository; + $this->visibility = $visibility; + } + + /** + * Get product + * + * @param int $productId + * @return ProductInterface + * @throws GraphQlNoSuchEntityException + */ + public function getProduct(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..a8cbab4b10305 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\Resolver\ProductService; /** * @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 ProductService + */ + private $productService; + /** * @param SendFriendFactory $sendFriendFactory - * @param ProductRepositoryInterface $productRepository * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager + * @param ProductService $productService */ public function __construct( SendFriendFactory $sendFriendFactory, - ProductRepositoryInterface $productRepository, DataObjectFactory $dataObjectFactory, - ManagerInterface $eventManager + ManagerInterface $eventManager, + ProductService $productService ) { $this->sendFriendFactory = $sendFriendFactory; - $this->productRepository = $productRepository; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; + $this->productService = $productService; } /** @@ -77,7 +74,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ); } - $product = $this->getProduct($args['input']['product_id']); + $product = $this->productService->getProduct($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); } /** From e8c102ae448e61a262203534215e84580dd56b57 Mon Sep 17 00:00:00 2001 From: Roman Date: Sat, 22 Jun 2019 18:08:22 +0300 Subject: [PATCH 2/3] magento/graphql-ce:#678 Send email to friend --- .../GetProduct.php} | 8 ++++---- .../Model/Resolver/SendEmailToFriend.php | 15 +++++++-------- 2 files changed, 11 insertions(+), 12 deletions(-) rename app/code/Magento/SendFriendGraphQl/Model/{Resolver/ProductService.php => Provider/GetProduct.php} (90%) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php similarity index 90% rename from app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php rename to app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php index 4a37892a44f4c..27ef64918dee4 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/ProductService.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Provider/GetProduct.php @@ -6,7 +6,7 @@ declare(strict_types=1); -namespace Magento\SendFriendGraphQl\Model\Resolver; +namespace Magento\SendFriendGraphQl\Model\Provider; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\Product\Visibility; @@ -15,9 +15,9 @@ use Magento\Framework\Exception\NoSuchEntityException; /** - * Class ProductService + * Class GetProduct */ -class ProductService +class GetProduct { /** @var ProductRepositoryInterface */ private $productRepository; @@ -44,7 +44,7 @@ public function __construct( * @return ProductInterface * @throws GraphQlNoSuchEntityException */ - public function getProduct(int $productId): ProductInterface + public function execute(int $productId): ProductInterface { try { $product = $this->productRepository->getById($productId); diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index a8cbab4b10305..320178dec559a 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -15,8 +15,7 @@ use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; -use Magento\SendFriendGraphQl\Model\Resolver\ProductService; - +use Magento\SendFriendGraphQl\Model\Provider\GetProduct; /** * @inheritdoc */ @@ -38,26 +37,26 @@ class SendEmailToFriend implements ResolverInterface private $eventManager; /** - * @var ProductService + * @var GetProduct */ - private $productService; + private $getProductProvider; /** * @param SendFriendFactory $sendFriendFactory * @param DataObjectFactory $dataObjectFactory * @param ManagerInterface $eventManager - * @param ProductService $productService + * @param GetProduct $getProductProvider */ public function __construct( SendFriendFactory $sendFriendFactory, DataObjectFactory $dataObjectFactory, ManagerInterface $eventManager, - ProductService $productService + GetProduct $getProductProvider ) { $this->sendFriendFactory = $sendFriendFactory; $this->dataObjectFactory = $dataObjectFactory; $this->eventManager = $eventManager; - $this->productService = $productService; + $this->getProductProvider = $getProductProvider; } /** @@ -74,7 +73,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ); } - $product = $this->productService->getProduct($args['input']['product_id']); + $product = $this->getProductProvider->execute($args['input']['product_id']); $this->eventManager->dispatch('sendfriend_product', ['product' => $product]); $sendFriend->setProduct($product); From 07e081f8af7e8620d5d7c4857222e8418b6bbb2d Mon Sep 17 00:00:00 2001 From: Vladyslav Podorozhnyi Date: Mon, 24 Jun 2019 21:31:40 +0300 Subject: [PATCH 3/3] magento/graphql-ce:#678 Send email to friend --- .../SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php index 320178dec559a..fe13e074d98fd 100644 --- a/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php +++ b/app/code/Magento/SendFriendGraphQl/Model/Resolver/SendEmailToFriend.php @@ -16,6 +16,7 @@ use Magento\SendFriend\Model\SendFriend; use Magento\SendFriend\Model\SendFriendFactory; use Magento\SendFriendGraphQl\Model\Provider\GetProduct; + /** * @inheritdoc */