graphQlQuery($query); /** @var ProductRepositoryInterface $productRepository */ $productRepository = ObjectManager::getInstance()->get(ProductRepositoryInterface::class); $groupedProduct = $productRepository->get($productSku, false, null, true); $this->assertGroupedProductItems($groupedProduct, $response['products']['items'][0]); } private function assertGroupedProductItems($product, $actualResponse) { $this->assertNotEmpty( $actualResponse['items'], "Precondition failed: 'grouped product items' must not be empty" ); $this->assertEquals(2, count($actualResponse['items'])); $groupedProductLinks = $product->getProductLinks(); foreach ($actualResponse['items'] as $itemIndex => $bundleItems) { $this->assertNotEmpty($bundleItems); $associatedProductSku = $groupedProductLinks[$itemIndex]->getLinkedProductSku(); $productsRepository = ObjectManager::getInstance()->get(ProductRepositoryInterface::class); /** @var \Magento\Catalog\Model\Product $associatedProduct */ $associatedProduct = $productsRepository->get($associatedProductSku); $this->assertEquals( $groupedProductLinks[$itemIndex]->getExtensionAttributes()->getQty(), $actualResponse['items'][$itemIndex]['qty'] ); $this->assertEquals( $groupedProductLinks[$itemIndex]->getPosition(), $actualResponse['items'][$itemIndex]['position'] ); $this->assertResponseFields( $actualResponse['items'][$itemIndex]['product'], [ 'sku' => $associatedProductSku, 'type_id' => $groupedProductLinks[$itemIndex]->getLinkedProductType(), 'url_key'=> $associatedProduct->getUrlKey(), 'name' => $associatedProduct->getName() ] ); } } }