diff --git a/src/Sylius/Component/Core/Customer/CustomerOrderAddressesSaver.php b/src/Sylius/Component/Core/Customer/CustomerOrderAddressesSaver.php index 177d1491656..b507ecc6ee3 100644 --- a/src/Sylius/Component/Core/Customer/CustomerOrderAddressesSaver.php +++ b/src/Sylius/Component/Core/Customer/CustomerOrderAddressesSaver.php @@ -13,6 +13,7 @@ namespace Sylius\Component\Core\Customer; +use Sylius\Component\Core\Model\AddressInterface; use Sylius\Component\Core\Model\CustomerInterface; use Sylius\Component\Core\Model\OrderInterface; @@ -42,10 +43,18 @@ public function saveAddresses(OrderInterface $order): void return; } - $shippingAddress = $order->getShippingAddress(); - $billingAddress = $order->getBillingAddress(); + $this->addAddress($customer, $order->getBillingAddress()); + $this->addAddress($customer, $order->getShippingAddress()); + } - $this->addressAdder->add($customer, clone $billingAddress); - $this->addressAdder->add($customer, clone $shippingAddress); + /** + * @param CustomerInterface $customer + * @param AddressInterface|null $address + */ + private function addAddress(CustomerInterface $customer, ?AddressInterface $address): void + { + if (null !== $address) { + $this->addressAdder->add($customer, clone $address); + } } } diff --git a/src/Sylius/Component/Core/spec/Customer/CustomerOrderAddressesSaverSpec.php b/src/Sylius/Component/Core/spec/Customer/CustomerOrderAddressesSaverSpec.php index 8abf31d8192..bffe35d394f 100644 --- a/src/Sylius/Component/Core/spec/Customer/CustomerOrderAddressesSaverSpec.php +++ b/src/Sylius/Component/Core/spec/Customer/CustomerOrderAddressesSaverSpec.php @@ -67,4 +67,22 @@ function it_does_not_save_addresses_for_guest_order( $this->saveAddresses($order); } + + function it_does_not_save_empty_addresses( + CustomerAddressAdderInterface $addressAdder, + OrderInterface $order, + CustomerInterface $customer, + ShopUserInterface $user + ): void { + $order->getCustomer()->willReturn($customer); + $customer->getUser()->willReturn($user); + + $order->getShippingAddress()->willReturn(null); + $order->getBillingAddress()->willReturn(null); + + $addressAdder->add($customer, Argument::any())->shouldNotBeCalled(); + $addressAdder->add($customer, Argument::any())->shouldNotBeCalled(); + + $this->saveAddresses($order); + } }