Skip to content

Commit 5887e33

Browse files
authored
LYNX-544: Customer must not be able to cancel a partially shipped order
1 parent 9a698ee commit 5887e33

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

app/code/Magento/OrderCancellationGraphQl/Model/GetOrderCancellationAvailableActions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public function execute(Order $order): array
4343
{
4444
if ($this->config->isOrderCancellationEnabledForStore((int)$order->getStoreId())
4545
&& $this->customerCanCancel->execute($order)
46+
&& !$order->hasShipments()
4647
) {
4748
return ['CANCEL'];
4849
}

dev/tests/api-functional/testsuite/Magento/GraphQl/Sales/OrderAvailableActionTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
use Magento\Sales\Api\OrderRepositoryInterface;
3636
use Magento\Sales\Model\Order;
3737
use Magento\Sales\Model\OrderRepository;
38+
use Magento\Sales\Test\Fixture\Invoice as InvoiceFixture;
39+
use Magento\Sales\Test\Fixture\Shipment as ShipmentFixture;
3840
use Magento\TestFramework\Fixture\Config;
3941
use Magento\TestFramework\Fixture\DataFixture;
4042
use Magento\TestFramework\Fixture\DataFixtureStorage;
@@ -140,6 +142,43 @@ public function testCustomerOrderActionWithDisabledOrderCancellation(): void
140142
$this->assertEquals(['REORDER'], $result);
141143
}
142144

145+
/**
146+
* @throws AuthenticationException
147+
*/
148+
#[
149+
Config('sales/cancellation/enabled', 1),
150+
DataFixture(ProductFixture::class, as: 'product1'),
151+
DataFixture(ProductFixture::class, as: 'product2'),
152+
DataFixture(CustomerFixture::class, as: 'customer'),
153+
DataFixture(CustomerCartFixture::class, ['customer_id' => '$customer.id$'], as: 'quote'),
154+
DataFixture(AddProductToCartFixture::class, ['cart_id' => '$quote.id$', 'product_id' => '$product1.id$']),
155+
DataFixture(AddProductToCartFixture::class, ['cart_id' => '$quote.id$', 'product_id' => '$product2.id$']),
156+
DataFixture(SetBillingAddressFixture::class, ['cart_id' => '$quote.id$']),
157+
DataFixture(SetShippingAddressFixture::class, ['cart_id' => '$quote.id$']),
158+
DataFixture(SetDeliveryMethodFixture::class, ['cart_id' => '$quote.id$']),
159+
DataFixture(SetPaymentMethodFixture::class, ['cart_id' => '$quote.id$']),
160+
DataFixture(PlaceOrderFixture::class, ['cart_id' => '$quote.id$'], 'order'),
161+
DataFixture(InvoiceFixture::class, ['order_id' => '$order.id$'], 'invoice'),
162+
DataFixture(
163+
ShipmentFixture::class,
164+
[
165+
'order_id' => '$order.id$',
166+
'items' => [['product_id' => '$product1.id$', 'qty' => 1]]
167+
]
168+
)
169+
]
170+
public function testCustomerOrderActionWithOrderPartialShipment(): void
171+
{
172+
$response = $this->graphQlQuery(
173+
$this->getCustomerOrdersQuery(),
174+
[],
175+
'',
176+
$this->getCustomerAuthHeaders($this->fixtures->get('customer')->getEmail())
177+
);
178+
179+
$this->assertEquals(['REORDER'], $response['customerOrders']['items'][0]['available_actions']);
180+
}
181+
143182
/**
144183
* Generate graphql query body for customer orders
145184
*

0 commit comments

Comments
 (0)