diff --git a/src/Sylius/Behat/Context/Api/Shop/CartContext.php b/src/Sylius/Behat/Context/Api/Shop/CartContext.php index b70d1224119b..128c2fe802a1 100644 --- a/src/Sylius/Behat/Context/Api/Shop/CartContext.php +++ b/src/Sylius/Behat/Context/Api/Shop/CartContext.php @@ -148,7 +148,7 @@ public function iRemoveProductFromTheCart(ProductInterface $product, string $tok */ public function iDoNotHaveAccessToSeeTheSummaryOfMyCart(): void { - Assert::true($this->getCart()['code'] === 404); + Assert::same($this->getCart()['code'], 404); } /** diff --git a/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php b/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php index 32bdff5117df..272e5fd7622d 100644 --- a/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php +++ b/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php @@ -252,6 +252,10 @@ public function iConfirmMyOrder(): void */ public function iProceededWithShippingMethod(ShippingMethodInterface $shippingMethod): void { + $y = $this->getCart(); + + $x = (string) $this->iriConverter->getItemFromIri($y['shipments'][0])->getId(); + $this->client->request( Request::METHOD_PATCH, \sprintf( @@ -276,7 +280,7 @@ public function iProceededWithShippingMethod(ShippingMethodInterface $shippingMe */ public function theVisitorHasNoProceedWithShippingMethodInTheCustomerCart(): void { - Assert::true($this->getCart()['code'] === 404); + Assert::same($this->getCart()['code'], 404); } /** diff --git a/src/Sylius/Bundle/ApiBundle/CommandHandler/Checkout/AddressOrderHandler.php b/src/Sylius/Bundle/ApiBundle/CommandHandler/Checkout/AddressOrderHandler.php index c1738c500c21..cd9a939bafd3 100644 --- a/src/Sylius/Bundle/ApiBundle/CommandHandler/Checkout/AddressOrderHandler.php +++ b/src/Sylius/Bundle/ApiBundle/CommandHandler/Checkout/AddressOrderHandler.php @@ -16,7 +16,6 @@ use Doctrine\Persistence\ObjectManager; use SM\Factory\FactoryInterface as StateMachineFactoryInterface; use Sylius\Bundle\ApiBundle\Command\Checkout\AddressOrder; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Component\Core\Model\CustomerInterface; use Sylius\Component\Core\Model\OrderInterface; use Sylius\Component\Core\OrderCheckoutTransitions; @@ -43,23 +42,18 @@ final class AddressOrderHandler /** @var StateMachineFactoryInterface */ private $stateMachineFactory; - /** @var CartVisitorsCustomerContextInterface */ - private $cartVisitorsCustomerContext; - public function __construct( OrderRepositoryInterface $orderRepository, CustomerRepositoryInterface $customerRepository, FactoryInterface $customerFactory, ObjectManager $manager, - StateMachineFactoryInterface $stateMachineFactory, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + StateMachineFactoryInterface $stateMachineFactory ) { $this->orderRepository = $orderRepository; $this->customerRepository = $customerRepository; $this->customerFactory = $customerFactory; $this->manager = $manager; $this->stateMachineFactory = $stateMachineFactory; - $this->cartVisitorsCustomerContext = $cartVisitorsCustomerContext; } public function __invoke(AddressOrder $addressOrder): OrderInterface @@ -82,8 +76,6 @@ public function __invoke(AddressOrder $addressOrder): OrderInterface $customer = $this->provideCustomerByEmail($addressOrder->email); $order->setCustomer($customer); - - $this->cartVisitorsCustomerContext->setCartCustomerId((string) $customer->getId()); } $order->setBillingAddress($addressOrder->billingAddress); @@ -106,7 +98,6 @@ private function provideCustomerByEmail(?string $email): CustomerInterface $customer = $this->customerFactory->createNew(); $customer->setEmail($email); $this->manager->persist($customer); - $this->manager->flush(); } return $customer; diff --git a/src/Sylius/Bundle/ApiBundle/CommandHandler/PickupCartHandler.php b/src/Sylius/Bundle/ApiBundle/CommandHandler/PickupCartHandler.php index 4df1fd11d8dd..604e60b88a9c 100644 --- a/src/Sylius/Bundle/ApiBundle/CommandHandler/PickupCartHandler.php +++ b/src/Sylius/Bundle/ApiBundle/CommandHandler/PickupCartHandler.php @@ -16,7 +16,6 @@ use Doctrine\Persistence\ObjectManager; use Sylius\Bundle\AdminApiBundle\Model\UserInterface; use Sylius\Bundle\ApiBundle\Command\Cart\PickupCart; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Bundle\ApiBundle\Context\UserContextInterface; use Sylius\Component\Channel\Context\ChannelContextInterface; use Sylius\Component\Core\Model\ChannelInterface; @@ -46,23 +45,18 @@ final class PickupCartHandler implements MessageHandlerInterface /** @var RandomnessGeneratorInterface */ private $generator; - /** @var CartVisitorsCustomerContextInterface */ - private $cartVisitorsCustomerContext; - public function __construct( FactoryInterface $cartFactory, ChannelContextInterface $channelContext, UserContextInterface $userContext, ObjectManager $orderManager, - RandomnessGeneratorInterface $generator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + RandomnessGeneratorInterface $generator ) { $this->cartFactory = $cartFactory; $this->channelContext = $channelContext; $this->userContext = $userContext; $this->orderManager = $orderManager; $this->generator = $generator; - $this->cartVisitorsCustomerContext = $cartVisitorsCustomerContext; } public function __invoke(PickupCart $pickupCart) @@ -83,8 +77,6 @@ public function __invoke(PickupCart $pickupCart) $cart->setCustomer($customer); } - $this->cartVisitorsCustomerContext->setCartCustomerId(null); - $cart->setChannel($channel); $cart->setLocaleCode($locale->getCode()); $cart->setCurrencyCode($currency->getCode()); diff --git a/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContext.php b/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContext.php deleted file mode 100644 index 8240136e4026..000000000000 --- a/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContext.php +++ /dev/null @@ -1,38 +0,0 @@ -session = $session; - } - - public function getCartCustomerId(): ?string - { - return $this->session->get('cartCustomerId'); - } - - public function setCartCustomerId(?string $id): void - { - $this->session->set('cartCustomerId', $id); - } -} diff --git a/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContextInterface.php b/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContextInterface.php deleted file mode 100644 index 946640939bb4..000000000000 --- a/src/Sylius/Bundle/ApiBundle/Context/CartVisitorsCustomerContextInterface.php +++ /dev/null @@ -1,22 +0,0 @@ -userContext = $userContext; - $this->cartVisitorsCustomerContext = $cartVisitorsCustomerContext; } public function applyToItem( @@ -73,19 +63,12 @@ private function applyToItemForGetMethod( QueryBuilder $queryBuilder, string $rootAlias ): void { - /** @var string|null $cartCustomerId */ - $cartCustomerId = $this->cartVisitorsCustomerContext->getCartCustomerId(); - - if ($user === null && $cartCustomerId === null) { - $queryBuilder->andWhere(sprintf('%s.customer IS NULL', $rootAlias)); - - return; - } - - if ($user === null && $cartCustomerId !== null) { + if ($user === null) { $queryBuilder - ->andWhere(sprintf('%s.customer = :customer', $rootAlias)) - ->setParameter('customer', $cartCustomerId) + ->leftJoin(sprintf('%s.customer', $rootAlias), 'customer') + ->leftJoin('customer.user', 'user') + ->andWhere('user IS NULL') + ->orWhere(sprintf('%s.customer IS NULL', $rootAlias)) ; return; diff --git a/src/Sylius/Bundle/ApiBundle/Doctrine/QueryItemExtension/OrderMethodsItemExtension.php b/src/Sylius/Bundle/ApiBundle/Doctrine/QueryItemExtension/OrderMethodsItemExtension.php index 7903626b1425..1f919de3db1d 100644 --- a/src/Sylius/Bundle/ApiBundle/Doctrine/QueryItemExtension/OrderMethodsItemExtension.php +++ b/src/Sylius/Bundle/ApiBundle/Doctrine/QueryItemExtension/OrderMethodsItemExtension.php @@ -16,7 +16,6 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\QueryBuilder; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Bundle\ApiBundle\Context\UserContextInterface; use Sylius\Bundle\ApiBundle\Serializer\ContextKeys; use Sylius\Component\Core\Model\AdminUserInterface; @@ -32,15 +31,9 @@ final class OrderMethodsItemExtension implements QueryItemExtensionInterface /** @var UserContextInterface */ private $userContext; - /** @var CartVisitorsCustomerContextInterface */ - private $cartVisitorsCustomerContext; - - public function __construct( - UserContextInterface $userContext, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext - ) { + public function __construct(UserContextInterface $userContext) + { $this->userContext = $userContext; - $this->cartVisitorsCustomerContext = $cartVisitorsCustomerContext; } public function applyToItem( @@ -73,23 +66,12 @@ private function applyUserRulesToItem( string $rootAlias, string $httpRequestMethodType ): void { - /** @var string|null $cartCustomerId */ - $cartCustomerId = $this->cartVisitorsCustomerContext->getCartCustomerId(); - - if ($user === null && $cartCustomerId === null) { - $queryBuilder - ->andWhere(sprintf('%s.customer IS NULL', $rootAlias)) - ->andWhere(sprintf('%s.state = :state', $rootAlias)) - ->setParameter('state', OrderInterface::STATE_CART) - ; - - return; - } - - if ($user === null && $cartCustomerId !== null) { + if ($user === null) { $queryBuilder - ->andWhere(sprintf('%s.customer = :customer', $rootAlias)) - ->setParameter('customer', $cartCustomerId) + ->leftJoin(sprintf('%s.customer', $rootAlias), 'customer') + ->leftJoin('customer.user', 'user') + ->andWhere('user IS NULL') + ->orWhere(sprintf('%s.customer IS NULL', $rootAlias)) ->andWhere(sprintf('%s.state = :state', $rootAlias)) ->setParameter('state', OrderInterface::STATE_CART) ; @@ -108,9 +90,11 @@ private function applyUserRulesToItem( return; } - if ($user instanceof AdminUserInterface && + if ( + $user instanceof AdminUserInterface && in_array('ROLE_API_ACCESS', $user->getRoles(), true) && - $httpRequestMethodType === Request::METHOD_DELETE) { + $httpRequestMethodType === Request::METHOD_DELETE + ) { $queryBuilder ->andWhere(sprintf('%s.state = :state', $rootAlias)) ->setParameter('state', OrderInterface::STATE_CART) @@ -119,9 +103,11 @@ private function applyUserRulesToItem( return; } - if ($user instanceof AdminUserInterface && + if ( + $user instanceof AdminUserInterface && in_array('ROLE_API_ACCESS', $user->getRoles(), true) && - $httpRequestMethodType !== Request::METHOD_DELETE) { + $httpRequestMethodType !== Request::METHOD_DELETE + ) { //admin has also access to modified orders in states other than cart return; diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/services/command_handlers.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/services/command_handlers.xml index 0faceabe05da..22fccc07e46f 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/services/command_handlers.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/services/command_handlers.xml @@ -29,7 +29,6 @@ - @@ -56,7 +55,6 @@ - diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/services/data_providers.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/services/data_providers.xml index 5a060475d3e0..f1bcbba9e73f 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/services/data_providers.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/services/data_providers.xml @@ -67,9 +67,5 @@ - - - - diff --git a/src/Sylius/Bundle/ApiBundle/Resources/config/services/extensions.xml b/src/Sylius/Bundle/ApiBundle/Resources/config/services/extensions.xml index 1f35aa0e696c..d1e7f424d41a 100644 --- a/src/Sylius/Bundle/ApiBundle/Resources/config/services/extensions.xml +++ b/src/Sylius/Bundle/ApiBundle/Resources/config/services/extensions.xml @@ -40,7 +40,6 @@ public="true" > - @@ -50,7 +49,6 @@ public="true" > - diff --git a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Checkout/AddressOrderHandlerSpec.php b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Checkout/AddressOrderHandlerSpec.php index d3502955f5a0..e797dcc99afe 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Checkout/AddressOrderHandlerSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/Checkout/AddressOrderHandlerSpec.php @@ -19,7 +19,6 @@ use SM\Factory\FactoryInterface as StateMachineFactoryInterface; use SM\StateMachine\StateMachineInterface; use Sylius\Bundle\ApiBundle\Command\Checkout\AddressOrder; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Component\Core\Model\AddressInterface; use Sylius\Component\Core\Model\CustomerInterface; use Sylius\Component\Core\Model\OrderInterface; @@ -35,16 +34,14 @@ function let( CustomerRepositoryInterface $customerRepository, FactoryInterface $customerFactory, ObjectManager $manager, - StateMachineFactoryInterface $stateMachineFactory, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + StateMachineFactoryInterface $stateMachineFactory ): void { $this->beConstructedWith( $orderRepository, $customerRepository, $customerFactory, $manager, - $stateMachineFactory, - $cartVisitorsCustomerContext + $stateMachineFactory ); } @@ -79,7 +76,6 @@ function it_handles_addressing_an_order_for_visitor( FactoryInterface $customerFactory, ObjectManager $manager, StateMachineFactoryInterface $stateMachineFactory, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext, CustomerInterface $customer, AddressInterface $billingAddress, AddressInterface $shippingAddress, @@ -100,10 +96,7 @@ function it_handles_addressing_an_order_for_visitor( $customerFactory->createNew()->willReturn($customer); $customer->setEmail('r2d2@droid.com')->shouldBeCalled(); $manager->persist($customer)->shouldBeCalled(); - $manager->flush()->shouldBeCalled(); - $customer->getId()->willReturn('999'); $order->setCustomer($customer)->shouldBeCalled(); - $cartVisitorsCustomerContext->setCartCustomerId('999')->shouldBeCalled(); $order->setBillingAddress($billingAddress)->shouldBeCalled(); $order->setShippingAddress($shippingAddress)->shouldBeCalled(); diff --git a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/PickupCartHandlerSpec.php b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/PickupCartHandlerSpec.php index 101538af0d77..5abcb90f83a3 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/PickupCartHandlerSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/CommandHandler/PickupCartHandlerSpec.php @@ -16,7 +16,6 @@ use Doctrine\Persistence\ObjectManager; use PhpSpec\ObjectBehavior; use Sylius\Bundle\ApiBundle\Command\Cart\PickupCart; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Bundle\ApiBundle\Context\UserContextInterface; use Sylius\Component\Channel\Context\ChannelContextInterface; use Sylius\Component\Core\Model\ChannelInterface; @@ -36,8 +35,7 @@ function let( ChannelContextInterface $channelContext, UserContextInterface $userContext, ObjectManager $orderManager, - RandomnessGeneratorInterface $generator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + RandomnessGeneratorInterface $generator ): void { $this->beConstructedWith( @@ -45,8 +43,7 @@ function let( $channelContext, $userContext, $orderManager, - $generator, - $cartVisitorsCustomerContext + $generator ); } @@ -63,7 +60,6 @@ function it_picks_up_a_cart_for_logged_shop_user( CustomerInterface $customer, ObjectManager $orderManager, RandomnessGeneratorInterface $generator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext, OrderInterface $cart, ChannelInterface $channel, CurrencyInterface $currency, @@ -80,8 +76,6 @@ function it_picks_up_a_cart_for_logged_shop_user( $cart->setCustomer($customer)->shouldBeCalled(); - $cartVisitorsCustomerContext->setCartCustomerId(null)->shouldBeCalled(); - $currency->getCode()->willReturn('USD'); $locale->getCode()->willReturn('en_US'); @@ -102,7 +96,6 @@ function it_picks_up_a_cart_for_visitor( UserContextInterface $userContext, ObjectManager $orderManager, RandomnessGeneratorInterface $generator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext, OrderInterface $cart, ChannelInterface $channel, CurrencyInterface $currency, @@ -116,8 +109,6 @@ function it_picks_up_a_cart_for_visitor( $channel->getDefaultLocale()->willReturn($locale); $userContext->getUser()->willReturn(null); - $cartVisitorsCustomerContext->setCartCustomerId(null)->shouldBeCalled(); - $currency->getCode()->willReturn('USD'); $locale->getCode()->willReturn('en_US'); diff --git a/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderGetMethodItemExtensionSpec.php b/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderGetMethodItemExtensionSpec.php index d86b87aa6701..efd920b5ab66 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderGetMethodItemExtensionSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderGetMethodItemExtensionSpec.php @@ -16,7 +16,6 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\QueryBuilder; use PhpSpec\ObjectBehavior; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Bundle\ApiBundle\Context\UserContextInterface; use Sylius\Bundle\ApiBundle\Serializer\ContextKeys; use Sylius\Component\Core\Model\CustomerInterface; @@ -27,26 +26,43 @@ final class OrderGetMethodItemExtensionSpec extends ObjectBehavior { - function let( - UserContextInterface $userContext, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext - ): void { - $this->beConstructedWith($userContext, $cartVisitorsCustomerContext); + function let(UserContextInterface $userContext): void + { + $this->beConstructedWith($userContext); } function it_applies_conditions_to_get_order_with_state_cart_and_without_user_if_current_user_is_null( UserContextInterface $userContext, QueryBuilder $queryBuilder, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn(null); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); + $queryBuilder + ->leftJoin(sprintf('%s.customer', 'o'), 'customer') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; - $queryBuilder->andWhere(sprintf('%s.customer IS NULL', 'o'))->shouldBeCalled(); + $queryBuilder + ->leftJoin('customer.user', 'user') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->andWhere('user IS NULL') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->orWhere(sprintf('%s.customer IS NULL', 'o')) + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; $this->applyToItem( $queryBuilder, @@ -63,15 +79,12 @@ function it_applies_conditions_to_get_order_with_state_cart_by_authorized_shop_u QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); diff --git a/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderMethodsItemExtensionSpec.php b/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderMethodsItemExtensionSpec.php index 5411fd12fd32..9de00494b28c 100644 --- a/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderMethodsItemExtensionSpec.php +++ b/src/Sylius/Bundle/ApiBundle/spec/Doctrine/QueryItemExtension/OrderMethodsItemExtensionSpec.php @@ -16,7 +16,6 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\QueryBuilder; use PhpSpec\ObjectBehavior; -use Sylius\Bundle\ApiBundle\Context\CartVisitorsCustomerContextInterface; use Sylius\Bundle\ApiBundle\Context\UserContextInterface; use Sylius\Bundle\ApiBundle\Serializer\ContextKeys; use Sylius\Component\Core\Model\AdminUserInterface; @@ -28,25 +27,40 @@ final class OrderMethodsItemExtensionSpec extends ObjectBehavior { - function let(UserContextInterface $userContext, CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext): void + function let(UserContextInterface $userContext): void { - $this->beConstructedWith($userContext, $cartVisitorsCustomerContext); + $this->beConstructedWith($userContext); } function it_applies_conditions_to_delete_order_with_state_cart_and_with_null_user_and_customer_if_present_user_and_customer_are_null( UserContextInterface $userContext, QueryBuilder $queryBuilder, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn(null); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); + $queryBuilder + ->leftJoin(sprintf('%s.customer', 'o'), 'customer') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; $queryBuilder - ->andWhere(sprintf('%s.customer IS NULL', 'o')) + ->leftJoin('customer.user', 'user') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->andWhere('user IS NULL') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->orWhere(sprintf('%s.customer IS NULL', 'o')) ->shouldBeCalled() ->willReturn($queryBuilder) ; @@ -76,17 +90,32 @@ function it_applies_conditions_to_delete_order_with_state_cart_and_with_null_use function it_applies_conditions_to_patch_order_with_state_cart_and_with_null_user_and_customer_if_present_user_and_customer_are_null( UserContextInterface $userContext, QueryBuilder $queryBuilder, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn(null); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); + $queryBuilder + ->leftJoin(sprintf('%s.customer', 'o'), 'customer') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->leftJoin('customer.user', 'user') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; $queryBuilder - ->andWhere(sprintf('%s.customer IS NULL', 'o')) + ->andWhere('user IS NULL') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->orWhere(sprintf('%s.customer IS NULL', 'o')) ->shouldBeCalled() ->willReturn($queryBuilder) ; @@ -116,17 +145,32 @@ function it_applies_conditions_to_patch_order_with_state_cart_and_with_null_user function it_applies_conditions_to_put_order_with_state_cart_and_with_null_user_and_customer_if_present_user_and_customer_are_null( UserContextInterface $userContext, QueryBuilder $queryBuilder, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn(null); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); + $queryBuilder + ->leftJoin(sprintf('%s.customer', 'o'), 'customer') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->leftJoin('customer.user', 'user') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; + + $queryBuilder + ->andWhere('user IS NULL') + ->shouldBeCalled() + ->willReturn($queryBuilder) + ; $queryBuilder - ->andWhere(sprintf('%s.customer IS NULL', 'o')) + ->orWhere(sprintf('%s.customer IS NULL', 'o')) ->shouldBeCalled() ->willReturn($queryBuilder) ; @@ -158,15 +202,12 @@ function it_applies_conditions_to_put_order_with_state_cart_and_with_null_user_a QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn('111'); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -209,15 +250,12 @@ function it_applies_conditions_to_patch_order_with_state_cart_and_with_null_user QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn('111'); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -260,15 +298,12 @@ function it_applies_conditions_to_delete_order_with_state_cart_and_with_null_use QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn('111'); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -311,15 +346,12 @@ function it_applies_conditions_to_delete_order_with_state_cart_by_authorized_sho QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -362,15 +394,12 @@ function it_applies_conditions_to_patch_order_with_state_cart_by_authorized_shop QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -413,15 +442,12 @@ function it_applies_conditions_to_put_order_with_state_cart_by_authorized_shop_u QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn(['ROLE_USER']); @@ -464,15 +490,12 @@ function it_throws_an_exception_when_unauthorized_shop_user_try_to_delete_order_ QueryBuilder $queryBuilder, ShopUserInterface $shopUser, CustomerInterface $customer, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($shopUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $shopUser->getCustomer()->willReturn($customer); $customer->getId()->willReturn(1); $shopUser->getRoles()->willReturn([]); @@ -497,15 +520,12 @@ function it_applies_conditions_to_delete_order_with_state_cart_by_authorized_adm UserContextInterface $userContext, QueryBuilder $queryBuilder, AdminUserInterface $adminUser, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($adminUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $adminUser->getRoles()->willReturn(['ROLE_API_ACCESS']); $queryBuilder @@ -534,15 +554,12 @@ function it_applies_conditions_to_patch_order_with_state_cart_by_authorized_admi UserContextInterface $userContext, QueryBuilder $queryBuilder, AdminUserInterface $adminUser, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($adminUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $adminUser->getRoles()->willReturn(['ROLE_API_ACCESS']); $this->applyToItem( @@ -559,15 +576,12 @@ function it_applies_conditions_to_put_order_with_state_cart_by_authorized_admin_ UserContextInterface $userContext, QueryBuilder $queryBuilder, AdminUserInterface $adminUser, - QueryNameGeneratorInterface $queryNameGenerator, - CartVisitorsCustomerContextInterface $cartVisitorsCustomerContext + QueryNameGeneratorInterface $queryNameGenerator ): void { $queryBuilder->getRootAliases()->willReturn(['o']); $userContext->getUser()->willReturn($adminUser); - $cartVisitorsCustomerContext->getCartCustomerId()->willReturn(null); - $adminUser->getRoles()->willReturn(['ROLE_API_ACCESS']); $this->applyToItem(