Skip to content

Commit

Permalink
API-functional test added
Browse files Browse the repository at this point in the history
  • Loading branch information
rogyar committed Jul 11, 2018
1 parent 284f345 commit 6c8f256
Showing 1 changed file with 101 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\GraphQl\Catalog;

use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\TestFramework\ObjectManager;
use Magento\TestFramework\TestCase\GraphQlAbstract;

/**
* Test of getting child products info of configurable product on category request
*/
class CategoryProductsVariantsTest extends GraphQlAbstract
{
/**
*
* @magentoApiDataFixture Magento/ConfigurableProduct/_files/product_configurable.php
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
public function testGetSimpleProductsFromCategory()
{

$query
= <<<QUERY
{
category(id: 2) {
id
name
products {
items {
sku
... on ConfigurableProduct {
variants {
product {
sku
}
}
}
}
}
}
}
QUERY;

$response = $this->graphQlQuery($query);

/** @var ProductRepositoryInterface $productRepository */
$productRepository = ObjectManager::getInstance()->get(ProductRepositoryInterface::class);
$product = $productRepository->get('simple_10', false, null, true);

$this->assertArrayHasKey('variants', $response['category']['products']['items'][0]);
$this->assertCount(2, $response['category']['products']['items'][0]['variants']);
$this->assertSimpleProductFields($product, $response['category']['products']['items'][0]['variants'][0]);
}

/**
* @param ProductInterface $product
* @param array $actualResponse
*/
private function assertSimpleProductFields($product, $actualResponse)
{
$assertionMap = [
[
'response_field' => 'product', 'expected_value' => [
"sku" => $product->getSku()
]
],
];

$this->assertResponseFields($actualResponse, $assertionMap);
}

/**
* @param array $actualResponse
* @param array $assertionMap
*/
private function assertResponseFields($actualResponse, $assertionMap)
{
foreach ($assertionMap as $key => $assertionData) {
$expectedValue = isset($assertionData['expected_value'])
? $assertionData['expected_value']
: $assertionData;
$responseField = isset($assertionData['response_field']) ? $assertionData['response_field'] : $key;
self::assertNotNull(
$expectedValue,
"Value of '{$responseField}' field must not be NULL"
);
self::assertEquals(
$expectedValue,
$actualResponse[$responseField],
"Value of '{$responseField}' field in response does not match expected value: "
. var_export($expectedValue, true)
);
}
}
}

0 comments on commit 6c8f256

Please sign in to comment.