1038 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			1038 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace GuzzleHttp\Tests\Command\Guzzle;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Client as HttpClient;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\CommandInterface;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\Guzzle\Description;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\Guzzle\GuzzleClient;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\Result;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\ResultInterface;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Handler\MockHandler;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Psr7\Request;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Psr7\Response;
							 | 
						||
| 
								 | 
							
								use Psr\Http\Message\RequestInterface;
							 | 
						||
| 
								 | 
							
								use Psr\Http\Message\ResponseInterface;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @covers \GuzzleHttp\Command\Guzzle\GuzzleClient
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class GuzzleClientTest extends \PHPUnit_Framework_TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function testExecuteCommandViaMagicMethod()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foofoo":"barbar"}'),
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            $this->commandToRequestTransformer()
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Synchronous
							 | 
						||
| 
								 | 
							
								        $result1 = $client->doThatThingYouDo(['fizz' => 'buzz']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('bar', $result1['foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('buzz', $result1['_request']['fizz']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('doThatThingYouDo', $result1['_request']['action']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Asynchronous
							 | 
						||
| 
								 | 
							
								        $result2 = $client->doThatThingOtherYouDoAsync(['fizz' => 'buzz'])->wait();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('barbar', $result2['foofoo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('doThatThingOtherYouDo', $result2['_request']['action']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithQueryLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doQueryLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo=Foo', $mock->getLastRequest()->getUri()->getQuery());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doQueryLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $last = $mock->getLastRequest();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo=Foo&bar=Bar&baz=Baz', $last->getUri()->getQuery());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithBodyLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doBodyLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo=Foo', (string) $mock->getLastRequest()->getBody());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doBodyLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo=Foo&bar=Bar&baz=Baz', (string) $mock->getLastRequest()->getBody());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithJsonLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doJsonLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('{"foo":"Foo"}', (string) $mock->getLastRequest()->getBody());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doJsonLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('{"foo":"Foo","bar":"Bar","baz":"Baz"}', (string) $mock->getLastRequest()->getBody());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithHeaderLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doHeaderLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(['Foo'], $mock->getLastRequest()->getHeader('foo'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doHeaderLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(['Foo'], $mock->getLastRequest()->getHeader('foo'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(['Bar'], $mock->getLastRequest()->getHeader('bar'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(['Baz'], $mock->getLastRequest()->getHeader('baz'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithXmlLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doXmlLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            "<?xml version=\"1.0\"?>\n<Request><foo>Foo</foo></Request>\n",
							 | 
						||
| 
								 | 
							
								            (string) $mock->getLastRequest()->getBody()
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doXmlLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            "<?xml version=\"1.0\"?>\n<Request><foo>Foo</foo><bar>Bar</bar><baz>Baz</baz></Request>\n",
							 | 
						||
| 
								 | 
							
								            $mock->getLastRequest()->getBody()
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    public function testExecuteWithMultiPartLocation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $mock = new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client = $this->getServiceClient(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}'),
							 | 
						||
| 
								 | 
							
								                new Response(200, [], '{"foo":"bar"}')
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            $mock
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doMultiPartLocation(['foo' => 'Foo']);
							 | 
						||
| 
								 | 
							
								        $multiPartRequestBody = (string) $mock->getLastRequest()->getBody();
							 | 
						||
| 
								 | 
							
								        $this->assertContains('name="foo"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('Foo', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doMultiPartLocation([
							 | 
						||
| 
								 | 
							
								            'foo' => 'Foo',
							 | 
						||
| 
								 | 
							
								            'bar' => 'Bar',
							 | 
						||
| 
								 | 
							
								            'baz' => 'Baz'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $multiPartRequestBody = (string) $mock->getLastRequest()->getBody();
							 | 
						||
| 
								 | 
							
								        $this->assertContains('name="foo"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('Foo', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('name="bar"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('Bar', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('name="baz"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('Baz', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $client->doMultiPartLocation([
							 | 
						||
| 
								 | 
							
								            'file' => fopen(dirname(__FILE__) . '/Asset/test.html', 'r'),
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $multiPartRequestBody = (string) $mock->getLastRequest()->getBody();
							 | 
						||
| 
								 | 
							
								        $this->assertContains('name="file"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('filename="test.html"', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								        $this->assertContains('<title>Title</title>', $multiPartRequestBody);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testHasConfig()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description([]);
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            $this->commandToRequestTransformer(),
							 | 
						||
| 
								 | 
							
								            $this->responseToResultTransformer(),
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            ['foo' => 'bar']
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertSame($client, $guzzle->getHttpClient());
							 | 
						||
| 
								 | 
							
								        $this->assertSame($description, $guzzle->getDescription());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('bar', $guzzle->getConfig('foo'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals([], $guzzle->getConfig('defaults'));
							 | 
						||
| 
								 | 
							
								        $guzzle->setConfig('abc', 'listen');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('listen', $guzzle->getConfig('abc'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testAddsValidateHandlerWhenTrue()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description([]);
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            $this->commandToRequestTransformer(),
							 | 
						||
| 
								 | 
							
								            $this->responseToResultTransformer(),
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'validate' => true,
							 | 
						||
| 
								 | 
							
								                'process' => false
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handlers = explode("\n", $guzzle->getHandlerStack()->__toString());
							 | 
						||
| 
								 | 
							
								        $handlers = array_filter($handlers);
							 | 
						||
| 
								 | 
							
								        $this->assertCount(3, $handlers);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDisablesHandlersWhenFalse()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description([]);
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            $this->commandToRequestTransformer(),
							 | 
						||
| 
								 | 
							
								            $this->responseToResultTransformer(),
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'validate' => false,
							 | 
						||
| 
								 | 
							
								                'process' => false
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $handlers = explode("\n", $guzzle->getHandlerStack()->__toString());
							 | 
						||
| 
								 | 
							
								        $handlers = array_filter($handlers);
							 | 
						||
| 
								 | 
							
								        $this->assertCount(1, $handlers);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidateDescription()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'validate' => true,
							 | 
						||
| 
								 | 
							
								                'process' => false
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $command = $guzzle->getCommand('Foo', ['baz' => 'BAZ']);
							 | 
						||
| 
								 | 
							
								        /** @var ResponseInterface $response */
							 | 
						||
| 
								 | 
							
								        $response = $guzzle->execute($command);
							 | 
						||
| 
								 | 
							
								        $this->assertInstanceOf(Response::class, $response);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(200, $response->getStatusCode());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @expectedException \GuzzleHttp\Command\Exception\CommandException
							 | 
						||
| 
								 | 
							
								     * @expectedExceptionMessage Validation errors: [baz] is a required string: baz
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testValidateDescriptionFailsDueMissingRequiredParameter()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => true,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'validate' => true,
							 | 
						||
| 
								 | 
							
								                'process' => false
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $command = $guzzle->getCommand('Foo');
							 | 
						||
| 
								 | 
							
								        /** @var ResultInterface $result */
							 | 
						||
| 
								 | 
							
								        $result = $guzzle->execute($command);
							 | 
						||
| 
								 | 
							
								        $this->assertInstanceOf(Result::class, $result);
							 | 
						||
| 
								 | 
							
								        $result = $result->toArray();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(200, $result['statusCode']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @expectedException \GuzzleHttp\Command\Exception\CommandException
							 | 
						||
| 
								 | 
							
								     * @expectedExceptionMessage Validation errors: [baz] must be of type integer
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testValidateDescriptionFailsDueTypeMismatch()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer',
							 | 
						||
| 
								 | 
							
								                                'required' => true,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'validate' => true,
							 | 
						||
| 
								 | 
							
								                'process' => false
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $command = $guzzle->getCommand('Foo', ['baz' => 'Hello']);
							 | 
						||
| 
								 | 
							
								        /** @var ResultInterface $result */
							 | 
						||
| 
								 | 
							
								        $result = $guzzle->execute($command);
							 | 
						||
| 
								 | 
							
								        $this->assertInstanceOf(Result::class, $result);
							 | 
						||
| 
								 | 
							
								        $result = $result->toArray();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(200, $result['statusCode']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testValidateDescriptionDoesNotFailWhenSendingIntegerButExpectingString()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => true,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient($client, $description);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $command = $guzzle->getCommand('Foo', ['baz' => 42]);
							 | 
						||
| 
								 | 
							
								        /** @var ResultInterface $result */
							 | 
						||
| 
								 | 
							
								        $result = $guzzle->execute($command);
							 | 
						||
| 
								 | 
							
								        $this->assertInstanceOf(Result::class, $result);
							 | 
						||
| 
								 | 
							
								        $result = $result->toArray();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(200, $result['statusCode']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testMagicMethodExecutesCommands()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => true,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = $this->getMockBuilder(GuzzleClient::class)
							 | 
						||
| 
								 | 
							
								            ->setConstructorArgs([
							 | 
						||
| 
								 | 
							
								                $client,
							 | 
						||
| 
								 | 
							
								                $description
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->setMethods(['execute'])
							 | 
						||
| 
								 | 
							
								            ->getMock();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle->expects($this->once())
							 | 
						||
| 
								 | 
							
								            ->method('execute')
							 | 
						||
| 
								 | 
							
								            ->will($this->returnValue('foo'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo', $guzzle->foo([]));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @expectedException \InvalidArgumentException
							 | 
						||
| 
								 | 
							
								     * @expectedExceptionMessage No operation found named Foo
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testThrowsWhenOperationNotFoundInDescription()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description([]);
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            $client,
							 | 
						||
| 
								 | 
							
								            $description,
							 | 
						||
| 
								 | 
							
								            $this->commandToRequestTransformer(),
							 | 
						||
| 
								 | 
							
								            $this->responseToResultTransformer()
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $guzzle->getCommand('foo');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testReturnsProcessedResponse()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $description = new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Bar',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => true,
							 | 
						||
| 
								 | 
							
								                                'description' => 'baz',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'id' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'location' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'header',
							 | 
						||
| 
								 | 
							
								                                'sentAs' => 'Location',
							 | 
						||
| 
								 | 
							
								                                'type' => 'string'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'age' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'statusCode' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode',
							 | 
						||
| 
								 | 
							
								                                'type' => 'integer'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient($client, $description, null, null);
							 | 
						||
| 
								 | 
							
								        $command = $guzzle->getCommand('foo', ['baz' => 'BAZ']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** @var ResultInterface $result */
							 | 
						||
| 
								 | 
							
								        $result = $guzzle->execute($command);
							 | 
						||
| 
								 | 
							
								        $this->assertInstanceOf(Result::class, $result);
							 | 
						||
| 
								 | 
							
								        $result = $result->toArray();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(200, $result['statusCode']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function getServiceClient(
							 | 
						||
| 
								 | 
							
								        array $responses,
							 | 
						||
| 
								 | 
							
								        MockHandler $mock = null,
							 | 
						||
| 
								 | 
							
								        callable $commandToRequestTransformer = null
							 | 
						||
| 
								 | 
							
								    ) {
							 | 
						||
| 
								 | 
							
								        $mock = $mock ?: new MockHandler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($responses as $response) {
							 | 
						||
| 
								 | 
							
								            $mock->append($response);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return new GuzzleClient(
							 | 
						||
| 
								 | 
							
								            new HttpClient([
							 | 
						||
| 
								 | 
							
								                'handler' => $mock
							 | 
						||
| 
								 | 
							
								            ]),
							 | 
						||
| 
								 | 
							
								            $this->getDescription(),
							 | 
						||
| 
								 | 
							
								            $commandToRequestTransformer,
							 | 
						||
| 
								 | 
							
								            $this->responseToResultTransformer(),
							 | 
						||
| 
								 | 
							
								            null,
							 | 
						||
| 
								 | 
							
								            ['foo' => 'bar']
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function commandToRequestTransformer()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return function (CommandInterface $command) {
							 | 
						||
| 
								 | 
							
								            $data           = $command->toArray();
							 | 
						||
| 
								 | 
							
								            $data['action'] = $command->getName();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return new Request('POST', '/', [], http_build_query($data));
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function responseToResultTransformer()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return function (ResponseInterface $response, RequestInterface $request, CommandInterface $command) {
							 | 
						||
| 
								 | 
							
								            $data = \GuzzleHttp\json_decode($response->getBody(), true);
							 | 
						||
| 
								 | 
							
								            parse_str($request->getBody(), $data['_request']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return new Result($data);
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private function getDescription()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return new Description(
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'name' => 'Testing API ',
							 | 
						||
| 
								 | 
							
								                'baseUri' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'doThatThingYouDo' => [
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Bar'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doThatThingOtherYouDo' => [
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'Foo'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doQueryLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/queryLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing query request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing query request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing query request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'QueryResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doBodyLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/bodyLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing body request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'body'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing body request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'body'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing body request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'body'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'BodyResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doJsonLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/jsonLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing json request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'json'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing json request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'json'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing json request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'json'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'JsonResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doHeaderLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/headerLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing header request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'header'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing header request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'header'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing header request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'header'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'HeaderResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doXmlLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/xmlLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing xml request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'xml'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing xml request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'xml'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing xml request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'xml'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'XmlResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'doMultiPartLocation' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'POST',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/multipartLocation',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing multipart request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'multipart'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing multipart request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'multipart'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'baz' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing multipart request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'multipart'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'file' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'any',
							 | 
						||
| 
								 | 
							
								                                'required' => false,
							 | 
						||
| 
								 | 
							
								                                'description' => 'Testing multipart request location',
							 | 
						||
| 
								 | 
							
								                                'location' => 'multipart'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'MultipartResponse'
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models'  => [
							 | 
						||
| 
								 | 
							
								                    'Foo' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'code' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'statusCode'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'Bar' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'properties' => [
							 | 
						||
| 
								 | 
							
								                            'code' => ['
							 | 
						||
| 
								 | 
							
								                                location' => 'statusCode'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDocumentationExampleFromReadme()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								        $description = new Description([
							 | 
						||
| 
								 | 
							
								            'baseUrl' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                'operations' => [
							 | 
						||
| 
								 | 
							
								                    'testing' => [
							 | 
						||
| 
								 | 
							
								                        'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                        'uri' => '/get{?foo}',
							 | 
						||
| 
								 | 
							
								                        'responseModel' => 'getResponse',
							 | 
						||
| 
								 | 
							
								                        'parameters' => [
							 | 
						||
| 
								 | 
							
								                            'foo' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'location' => 'uri'
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            'bar' => [
							 | 
						||
| 
								 | 
							
								                                'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                'location' => 'query'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'models' => [
							 | 
						||
| 
								 | 
							
								                    'getResponse' => [
							 | 
						||
| 
								 | 
							
								                        'type' => 'object',
							 | 
						||
| 
								 | 
							
								                        'additionalProperties' => [
							 | 
						||
| 
								 | 
							
								                            'location' => 'json'
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $guzzle = new GuzzleClient($client, $description);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = $guzzle->testing(['foo' => 'bar']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('bar', $result['args']['foo']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDescriptionWithExtends()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            $client = new HttpClient();
							 | 
						||
| 
								 | 
							
								            $description = new Description([
							 | 
						||
| 
								 | 
							
								                    'baseUrl' => 'http://httpbin.org/',
							 | 
						||
| 
								 | 
							
								                    'operations' => [
							 | 
						||
| 
								 | 
							
								                        'testing' => [
							 | 
						||
| 
								 | 
							
								                            'httpMethod' => 'GET',
							 | 
						||
| 
								 | 
							
								                            'uri' => '/get',
							 | 
						||
| 
								 | 
							
								                            'responseModel' => 'getResponse',
							 | 
						||
| 
								 | 
							
								                            'parameters' => [
							 | 
						||
| 
								 | 
							
								                                'foo' => [
							 | 
						||
| 
								 | 
							
								                                    'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                    'default' => 'foo',
							 | 
						||
| 
								 | 
							
								                                    'location' => 'query'
							 | 
						||
| 
								 | 
							
								                                ]
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'testing_extends' => [
							 | 
						||
| 
								 | 
							
								                            'extends' => 'testing',
							 | 
						||
| 
								 | 
							
								                            'responseModel' => 'getResponse',
							 | 
						||
| 
								 | 
							
								                            'parameters' => [
							 | 
						||
| 
								 | 
							
								                                'bar' => [
							 | 
						||
| 
								 | 
							
								                                    'type' => 'string',
							 | 
						||
| 
								 | 
							
								                                    'location' => 'query'
							 | 
						||
| 
								 | 
							
								                                ]
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'models' => [
							 | 
						||
| 
								 | 
							
								                        'getResponse' => [
							 | 
						||
| 
								 | 
							
								                            'type' => 'object',
							 | 
						||
| 
								 | 
							
								                            'additionalProperties' => [
							 | 
						||
| 
								 | 
							
								                                'location' => 'json'
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            $guzzle = new GuzzleClient($client, $description);
							 | 
						||
| 
								 | 
							
								            $result = $guzzle->testing_extends(['bar' => 'bar']);
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('bar', $result['args']['bar']);
							 | 
						||
| 
								 | 
							
								            $this->assertEquals('foo', $result['args']['foo']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								}
							 |