7
7
8
8
namespace Magento \GraphQl \Quote \Guest ;
9
9
10
+ use Magento \Bundle \Test \Fixture \AddProductToCart as AddBundleProductToCart ;
11
+ use Magento \Bundle \Test \Fixture \Link as BundleSelectionFixture ;
12
+ use Magento \Bundle \Test \Fixture \Option as BundleOptionFixture ;
13
+ use Magento \Bundle \Test \Fixture \Product as BundleProductFixture ;
10
14
use Magento \Catalog \Model \Product ;
11
15
use Magento \Catalog \Test \Fixture \Product as ProductFixture ;
16
+ use Magento \Catalog \Test \Fixture \ProductStock as ProductStockFixture ;
17
+ use Magento \CatalogInventory \Model \StockRegistry ;
12
18
use Magento \Indexer \Test \Fixture \Indexer ;
13
19
use Magento \Quote \Model \Cart \Data \CartItem ;
14
20
use Magento \Quote \Model \QuoteIdToMaskedQuoteIdInterface ;
@@ -68,11 +74,15 @@ class GetCartPaginatedItemsTest extends GraphQlAbstract
68
74
*/
69
75
private $ quoteIdToMaskedQuoteIdInterface ;
70
76
77
+ /** @var StockRegistry */
78
+ private $ stockRegistry ;
79
+
71
80
protected function setUp (): void
72
81
{
73
82
$ objectManager = Bootstrap::getObjectManager ();
74
83
$ this ->fixtures = $ objectManager ->get (DataFixtureStorageManager::class)->getStorage ();
75
84
$ this ->quoteIdToMaskedQuoteIdInterface = $ objectManager ->get (QuoteIdToMaskedQuoteIdInterface::class);
85
+ $ this ->stockRegistry = $ objectManager ->get (StockRegistry::class);
76
86
}
77
87
78
88
public function testGetCartWithZeroPageSize ()
@@ -93,6 +103,113 @@ public function testGetCartWithZeroCurrentPage()
93
103
$ this ->graphQlQuery ($ query );
94
104
}
95
105
106
+ #[
107
+ DataFixture(ProductFixture::class, as: 'p1 ' ),
108
+ DataFixture(
109
+ ProductStockFixture::class,
110
+ [
111
+ 'prod_id ' => '$p1.id$ ' ,
112
+ 'prod_qty ' => 100
113
+ ],
114
+ 'p1Stock '
115
+ ),
116
+ DataFixture(
117
+ BundleSelectionFixture::class,
118
+ [
119
+ 'sku ' => '$p1.sku$ ' , 'price ' => 100 , 'price_type ' => 0
120
+ ],
121
+ as:'link '
122
+ ),
123
+ DataFixture(
124
+ BundleOptionFixture::class,
125
+ [ 'title ' => 'Checkbox Options ' ,
126
+ 'type ' => 'checkbox ' ,
127
+ 'required ' => 1 ,
128
+ 'product_links ' => ['$link$ ' ]
129
+ ],
130
+ 'option '
131
+ ),
132
+ DataFixture(
133
+ BundleProductFixture::class,
134
+ ['price ' => 90 , '_options ' => ['$option$ ' ]],
135
+ as:'bundle_product '
136
+ ),
137
+ DataFixture(GuestCartFixture::class, as: 'cart ' ),
138
+ DataFixture(
139
+ AddBundleProductToCart::class,
140
+ [
141
+ 'cart_id ' => '$cart.id$ ' ,
142
+ 'product_id ' => '$bundle_product.id$ ' ,
143
+ 'selections ' => [['$p1.id$ ' ]],
144
+ 'qty ' => 100
145
+ ],
146
+ as: 'cart_item '
147
+ ),
148
+ ]
149
+ public function testSetStockToZeroAfterAddingBundleProductToCart ()
150
+ {
151
+ $ cart = $ this ->fixtures ->get ('cart ' );
152
+ /** @var Product $p1 */
153
+ $ p1 = $ this ->fixtures ->get ('p1 ' );
154
+ /** @var CartItem $cartItem */
155
+ $ cartItem = $ this ->fixtures ->get ('cart_item ' );
156
+ $ bundleProduct = $ this ->fixtures ->get ('bundle_product ' );
157
+
158
+ $ stockItem = $ this ->stockRegistry ->getStockItemBySku ($ p1 ->getSku ());
159
+ $ stockItem ->setQty (0 );
160
+ $ this ->stockRegistry ->updateStockItemBySku ($ p1 ->getSku (), $ stockItem );
161
+ $ maskedQuoteId = $ this ->quoteIdToMaskedQuoteIdInterface ->execute ((int ) $ cart ->getId ());
162
+ $ query = $ this ->getQuery ($ maskedQuoteId , 20 , 1 );
163
+ $ response = $ this ->graphQlQuery ($ query );
164
+
165
+ $ expected = [
166
+ 'cart ' => [
167
+ 'id ' => $ maskedQuoteId ,
168
+ 'itemsV2 ' => [
169
+ 'total_count ' => 1 ,
170
+ 'items ' => [
171
+ [
172
+ 'id ' => $ cartItem ->getId (),
173
+ 'quantity ' => 100 ,
174
+ 'product ' => [
175
+ 'sku ' => $ bundleProduct ->getSku (),
176
+ 'stock_status ' => 'OUT_OF_STOCK ' ,
177
+ ],
178
+ 'prices ' => [
179
+ 'price ' => [
180
+ 'value ' => 10 ,
181
+ 'currency ' => 'USD ' ,
182
+ ]
183
+ ],
184
+ 'errors ' => [
185
+ [
186
+ 'code ' => 'ITEM_QTY ' ,
187
+ 'message ' => 'This product is out of stock. '
188
+ ],
189
+ [
190
+ 'code ' => 'UNDEFINED ' ,
191
+ 'message ' => 'There are no source items with the in stock status
192
+ This product is out of stock.
193
+ The required options you selected are not available. '
194
+ ]
195
+ ]
196
+ ],
197
+ ],
198
+ 'page_info ' => [
199
+ 'page_size ' => 20 ,
200
+ 'current_page ' => 1 ,
201
+ 'total_pages ' => 1 ,
202
+ ]
203
+ ],
204
+ ]
205
+ ];
206
+ $ this ->assertEquals (
207
+ $ expected ,
208
+ $ response ,
209
+ sprintf ("Expected: \n%s \ngot: \n%s " , json_encode ($ expected ), json_encode ($ response ))
210
+ );
211
+ }
212
+
96
213
public function testGetCart ()
97
214
{
98
215
/** @var Product $product1 */
0 commit comments