78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\GraphQl\Framework;
 | 
						|
 | 
						|
use Magento\TestFramework\TestCase\GraphQlAbstract;
 | 
						|
use Magento\TestFramework\TestCase\GraphQl\ResponseContainsErrorsException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test that required input parameters are properly validated on framework level
 | 
						|
 */
 | 
						|
class RequiredInputArgumentTest extends GraphQlAbstract
 | 
						|
{
 | 
						|
 | 
						|
    /**
 | 
						|
     * Test that a simple input value will be treated as required
 | 
						|
     *
 | 
						|
     * We should see error message from framework not the Resolver
 | 
						|
     * urlResolver query has required input arg "url"
 | 
						|
     */
 | 
						|
    public function testSimpleInputArgumentRequired()
 | 
						|
    {
 | 
						|
        $query = <<<QUERY
 | 
						|
    {
 | 
						|
        testQueryWithTopLevelMandatoryInputArguments{
 | 
						|
            item_id
 | 
						|
            name
 | 
						|
        }
 | 
						|
    }
 | 
						|
QUERY;
 | 
						|
 | 
						|
        $expectedExceptionsMessage = 'GraphQL response contains errors:'
 | 
						|
            . ' Field "testQueryWithTopLevelMandatoryInputArguments" argument "topLevelArgument"'
 | 
						|
            . ' of type "String!" is required but not provided.';
 | 
						|
        $this->expectException(ResponseContainsErrorsException::class);
 | 
						|
        $this->expectExceptionMessage($expectedExceptionsMessage);
 | 
						|
 | 
						|
        $this->graphQlQuery($query);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Test that a more complex required argument is handled properly
 | 
						|
     *
 | 
						|
     * testInputQueryWithMandatoryArguments mutation has required parameter input.query_items.query_item_id
 | 
						|
     */
 | 
						|
    public function testInputObjectArgumentRequired()
 | 
						|
    {
 | 
						|
        $query = <<<QUERY
 | 
						|
    query {
 | 
						|
        testQueryWithNestedMandatoryInputArguments(
 | 
						|
            input: {
 | 
						|
                query_id: "foobar"
 | 
						|
                query_items: [
 | 
						|
                    {
 | 
						|
                        quantity: 2
 | 
						|
                    }
 | 
						|
                ]
 | 
						|
            }
 | 
						|
        ) {
 | 
						|
            item_id
 | 
						|
            name
 | 
						|
        }
 | 
						|
    }
 | 
						|
QUERY;
 | 
						|
 | 
						|
        $expectedExceptionsMessage = 'GraphQL response contains errors:'
 | 
						|
            . ' Field QueryWithMandatoryArgumentsInput.query_item_id of required type Int! was not provided.';
 | 
						|
        $this->expectException(ResponseContainsErrorsException::class);
 | 
						|
        $this->expectExceptionMessage($expectedExceptionsMessage);
 | 
						|
 | 
						|
        $this->graphQlMutation($query);
 | 
						|
    }
 | 
						|
}
 |