185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | namespace GuzzleHttp\Tests\Command\Guzzle; | ||
|  | 
 | ||
|  | use GuzzleHttp\Command\Guzzle\Description; | ||
|  | use GuzzleHttp\Command\Guzzle\Operation; | ||
|  | use GuzzleHttp\Command\Guzzle\Parameter; | ||
|  | use GuzzleHttp\Command\Guzzle\SchemaFormatter; | ||
|  | 
 | ||
|  | /** | ||
|  |  * @covers \GuzzleHttp\Command\Guzzle\Description | ||
|  |  */ | ||
|  | class DescriptionTest extends \PHPUnit_Framework_TestCase | ||
|  | { | ||
|  |     protected $operations; | ||
|  | 
 | ||
|  |     public function setup() | ||
|  |     { | ||
|  |         $this->operations = [ | ||
|  |             'test_command' => [ | ||
|  |                 'name'        => 'test_command', | ||
|  |                 'description' => 'documentationForCommand', | ||
|  |                 'httpMethod'  => 'DELETE', | ||
|  |                 'class'       => 'FooModel', | ||
|  |                 'parameters'  => [ | ||
|  |                     'bucket'  => ['required' => true], | ||
|  |                     'key'     => ['required' => true] | ||
|  |                 ] | ||
|  |             ] | ||
|  |         ]; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testConstructor() | ||
|  |     { | ||
|  |         $service = new Description(['operations' => $this->operations]); | ||
|  |         $this->assertEquals(1, count($service->getOperations())); | ||
|  |         $this->assertFalse($service->hasOperation('foobar')); | ||
|  |         $this->assertTrue($service->hasOperation('test_command')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testContainsModels() | ||
|  |     { | ||
|  |         $d = new Description([ | ||
|  |             'operations' => ['foo' => []], | ||
|  |             'models' => [ | ||
|  |                 'Tag'    => ['type' => 'object'], | ||
|  |                 'Person' => ['type' => 'object'] | ||
|  |             ] | ||
|  |         ]); | ||
|  |         $this->assertTrue($d->hasModel('Tag')); | ||
|  |         $this->assertTrue($d->hasModel('Person')); | ||
|  |         $this->assertFalse($d->hasModel('Foo')); | ||
|  |         $this->assertInstanceOf(Parameter::class, $d->getModel('Tag')); | ||
|  |         $this->assertEquals(['Tag', 'Person'], array_keys($d->getModels())); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testCanUseResponseClass() | ||
|  |     { | ||
|  |         $d = new Description([ | ||
|  |             'operations' => [ | ||
|  |                 'foo' => ['responseClass' => 'Tag'] | ||
|  |             ], | ||
|  |             'models' => ['Tag' => ['type' => 'object']] | ||
|  |         ]); | ||
|  |         $op = $d->getOperation('foo'); | ||
|  |         $this->assertNotNull($op->getResponseModel()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \InvalidArgumentException | ||
|  |      */ | ||
|  |     public function testRetrievingMissingModelThrowsException() | ||
|  |     { | ||
|  |         $d = new Description([]); | ||
|  |         $d->getModel('foo'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testHasAttributes() | ||
|  |     { | ||
|  |         $d = new Description([ | ||
|  |             'operations'  => [], | ||
|  |             'name'        => 'Name', | ||
|  |             'description' => 'Description', | ||
|  |             'apiVersion'  => '1.24' | ||
|  |         ]); | ||
|  | 
 | ||
|  |         $this->assertEquals('Name', $d->getName()); | ||
|  |         $this->assertEquals('Description', $d->getDescription()); | ||
|  |         $this->assertEquals('1.24', $d->getApiVersion()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testPersistsCustomAttributes() | ||
|  |     { | ||
|  |         $data = [ | ||
|  |             'operations'  => ['foo' => ['class' => 'foo', 'parameters' => []]], | ||
|  |             'name'        => 'Name', | ||
|  |             'description' => 'Test', | ||
|  |             'apiVersion'  => '1.24', | ||
|  |             'auth'        => 'foo', | ||
|  |             'keyParam'    => 'bar' | ||
|  |         ]; | ||
|  |         $d = new Description($data); | ||
|  |         $this->assertEquals('foo', $d->getData('auth')); | ||
|  |         $this->assertEquals('bar', $d->getData('keyParam')); | ||
|  |         $this->assertEquals(['auth' => 'foo', 'keyParam' => 'bar'], $d->getData()); | ||
|  |         $this->assertNull($d->getData('missing')); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \InvalidArgumentException | ||
|  |      */ | ||
|  |     public function testThrowsExceptionForMissingOperation() | ||
|  |     { | ||
|  |         $s = new Description([]); | ||
|  |         $this->assertNull($s->getOperation('foo')); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException \InvalidArgumentException | ||
|  |      */ | ||
|  |     public function testValidatesOperationTypes() | ||
|  |     { | ||
|  |         new Description([ | ||
|  |             'operations' => ['foo' => new \stdClass()] | ||
|  |         ]); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testHasbaseUrl() | ||
|  |     { | ||
|  |         $description = new Description(['baseUrl' => 'http://foo.com']); | ||
|  |         $this->assertEquals('http://foo.com', $description->getBaseUri()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testHasbaseUri() | ||
|  |     { | ||
|  |         $description = new Description(['baseUri' => 'http://foo.com']); | ||
|  |         $this->assertEquals('http://foo.com', $description->getBaseUri()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testModelsHaveNames() | ||
|  |     { | ||
|  |         $desc = [ | ||
|  |             'models' => [ | ||
|  |                 'date' => ['type' => 'string'], | ||
|  |                 'user'=> [ | ||
|  |                     'type' => 'object', | ||
|  |                     'properties' => [ | ||
|  |                         'dob' => ['$ref' => 'date'] | ||
|  |                     ] | ||
|  |                 ] | ||
|  |             ] | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $s = new Description($desc); | ||
|  |         $this->assertEquals('string', $s->getModel('date')->getType()); | ||
|  |         $this->assertEquals('dob', $s->getModel('user')->getProperty('dob')->getName()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testHasOperations() | ||
|  |     { | ||
|  |         $desc = ['operations' => ['foo' => ['parameters' => ['foo' => [ | ||
|  |             'name' => 'foo' | ||
|  |         ]]]]]; | ||
|  |         $s = new Description($desc); | ||
|  |         $this->assertInstanceOf(Operation::class, $s->getOperation('foo')); | ||
|  |         $this->assertSame($s->getOperation('foo'), $s->getOperation('foo')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testHasFormatter() | ||
|  |     { | ||
|  |         $s = new Description([]); | ||
|  |         $this->assertNotEmpty($s->format('date', 'now')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testCanUseCustomFormatter() | ||
|  |     { | ||
|  |         $formatter = $this->getMockBuilder(SchemaFormatter::class) | ||
|  |             ->setMethods(['format']) | ||
|  |             ->getMock(); | ||
|  |         $formatter->expects($this->once()) | ||
|  |             ->method('format'); | ||
|  |         $s = new Description([], ['formatter' => $formatter]); | ||
|  |         $s->format('time', 'now'); | ||
|  |     } | ||
|  | } |