| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 | <?phpnamespace 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());    }}
 |