@@ -559,6 +559,92 @@ public function testCancelOrderAttemptingXSSPassedThroughReasonField()
559559 $ this ->assertEquals ('closed ' , $ comment ->getStatus ());
560560 }
561561
562+ #[
563+ DataFixture(Store::class),
564+ DataFixture(
565+ Customer::class,
566+ [
567+ 'email ' => 'customer@example.com ' ,
568+ 'password ' => 'password '
569+ ],
570+ 'customer '
571+ ),
572+ DataFixture(ProductFixture::class, as: 'product1 ' ),
573+ DataFixture(ProductFixture::class, as: 'product2 ' ),
574+ DataFixture(CustomerCart::class, ['customer_id ' => '$customer.id$ ' ], as: 'cart ' ),
575+ DataFixture(AddProductToCartFixture::class, ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product1.id$ ' ]),
576+ DataFixture(AddProductToCartFixture::class, ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product2.id$ ' ]),
577+ DataFixture(SetBillingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
578+ DataFixture(SetShippingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
579+ DataFixture(SetDeliveryMethodFixture::class, ['cart_id ' => '$cart.id$ ' ]),
580+ DataFixture(SetPaymentMethodFixture::class, ['cart_id ' => '$cart.id$ ' ]),
581+ DataFixture(PlaceOrderFixture::class, ['cart_id ' => '$cart.id$ ' ], 'order ' ),
582+ DataFixture(
583+ InvoiceFixture::class,
584+ [
585+ 'order_id ' => '$order.id$ ' ,
586+ 'items ' => ['$product1.sku$ ' ]
587+ ],
588+ 'invoice '
589+ ),
590+ Config('sales/cancellation/enabled ' , 1 )
591+ ]
592+ public function testCancelPartiallyInvoicedOrder ()
593+ {
594+ /**
595+ * @var $order OrderInterface
596+ */
597+ $ order = DataFixtureStorageManager::getStorage ()->get ('order ' );
598+ $ query = <<<QUERY
599+ mutation {
600+ cancelOrder(
601+ input: {
602+ order_id: " {$ order ->getEntityId ()}"
603+ reason: "Cancel sample reason"
604+ }
605+ ){
606+ error
607+ order {
608+ status
609+ }
610+ }
611+ }
612+ QUERY ;
613+ $ customerToken = $ this ->getHeaders ();
614+
615+ $ response = $ this ->graphQlMutation (
616+ $ query ,
617+ [],
618+ '' ,
619+ $ customerToken
620+ );
621+
622+ $ this ->assertEquals (
623+ [
624+ 'cancelOrder ' =>
625+ [
626+ 'error ' => null ,
627+ 'order ' => [
628+ 'status ' => 'Canceled '
629+ ]
630+ ]
631+ ],
632+ $ response
633+ );
634+
635+ $ comments = $ order ->getStatusHistories ();
636+
637+ $ comment = array_pop ($ comments );
638+ $ this ->assertEquals ("We refunded $20.00 offline. " , $ comment ->getComment ());
639+
640+ $ comment = array_pop ($ comments );
641+ $ this ->assertEquals ("Order cancellation notification email was sent. " , $ comment ->getComment ());
642+
643+ $ comment = array_pop ($ comments );
644+ $ this ->assertEquals ('Cancel sample reason ' , $ comment ->getComment ());
645+ $ this ->assertEquals ('canceled ' , $ comment ->getStatus ());
646+ }
647+
562648 /**
563649 * @return string[]
564650 * @throws AuthenticationException|LocalizedException
0 commit comments