|
7 | 7 |
|
8 | 8 | namespace Magento\GraphQl\RelatedProduct;
|
9 | 9 |
|
| 10 | +use Magento\Catalog\Test\Fixture\Product as ProductFixture; |
| 11 | +use Magento\TestFramework\Fixture\DataFixture; |
10 | 12 | use Magento\TestFramework\TestCase\GraphQlAbstract;
|
11 | 13 |
|
12 | 14 | /**
|
@@ -226,4 +228,81 @@ public function testQueryDisableRelatedProductInStore(): void
|
226 | 228 | $relatedProducts = $response['products']['items'][0]['related_products'];
|
227 | 229 | self::assertCount(0, $relatedProducts);
|
228 | 230 | }
|
| 231 | + #[ |
| 232 | + DataFixture(ProductFixture::class, ['name' =>'Simple related product', 'sku' => 'simple_related_product', |
| 233 | + 'price' => 20], 'p1'), |
| 234 | + DataFixture(ProductFixture::class, ['name' =>'Product as a related product', |
| 235 | + 'sku' => 'product_as_a_related_product', 'price' => 30], 'p2'), |
| 236 | + DataFixture(ProductFixture::class, ['name' =>'Simple product', 'sku' => 'simple_product', 'price' => 40], 'p3'), |
| 237 | + DataFixture(ProductFixture::class, ['name' => 'Simple with related product', |
| 238 | + 'sku' =>'simple_with_related_product ', 'price' => 100, |
| 239 | + 'product_links' => ['$p3.sku$','$p1.sku$','$p2.sku$' ]], 'p1'), |
| 240 | + |
| 241 | + ] |
| 242 | + public function testQueryRelatedProductsInSortOrder() |
| 243 | + { |
| 244 | + $productSku = 'simple_with_related_product'; |
| 245 | + |
| 246 | + $query = <<<QUERY |
| 247 | + { |
| 248 | + products(filter: {sku: {eq: "{$productSku}"}}) |
| 249 | + { |
| 250 | + items { |
| 251 | + related_products |
| 252 | + { |
| 253 | + sku |
| 254 | + name |
| 255 | + url_key |
| 256 | + } |
| 257 | + } |
| 258 | + } |
| 259 | + } |
| 260 | +QUERY; |
| 261 | + $response = $this->graphQlQuery($query); |
| 262 | + |
| 263 | + self::assertArrayHasKey('products', $response); |
| 264 | + self::assertArrayHasKey('items', $response['products']); |
| 265 | + self::assertCount(1, $response['products']['items']); |
| 266 | + self::assertArrayHasKey(0, $response['products']['items']); |
| 267 | + self::assertArrayHasKey('related_products', $response['products']['items'][0]); |
| 268 | + $relatedProducts = $response['products']['items'][0]['related_products']; |
| 269 | + self::assertCount(3, $relatedProducts); |
| 270 | + self::assertRelatedProductsInSortOrder($relatedProducts); |
| 271 | + } |
| 272 | + |
| 273 | + /** |
| 274 | + * @param array $relatedProducts |
| 275 | + */ |
| 276 | + private function assertRelatedProductsInSortOrder(array $relatedProducts): void |
| 277 | + { |
| 278 | + $expectedData = [ |
| 279 | + 'simple_product' => [ |
| 280 | + 'name' => 'Simple product', |
| 281 | + 'url_key' => 'simple-product', |
| 282 | + |
| 283 | + ], |
| 284 | + 'simple_related_product' => [ |
| 285 | + 'name' => 'Simple related product', |
| 286 | + 'url_key' => 'simple-related-product', |
| 287 | + |
| 288 | + ], |
| 289 | + 'product_as_a_related_product' => [ |
| 290 | + 'name' => 'Product as a related product', |
| 291 | + 'url_key' => 'product-as-a-related-product', |
| 292 | + |
| 293 | + ] |
| 294 | + ]; |
| 295 | + |
| 296 | + foreach ($relatedProducts as $product) { |
| 297 | + self::assertArrayHasKey('sku', $product); |
| 298 | + self::assertArrayHasKey('name', $product); |
| 299 | + self::assertArrayHasKey('url_key', $product); |
| 300 | + |
| 301 | + self::assertArrayHasKey($product['sku'], $expectedData); |
| 302 | + $productExpectedData = $expectedData[$product['sku']]; |
| 303 | + |
| 304 | + self::assertEquals($product['name'], $productExpectedData['name']); |
| 305 | + self::assertEquals($product['url_key'], $productExpectedData['url_key']); |
| 306 | + } |
| 307 | + } |
229 | 308 | }
|
0 commit comments