| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | <?phpnamespace 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');    }}
 |