228 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			228 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace Guzzle\Tests\Service\Description;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\Guzzle\Description;
							 | 
						||
| 
								 | 
							
								use GuzzleHttp\Command\Guzzle\Operation;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @covers \GuzzleHttp\Command\Guzzle\Operation
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class OperationTest extends \PHPUnit_Framework_TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public static function strtoupper($string)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return strtoupper($string);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testOperationIsDataObject()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $c = new Operation([
							 | 
						||
| 
								 | 
							
								            'name'               => 'test',
							 | 
						||
| 
								 | 
							
								            'summary'            => 'doc',
							 | 
						||
| 
								 | 
							
								            'notes'              => 'notes',
							 | 
						||
| 
								 | 
							
								            'documentationUrl'   => 'http://www.example.com',
							 | 
						||
| 
								 | 
							
								            'httpMethod'         => 'POST',
							 | 
						||
| 
								 | 
							
								            'uri'                => '/api/v1',
							 | 
						||
| 
								 | 
							
								            'responseModel'      => 'abc',
							 | 
						||
| 
								 | 
							
								            'deprecated'         => true,
							 | 
						||
| 
								 | 
							
								            'parameters'         => [
							 | 
						||
| 
								 | 
							
								                'key' => [
							 | 
						||
| 
								 | 
							
								                    'required'  => true,
							 | 
						||
| 
								 | 
							
								                    'type'      => 'string',
							 | 
						||
| 
								 | 
							
								                    'maxLength' => 10,
							 | 
						||
| 
								 | 
							
								                    'name'      => 'key'
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'key_2' => [
							 | 
						||
| 
								 | 
							
								                    'required' => true,
							 | 
						||
| 
								 | 
							
								                    'type'     => 'integer',
							 | 
						||
| 
								 | 
							
								                    'default'  => 10,
							 | 
						||
| 
								 | 
							
								                    'name'     => 'key_2'
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('test', $c->getName());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('doc', $c->getSummary());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('http://www.example.com', $c->getDocumentationUrl());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('POST', $c->getHttpMethod());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('/api/v1', $c->getUri());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('abc', $c->getResponseModel());
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($c->getDeprecated());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $params = array_map(function ($c) {
							 | 
						||
| 
								 | 
							
								            return $c->toArray();
							 | 
						||
| 
								 | 
							
								        }, $c->getParams());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals([
							 | 
						||
| 
								 | 
							
								            'key' => [
							 | 
						||
| 
								 | 
							
								                'required'  => true,
							 | 
						||
| 
								 | 
							
								                'type'      => 'string',
							 | 
						||
| 
								 | 
							
								                'maxLength' => 10,
							 | 
						||
| 
								 | 
							
								                'name'       => 'key'
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            'key_2' => [
							 | 
						||
| 
								 | 
							
								                'required' => true,
							 | 
						||
| 
								 | 
							
								                'type'     => 'integer',
							 | 
						||
| 
								 | 
							
								                'default'  => 10,
							 | 
						||
| 
								 | 
							
								                'name'     => 'key_2'
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ], $params);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals([
							 | 
						||
| 
								 | 
							
								            'required' => true,
							 | 
						||
| 
								 | 
							
								            'type'     => 'integer',
							 | 
						||
| 
								 | 
							
								            'default'  => 10,
							 | 
						||
| 
								 | 
							
								            'name'     => 'key_2'
							 | 
						||
| 
								 | 
							
								        ], $c->getParam('key_2')->toArray());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertNull($c->getParam('afefwef'));
							 | 
						||
| 
								 | 
							
								        $this->assertArrayNotHasKey('parent', $c->getParam('key_2')->toArray());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDeterminesIfHasParam()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $command = $this->getTestCommand();
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($command->hasParam('data'));
							 | 
						||
| 
								 | 
							
								        $this->assertFalse($command->hasParam('baz'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected function getTestCommand()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return new Operation([
							 | 
						||
| 
								 | 
							
								            'parameters' => [
							 | 
						||
| 
								 | 
							
								                'data' => ['type' => 'string']
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testAddsNameToParametersIfNeeded()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $command = new Operation(['parameters' => ['foo' => []]]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo', $command->getParam('foo')->getName());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testContainsApiErrorInformation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $command = $this->getOperation();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(1, count($command->getErrorResponses()));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testHasNotes()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $o = new Operation(['notes' => 'foo']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo', $o->getNotes());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testHasData()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $o = new Operation(['data' => ['foo' => 'baz', 'bar' => 123]]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('baz', $o->getData('foo'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(123, $o->getData('bar'));
							 | 
						||
| 
								 | 
							
								        $this->assertNull($o->getData('wfefwe'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(['foo' => 'baz', 'bar' => 123], $o->getData());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @expectedException \InvalidArgumentException
							 | 
						||
| 
								 | 
							
								     * @expectedExceptionMesssage Parameters must be arrays
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testEnsuresParametersAreArrays()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        new Operation(['parameters' => ['foo' => true]]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testHasDescription()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $s = new Description([]);
							 | 
						||
| 
								 | 
							
								        $o = new Operation([], $s);
							 | 
						||
| 
								 | 
							
								        $this->assertSame($s, $o->getServiceDescription());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testHasAdditionalParameters()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $o = new Operation([
							 | 
						||
| 
								 | 
							
								            'additionalParameters' => [
							 | 
						||
| 
								 | 
							
								                'type' => 'string', 'name' => 'binks',
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            'parameters' => [
							 | 
						||
| 
								 | 
							
								                'foo' => ['type' => 'integer'],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('string', $o->getAdditionalParameters()->getType());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @return Operation
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected function getOperation()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return new Operation([
							 | 
						||
| 
								 | 
							
								            'name'       => 'OperationTest',
							 | 
						||
| 
								 | 
							
								            'class'      => get_class($this),
							 | 
						||
| 
								 | 
							
								            'parameters' => [
							 | 
						||
| 
								 | 
							
								                'test'          => ['type' => 'object'],
							 | 
						||
| 
								 | 
							
								                'bool_1'        => ['default' => true, 'type' => 'boolean'],
							 | 
						||
| 
								 | 
							
								                'bool_2'        => ['default' => false],
							 | 
						||
| 
								 | 
							
								                'float'         => ['type' => 'numeric'],
							 | 
						||
| 
								 | 
							
								                'int'           => ['type' => 'integer'],
							 | 
						||
| 
								 | 
							
								                'date'          => ['type' => 'string'],
							 | 
						||
| 
								 | 
							
								                'timestamp'     => ['type' => 'string'],
							 | 
						||
| 
								 | 
							
								                'string'        => ['type' => 'string'],
							 | 
						||
| 
								 | 
							
								                'username'      => ['type' => 'string', 'required' => true, 'filters' => 'strtolower'],
							 | 
						||
| 
								 | 
							
								                'test_function' => ['type' => 'string', 'filters' => __CLASS__ . '::strtoupper'],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            'errorResponses' => [
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'code' => 503,
							 | 
						||
| 
								 | 
							
								                    'reason' => 'InsufficientCapacity',
							 | 
						||
| 
								 | 
							
								                    'class' => 'Guzzle\\Exception\\RuntimeException',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testCanExtendFromOtherOperations()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $d = new Description([
							 | 
						||
| 
								 | 
							
								            'operations' => [
							 | 
						||
| 
								 | 
							
								                'A' => [
							 | 
						||
| 
								 | 
							
								                    'parameters' => [
							 | 
						||
| 
								 | 
							
								                        'A' => [
							 | 
						||
| 
								 | 
							
								                            'type' => 'object',
							 | 
						||
| 
								 | 
							
								                            'properties' => ['foo' => ['type' => 'string']]
							 | 
						||
| 
								 | 
							
								                        ],
							 | 
						||
| 
								 | 
							
								                        'B' => ['type' => 'string']
							 | 
						||
| 
								 | 
							
								                    ],
							 | 
						||
| 
								 | 
							
								                    'summary' => 'foo'
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'B' => [
							 | 
						||
| 
								 | 
							
								                    'extends' => 'A',
							 | 
						||
| 
								 | 
							
								                    'summary' => 'Bar'
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								                'C' => [
							 | 
						||
| 
								 | 
							
								                    'extends' => 'B',
							 | 
						||
| 
								 | 
							
								                    'summary' => 'Bar',
							 | 
						||
| 
								 | 
							
								                    'parameters' => [
							 | 
						||
| 
								 | 
							
								                        'B' => ['type' => 'number']
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                ]
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $a = $d->getOperation('A');
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('foo', $a->getSummary());
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($a->hasParam('A'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('string', $a->getParam('B')->getType());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $b = $d->getOperation('B');
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($a->hasParam('A'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('Bar', $b->getSummary());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('string', $a->getParam('B')->getType());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $c = $d->getOperation('C');
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($a->hasParam('A'));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('Bar', $c->getSummary());
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('number', $c->getParam('B')->getType());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |