2626use Magento \TestFramework \TestCase \WebapiAbstract ;
2727
2828/**
29- * Verifies REST includes "state" and "status" keys as null when DB has NULLs
30- * for responses affected by Magento\Sales\Plugin\Webapi\OrderResponseNullKeysPlugin.
31- *
3229 * @magentoDbIsolation disabled
3330 * @magentoAppIsolation enabled
3431 * @magentoAppArea webapi_rest
3532 */
3633class OrderResponseNullKeysTest extends WebapiAbstract
3734{
35+ protected function setUp (): void
36+ {
37+ parent ::setUp ();
38+ $ this ->_markTestAsRestOnly ();
39+ }
40+
3841 #[
3942 ConfigFixture('payment/checkmo/active ' , '1 ' ),
4043 ConfigFixture('carriers/flatrate/active ' , '1 ' ),
4144
4245 DataFixture(ProductFixture::class, [
46+ 'type_id ' => 'simple ' ,
47+ 'attribute_set_id ' => 4 ,
48+ 'sku ' => 'order-null-keys-simple ' ,
49+ 'name ' => 'Order Null Keys Simple ' ,
4350 'price ' => 10.00 ,
44- 'quantity_and_stock_status ' => ['qty ' => 100 , 'is_in_stock ' => true ]
51+ 'status ' => 1 ,
52+ 'visibility ' => 4 ,
53+ 'weight ' => 1 ,
54+ 'website_ids ' => [1 ],
55+ 'quantity_and_stock_status ' => ['qty ' => 100 , 'is_in_stock ' => true ],
4556 ], as: 'product ' ),
4657
4758 DataFixture(GuestCartFixture::class, as: 'cart ' ),
48- DataFixture(
49- SetGuestEmailFixture::class,
50- [
'cart_id ' =>
'$cart.id$ ' ,
'email ' =>
'[email protected] ' ]
51- ),
52- DataFixture(
53- AddProductToCartFixture::class,
54- ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product.id$ ' , 'qty ' => 1 ]
55- ),
59+ DataFixture(SetGuestEmailFixture::class, [
'cart_id ' =>
'$cart.id$ ' ,
'email ' =>
'[email protected] ' ]),
60+ DataFixture(AddProductToCartFixture::class, ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product.id$ ' , 'qty ' => 1 ]),
5661 DataFixture(SetBillingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
5762 DataFixture(SetShippingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
58- DataFixture(
59- SetDeliveryMethodFixture::class,
60- ['cart_id ' => '$cart.id$ ' , 'carrier_code ' => 'flatrate ' , 'method_code ' => 'flatrate ' ]
61- ),
63+ DataFixture(SetDeliveryMethodFixture::class, ['cart_id ' => '$cart.id$ ' , 'carrier_code ' => 'flatrate ' , 'method_code ' => 'flatrate ' ]),
6264 DataFixture(SetPaymentMethodFixture::class, ['cart_id ' => '$cart.id$ ' , 'method ' => 'checkmo ' ]),
6365 DataFixture(PlaceOrderFixture::class, ['cart_id ' => '$cart.id$ ' ], as: 'order ' )
6466 ]
@@ -78,88 +80,23 @@ public function testGetOrderShowsNullKeys(): void
7880 $ result = $ this ->_webApiCall ($ serviceInfo );
7981
8082 $ this ->assertIsArray ($ result );
81- $ this ->assertArrayHasKey ('entity_id ' , $ result );
8283 $ this ->assertSame ($ orderId , (int )$ result ['entity_id ' ]);
8384 $ this ->assertArrayHasKey ('state ' , $ result );
8485 $ this ->assertArrayHasKey ('status ' , $ result );
8586 $ this ->assertNull ($ result ['state ' ]);
8687 $ this ->assertNull ($ result ['status ' ]);
8788 }
8889
89- #[
90- ConfigFixture('payment/checkmo/active ' , '1 ' ),
91- ConfigFixture('carriers/flatrate/active ' , '1 ' ),
92-
93- DataFixture(ProductFixture::class, [
94- 'price ' => 10.00 ,
95- 'quantity_and_stock_status ' => ['qty ' => 100 , 'is_in_stock ' => true ]
96- ], as: 'product ' ),
97-
98- DataFixture(GuestCartFixture::class, as: 'cart ' ),
99- DataFixture(
100- SetGuestEmailFixture::class,
101- [
'cart_id ' =>
'$cart.id$ ' ,
'email ' =>
'[email protected] ' ]
102- ),
103- DataFixture(
104- AddProductToCartFixture::class,
105- ['cart_id ' => '$cart.id$ ' , 'product_id ' => '$product.id$ ' , 'qty ' => 1 ]
106- ),
107- DataFixture(SetBillingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
108- DataFixture(SetShippingAddressFixture::class, ['cart_id ' => '$cart.id$ ' ]),
109- DataFixture(
110- SetDeliveryMethodFixture::class,
111- ['cart_id ' => '$cart.id$ ' , 'carrier_code ' => 'flatrate ' , 'method_code ' => 'flatrate ' ]
112- ),
113- DataFixture(SetPaymentMethodFixture::class, ['cart_id ' => '$cart.id$ ' , 'method ' => 'checkmo ' ]),
114- DataFixture(PlaceOrderFixture::class, ['cart_id ' => '$cart.id$ ' ], as: 'order ' )
115- ]
116- public function testGetListShowsNullKeysPerItem (): void
117- {
118- $ order = DataFixtureStorageManager::getStorage ()->get ('order ' );
119- $ orderId = (int )$ order ->getEntityId ();
120-
121- $ this ->nullifyOrderStateStatus ($ orderId );
122-
123- $ query = sprintf (
124- '/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=entity_id '
125- . '&searchCriteria[filter_groups][0][filters][0][value]=%d '
126- . '&searchCriteria[filter_groups][0][filters][0][condition_type]=eq ' ,
127- $ orderId
128- );
129- $ serviceInfo = [
130- 'rest ' => [
131- 'resourcePath ' => $ query ,
132- 'httpMethod ' => Request::HTTP_METHOD_GET ,
133- ],
134- ];
135- $ result = $ this ->_webApiCall ($ serviceInfo );
136-
137- $ this ->assertIsArray ($ result );
138- $ this ->assertArrayHasKey ('items ' , $ result );
139- $ this ->assertNotEmpty ($ result ['items ' ]);
140- $ item = $ result ['items ' ][0 ];
141-
142- $ this ->assertSame ($ orderId , (int )$ item ['entity_id ' ]);
143- $ this ->assertArrayHasKey ('state ' , $ item );
144- $ this ->assertArrayHasKey ('status ' , $ item );
145- $ this ->assertNull ($ item ['state ' ]);
146- $ this ->assertNull ($ item ['status ' ]);
147- }
148-
14990 private function nullifyOrderStateStatus (int $ orderId ): void
15091 {
15192 $ om = Bootstrap::getObjectManager ();
152- /** @var ResourceConnection $resource */
15393 $ resource = $ om ->get (ResourceConnection::class);
15494 $ connection = $ resource ->getConnection ();
15595 $ table = $ resource ->getTableName ('sales_order ' );
15696
15797 $ connection ->update (
15898 $ table ,
159- [
160- 'state ' => new Expression ('NULL ' ),
161- 'status ' => new Expression ('NULL ' ),
162- ],
99+ ['state ' => new Expression ('NULL ' ), 'status ' => new Expression ('NULL ' )],
163100 ['entity_id = ? ' => $ orderId ]
164101 );
165102 }
0 commit comments