Skip to content

Commit 0e4199c

Browse files
committed
ACP2E-3647: [CLOUD]: GraphQl error Internal server error placeOrder mutation
1 parent a0d9d1a commit 0e4199c

File tree

2 files changed

+144
-1
lines changed

2 files changed

+144
-1
lines changed

app/code/Magento/SalesRuleGraphQl/Model/Resolver/Coupon.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function __construct(
3333
*/
3434
public function resolve(Field $field, $context, ResolveInfo $info, ?array $value = null, ?array $args = null)
3535
{
36-
if(isset($value['order_model'])) {
36+
if (isset($value['order_model'])) {
3737
return ['code' => $value['order_model']->getCouponCode()];
3838
}
3939
if (!isset($value['discount_model'])) {
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
<?php
2+
/**
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\SalesRuleGraphQl\Test\Unit\Model\Resolver;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
13+
use Magento\Quote\Api\Data\CartInterface;
14+
use Magento\SalesRule\Api\Data\CouponInterface;
15+
use Magento\SalesRule\Api\Data\RuleDiscountInterface;
16+
use Magento\SalesRule\Model\GetCoupons;
17+
use Magento\Sales\Api\Data\OrderInterface;
18+
use Magento\SalesRule\Model\Quote\GetCouponCodes;
19+
use Magento\SalesRuleGraphQl\Model\Resolver\Coupon;
20+
use PHPUnit\Framework\TestCase;
21+
22+
class CouponTest extends TestCase
23+
{
24+
/**
25+
* @var GetCouponCodes|MockObject
26+
*/
27+
private $getCouponCodesMock;
28+
29+
/**
30+
* @var GetCoupons|MockObject
31+
*/
32+
private $getCouponsMock;
33+
34+
/**
35+
* @var Coupon|MockObject
36+
*/
37+
private $resolver;
38+
39+
protected function setUp(): void
40+
{
41+
$this->getCouponCodesMock = $this->createMock(GetCouponCodes::class);
42+
$this->getCouponsMock = $this->createMock(GetCoupons::class);
43+
$this->resolver = new Coupon(
44+
$this->getCouponCodesMock,
45+
$this->getCouponsMock
46+
);
47+
}
48+
49+
public function testResolveWithOrderModel(): void
50+
{
51+
$orderModel = $this->createMock(OrderInterface::class);
52+
$orderModel->expects($this->once())
53+
->method('getCouponCode')
54+
->willReturn('TEST1234');
55+
$result = $this->resolver->resolve(
56+
$this->createMock(Field::class),
57+
[],
58+
$this->createMock(ResolveInfo::class),
59+
['order_model' => $orderModel]
60+
);
61+
62+
$this->assertEquals(['code' => 'TEST1234'], $result);
63+
}
64+
65+
public function testResolveWithoutDiscountModel(): void
66+
{
67+
$this->expectException(LocalizedException::class);
68+
$this->expectExceptionMessage('"discount_model" value should be specified');
69+
$this->resolver->resolve(
70+
$this->createMock(Field::class),
71+
[],
72+
$this->createMock(ResolveInfo::class),
73+
[]
74+
);
75+
}
76+
77+
public function testResolveWithoutQuoteModel(): void
78+
{
79+
$this->expectException(LocalizedException::class);
80+
$this->expectExceptionMessage('"quote_model" value should be specified');
81+
$this->resolver->resolve(
82+
$this->createMock(Field::class),
83+
[],
84+
$this->createMock(ResolveInfo::class),
85+
['discount_model' => $this->createMock(RuleDiscountInterface::class)]
86+
);
87+
}
88+
89+
public function testResolveWithoutCoupon(): void
90+
{
91+
$quoteModel = $this->createMock(CartInterface::class);
92+
$discountModel = $this->createMock(RuleDiscountInterface::class);
93+
$this->getCouponCodesMock->method('execute')->willReturn([]);
94+
$this->getCouponsMock->method('execute')->willReturn([]);
95+
$result = $this->resolver->resolve(
96+
$this->createMock(Field::class),
97+
[],
98+
$this->createMock(ResolveInfo::class),
99+
['discount_model' => $discountModel, 'quote_model' => $quoteModel]
100+
);
101+
102+
$this->assertNull($result);
103+
}
104+
105+
public function testResolveWithMatchingRuleId(): void
106+
{
107+
$quoteModel = $this->createMock(CartInterface::class);
108+
$discountModel = $this->createMock(RuleDiscountInterface::class);
109+
$discountModel->method('getRuleID')->willReturn(123);
110+
$couponMock = $this->createMock(CouponInterface::class);
111+
$couponMock->method('getRuleId')->willReturn(123);
112+
$couponMock->method('getCode')->willReturn('TEST1234');
113+
$this->getCouponCodesMock->method('execute')->willReturn(['test']);
114+
$this->getCouponsMock->method('execute')->willReturn([$couponMock]);
115+
$result = $this->resolver->resolve(
116+
$this->createMock(Field::class),
117+
[],
118+
$this->createMock(ResolveInfo::class),
119+
['discount_model' => $discountModel, 'quote_model' => $quoteModel]
120+
);
121+
122+
$this->assertEquals(['code' => 'TEST1234'], $result);
123+
}
124+
125+
public function testResolveNoMatchingRuleId(): void
126+
{
127+
$quoteModel = $this->createMock(CartInterface::class);
128+
$discountModel = $this->createMock(RuleDiscountInterface::class);
129+
$discountModel->method('getRuleID')->willReturn(123);
130+
$couponMock = $this->createMock(CouponInterface::class);
131+
$couponMock->method('getRuleId')->willReturn(321);
132+
$this->getCouponCodesMock->method('execute')->willReturn(['test']);
133+
$this->getCouponsMock->method('execute')->willReturn([$couponMock]);
134+
$result = $this->resolver->resolve(
135+
$this->createMock(Field::class),
136+
[],
137+
$this->createMock(ResolveInfo::class),
138+
['discount_model' => $discountModel, 'quote_model' => $quoteModel]
139+
);
140+
141+
$this->assertNull($result);
142+
}
143+
}

0 commit comments

Comments
 (0)