8
8
namespace Magento \GraphQl \Quote ;
9
9
10
10
use Magento \Integration \Api \CustomerTokenServiceInterface ;
11
- use Magento \Quote \Model \Quote ;
11
+ use Magento \Quote \Model \QuoteFactory ;
12
12
use Magento \Quote \Model \QuoteIdToMaskedQuoteIdInterface ;
13
13
use Magento \Quote \Model \ResourceModel \Quote as QuoteResource ;
14
14
use Magento \TestFramework \Helper \Bootstrap ;
19
19
*/
20
20
class GetCartTest extends GraphQlAbstract
21
21
{
22
- /**
23
- * @var CustomerTokenServiceInterface
24
- */
25
- private $ customerTokenService ;
26
-
27
22
/**
28
23
* @var QuoteResource
29
24
*/
30
25
private $ quoteResource ;
31
26
32
27
/**
33
- * @var Quote
28
+ * @var QuoteFactory
34
29
*/
35
- private $ quote ;
30
+ private $ quoteFactory ;
36
31
37
32
/**
38
33
* @var QuoteIdToMaskedQuoteIdInterface
39
34
*/
40
35
private $ quoteIdToMaskedId ;
41
36
42
37
/**
43
- * @inheritdoc
38
+ * @var CustomerTokenServiceInterface
44
39
*/
40
+ private $ customerTokenService ;
41
+
45
42
protected function setUp ()
46
43
{
47
44
$ objectManager = Bootstrap::getObjectManager ();
48
- $ this ->quoteResource = $ objectManager ->create (QuoteResource::class);
49
- $ this ->quote = $ objectManager ->create (Quote ::class);
50
- $ this ->quoteIdToMaskedId = $ objectManager ->create (QuoteIdToMaskedQuoteIdInterface::class);
45
+ $ this ->quoteResource = $ objectManager ->get (QuoteResource::class);
46
+ $ this ->quoteFactory = $ objectManager ->get (QuoteFactory ::class);
47
+ $ this ->quoteIdToMaskedId = $ objectManager ->get (QuoteIdToMaskedQuoteIdInterface::class);
51
48
$ this ->customerTokenService = $ objectManager ->get (CustomerTokenServiceInterface::class);
52
49
}
53
50
54
51
/**
55
- * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved .php
52
+ * @magentoApiDataFixture Magento/Checkout/_files/active_quote .php
56
53
*/
57
- public function testGetOwnCartForRegisteredCustomer ()
54
+ public function testGetCartForGuest ()
58
55
{
59
- $ reservedOrderId = 'test_order_item_with_items ' ;
60
- $ this ->quoteResource ->load (
61
- $ this ->quote ,
62
- $ reservedOrderId ,
63
- 'reserved_order_id '
64
- );
65
-
66
- $ maskedQuoteId = $ this ->quoteIdToMaskedId ->execute ((int )$ this ->quote ->getId ());
67
- $ query = $ this ->prepareGetCartQuery ($ maskedQuoteId );
56
+ $ maskedQuoteId = $ this ->getMaskedQuoteIdByReversedQuoteId ('test_order_1 ' );
57
+ $ query = $ this ->getCartQuery ($ maskedQuoteId );
68
58
69
- $ response = $ this ->sendRequestWithToken ($ query );
59
+ $ response = $ this ->graphQlQuery ($ query );
70
60
71
61
self ::assertArrayHasKey ('cart ' , $ response );
72
- self ::assertNotEmpty ($ response ['cart ' ]['items ' ]);
73
- self ::assertNotEmpty ($ response ['cart ' ]['shipping_addresses ' ]);
62
+ self ::assertEquals ($ maskedQuoteId , $ response ['cart ' ]['cart_id ' ]);
74
63
}
75
64
76
65
/**
77
66
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
78
67
*/
79
- public function testGetCartFromAnotherCustomer ()
68
+ public function testGetCartByRegisteredCustomer ()
80
69
{
81
- $ reservedOrderId = 'test_order_item_with_items ' ;
82
- $ this ->quoteResource ->load (
83
- $ this ->quote ,
84
- $ reservedOrderId ,
85
- 'reserved_order_id '
86
- );
87
-
88
- $ maskedQuoteId = $ this ->quoteIdToMaskedId ->execute ((int )$ this ->quote ->getId ());
89
- $ query = $ this ->prepareGetCartQuery ($ maskedQuoteId );
70
+ $ maskedQuoteId = $ this ->getMaskedQuoteIdByReversedQuoteId ('test_order_item_with_items ' );
71
+ $ query = $ this ->getCartQuery ($ maskedQuoteId );
90
72
91
- self :: expectExceptionMessage ( " The current user cannot perform operations on cart \" $ maskedQuoteId \"" );
73
+ $ response = $ this -> graphQlQuery ( $ query , [], '' , $ this -> getHeaderMap () );
92
74
93
- $ this ->graphQlQuery ($ query );
75
+ self ::assertArrayHasKey ('cart ' , $ response );
76
+ self ::assertEquals ($ maskedQuoteId , $ response ['cart ' ]['cart_id ' ]);
77
+ self ::assertNotEmpty ($ response ['cart ' ]['items ' ]);
94
78
}
95
79
96
80
/**
97
- * @magentoApiDataFixture Magento/Checkout/_files/active_quote .php
81
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved .php
98
82
*/
99
- public function testGetCartForGuest ()
83
+ public function testGetCartOfAnotherCustomerByGuest ()
100
84
{
101
- $ reservedOrderId = 'test_order_1 ' ;
102
- $ this ->quoteResource ->load (
103
- $ this ->quote ,
104
- $ reservedOrderId ,
105
- 'reserved_order_id '
106
- );
107
-
108
- $ maskedQuoteId = $ this ->quoteIdToMaskedId ->execute ((int )$ this ->quote ->getId ());
109
- $ query = $ this ->prepareGetCartQuery ($ maskedQuoteId );
85
+ $ maskedQuoteId = $ this ->getMaskedQuoteIdByReversedQuoteId ('test_order_item_with_items ' );
86
+ $ query = $ this ->getCartQuery ($ maskedQuoteId );
110
87
111
- $ response = $ this ->graphQlQuery ($ query );
112
-
113
- self ::assertArrayHasKey ('cart ' , $ response );
88
+ self:$ this ->expectExceptionMessage (
89
+ "The current user cannot perform operations on cart \"{$ maskedQuoteId }\""
90
+ );
91
+ $ this ->graphQlQuery ($ query );
114
92
}
115
93
94
+ /**
95
+ * @expectedException \Exception
96
+ * @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
97
+ */
116
98
public function testGetNonExistentCart ()
117
99
{
118
100
$ maskedQuoteId = 'non_existent_masked_id ' ;
119
- $ query = $ this ->prepareGetCartQuery ($ maskedQuoteId );
120
-
121
- self ::expectExceptionMessage ("Could not find a cart with ID \"$ maskedQuoteId \"" );
101
+ $ query = $ this ->getCartQuery ($ maskedQuoteId );
122
102
123
103
$ this ->graphQlQuery ($ query );
124
104
}
125
105
126
106
/**
127
- * Generates query for setting the specified shipping method on cart
128
- *
129
107
* @param string $maskedQuoteId
130
108
* @return string
131
109
*/
132
- private function prepareGetCartQuery (
110
+ private function getCartQuery (
133
111
string $ maskedQuoteId
134
112
) : string {
135
113
return <<<QUERY
136
114
{
137
115
cart(cart_id: " $ maskedQuoteId") {
116
+ cart_id
138
117
applied_coupon {
139
- code
118
+ code
140
119
}
141
120
items {
142
121
id
@@ -147,23 +126,30 @@ private function prepareGetCartQuery(
147
126
}
148
127
}
149
128
}
150
-
151
129
QUERY ;
152
130
}
153
131
154
132
/**
155
- * Sends a GraphQL request with using a bearer token
156
- *
157
- * @param string $query
158
- * @return array
159
- * @throws \Magento\Framework\Exception\AuthenticationException
133
+ * @param string $reversedQuoteId
134
+ * @return string
160
135
*/
161
- private function sendRequestWithToken (string $ query ): array
136
+ private function getMaskedQuoteIdByReversedQuoteId (string $ reversedQuoteId ): string
162
137
{
138
+ $ quote = $ this ->quoteFactory ->create ();
139
+ $ this ->quoteResource ->load ($ quote , $ reversedQuoteId , 'reserved_order_id ' );
163
140
164
- $ customerToken = $ this ->customerTokenService -> createCustomerAccessToken ( ' customer@example.com ' , ' password ' );
165
- $ headerMap = [ ' Authorization ' => ' Bearer ' . $ customerToken ];
141
+ return $ this ->quoteIdToMaskedId -> execute (( int ) $ quote -> getId () );
142
+ }
166
143
167
- return $ this ->graphQlQuery ($ query , [], '' , $ headerMap );
144
+ /**
145
+ * @param string $username
146
+ * @param string $password
147
+ * @return array
148
+ */
149
+ private function getHeaderMap (string $ username = 'customer@example.com ' , string $ password = 'password ' ): array
150
+ {
151
+ $ customerToken = $ this ->customerTokenService ->createCustomerAccessToken ($ username , $ password );
152
+ $ headerMap = ['Authorization ' => 'Bearer ' . $ customerToken ];
153
+ return $ headerMap ;
168
154
}
169
155
}
0 commit comments