Вход Регистрация
Файл: vkolhoze.com/vendor/guzzle/guzzle/tests/Guzzle/Tests/Service/Description/ParameterTest.php
Строк: 296
<?php

namespace GuzzleTestsServiceDescription;

use 
GuzzleServiceDescriptionParameter;
use 
GuzzleServiceDescriptionServiceDescription;

/**
 * @covers GuzzleServiceDescriptionParameter
 */
class ParameterTest extends GuzzleTestsGuzzleTestCase
{
    protected 
$data = array(
        
'name'            => 'foo',
        
'type'            => 'bar',
        
'required'        => true,
        
'default'         => '123',
        
'description'     => '456',
        
'minLength'       => 2,
        
'maxLength'       => 5,
        
'location'        => 'body',
        
'static'          => 'static!',
        
'filters'         => array('trim''json_encode')
    );

    public function 
testCreatesParamFromArray()
    {
        
$p = new Parameter($this->data);
        
$this->assertEquals('foo'$p->getName());
        
$this->assertEquals('bar'$p->getType());
        
$this->assertEquals(true$p->getRequired());
        
$this->assertEquals('123'$p->getDefault());
        
$this->assertEquals('456'$p->getDescription());
        
$this->assertEquals(2$p->getMinLength());
        
$this->assertEquals(5$p->getMaxLength());
        
$this->assertEquals('body'$p->getLocation());
        
$this->assertEquals('static!'$p->getStatic());
        
$this->assertEquals(array('trim''json_encode'), $p->getFilters());
    }

    public function 
testCanConvertToArray()
    {
        
$p = new Parameter($this->data);
        unset(
$this->data['name']);
        
$this->assertEquals($this->data$p->toArray());
    }

    public function 
testUsesStatic()
    {
        
$d $this->data;
        
$d['default'] = 'booboo';
        
$d['static'] = true;
        
$p = new Parameter($d);
        
$this->assertEquals('booboo'$p->getValue('bar'));
    }

    public function 
testUsesDefault()
    {
        
$d $this->data;
        
$d['default'] = 'foo';
        
$d['static'] = null;
        
$p = new Parameter($d);
        
$this->assertEquals('foo'$p->getValue(null));
    }

    public function 
testReturnsYourValue()
    {
        
$d $this->data;
        
$d['static'] = null;
        
$p = new Parameter($d);
        
$this->assertEquals('foo'$p->getValue('foo'));
    }

    public function 
testZeroValueDoesNotCauseDefaultToBeReturned()
    {
        
$d $this->data;
        
$d['default'] = '1';
        
$d['static'] = null;
        
$p = new Parameter($d);
        
$this->assertEquals('0'$p->getValue('0'));
    }

    public function 
testFiltersValues()
    {
        
$d $this->data;
        
$d['static'] = null;
        
$d['filters'] = 'strtoupper';
        
$p = new Parameter($d);
        
$this->assertEquals('FOO'$p->filter('foo'));
    }

    public function 
testConvertsBooleans()
    {
        
$p = new Parameter(array('type' => 'boolean'));
        
$this->assertEquals(true$p->filter('true'));
        
$this->assertEquals(false$p->filter('false'));
    }

    public function 
testUsesArrayByDefaultForFilters()
    {
        
$d $this->data;
        
$d['filters'] = null;
        
$p = new Parameter($d);
        
$this->assertEquals(array(), $p->getFilters());
    }

    public function 
testAllowsSimpleLocationValue()
    {
        
$p = new Parameter(array('name' => 'myname''location' => 'foo''sentAs' => 'Hello'));
        
$this->assertEquals('foo'$p->getLocation());
        
$this->assertEquals('Hello'$p->getSentAs());
    }

    public function 
testParsesTypeValues()
    {
        
$p = new Parameter(array('type' => 'foo'));
        
$this->assertEquals('foo'$p->getType());
    }

    
/**
     * @expectedException InvalidArgumentException
     * @expectedExceptionMessage A [method] value must be specified for each complex filter
     */
    
public function testValidatesComplexFilters()
    {
        
$p = new Parameter(array('filters' => array(array('args' => 'foo'))));
    }

    public function 
testCanBuildUpParams()
    {
        
$p = new Parameter(array());
        
$p->setName('foo')
            ->
setDescription('c')
            ->
setFilters(array('d'))
            ->
setLocation('e')
            ->
setSentAs('f')
            ->
setMaxLength(1)
            ->
setMinLength(1)
            ->
setMinimum(2)
            ->
setMaximum(2)
            ->
setMinItems(3)
            ->
setMaxItems(3)
            ->
setRequired(true)
            ->
setStatic(true)
            ->
setDefault('h')
            ->
setType('i');

        
$p->addFilter('foo');

        
$this->assertEquals('foo'$p->getName());
        
$this->assertEquals('h'$p->getDefault());
        
$this->assertEquals('c'$p->getDescription());
        
$this->assertEquals(array('d''foo'), $p->getFilters());
        
$this->assertEquals('e'$p->getLocation());
        
$this->assertEquals('f'$p->getSentAs());
        
$this->assertEquals(1$p->getMaxLength());
        
$this->assertEquals(1$p->getMinLength());
        
$this->assertEquals(2$p->getMaximum());
        
$this->assertEquals(2$p->getMinimum());
        
$this->assertEquals(3$p->getMaxItems());
        
$this->assertEquals(3$p->getMinItems());
        
$this->assertEquals(true$p->getRequired());
        
$this->assertEquals(true$p->getStatic());
        
$this->assertEquals('i'$p->getType());
    }

    public function 
testAllowsNestedShape()
    {
        
$command $this->getServiceBuilder()->get('mock')->getCommand('mock_command')->getOperation();
        
$param = new Parameter(array(
            
'parent'     => $command,
            
'name'       => 'foo',
            
'type'       => 'object',
            
'location'   => 'query',
            
'properties' => array(
                
'foo' => array(
                    
'type'      => 'object',
                    
'required'  => true,
                    
'properties' => array(
                        
'baz' => array(
                            
'name' => 'baz',
                            
'type' => 'bool',
                        )
                    )
                ),
                
'bar' => array(
                    
'name'    => 'bar',
                    
'default' => '123'
                
)
            )
        ));

        
$this->assertSame($command$param->getParent());
        
$this->assertNotEmpty($param->getProperties());
        
$this->assertInstanceOf('GuzzleServiceDescriptionParameter'$param->getProperty('foo'));
        
$this->assertSame($param$param->getProperty('foo')->getParent());
        
$this->assertSame($param->getProperty('foo'), $param->getProperty('foo')->getProperty('baz')->getParent());
        
$this->assertInstanceOf('GuzzleServiceDescriptionParameter'$param->getProperty('bar'));
        
$this->assertSame($param$param->getProperty('bar')->getParent());

        
$array $param->toArray();
        
$this->assertInternalType('array'$array['properties']);
        
$this->assertArrayHasKey('foo'$array['properties']);
        
$this->assertArrayHasKey('bar'$array['properties']);
    }

    public function 
testAllowsComplexFilters()
    {
        
$that $this;
        
$param = new Parameter(array());
        
$param->setFilters(array(array('method' => function ($a$b$c$d) use ($that$param) {
            
$that->assertEquals('test'$a);
            
$that->assertEquals('my_value!'$b);
            
$that->assertEquals('bar'$c);
            
$that->assertSame($param$d);
            return 
'abc' $b;
        }, 
'args' => array('test''@value''bar''@api'))));
        
$this->assertEquals('abcmy_value!'$param->filter('my_value!'));
    }

    public function 
testCanChangeParentOfNestedParameter()
    {
        
$param1 = new Parameter(array('name' => 'parent'));
        
$param2 = new Parameter(array('name' => 'child'));
        
$param2->setParent($param1);
        
$this->assertSame($param1$param2->getParent());
    }

    public function 
testCanRemoveFromNestedStructure()
    {
        
$param1 = new Parameter(array('name' => 'parent'));
        
$param2 = new Parameter(array('name' => 'child'));
        
$param1->addProperty($param2);
        
$this->assertSame($param1$param2->getParent());
        
$this->assertSame($param2$param1->getProperty('child'));

        
// Remove a single child from the structure
        
$param1->removeProperty('child');
        
$this->assertNull($param1->getProperty('child'));
        
// Remove the entire structure
        
$param1->addProperty($param2);
        
$param1->removeProperty('child');
        
$this->assertNull($param1->getProperty('child'));
    }

    public function 
testAddsAdditionalProperties()
    {
        
$p = new Parameter(array(
            
'type' => 'object',
            
'additionalProperties' => array('type' => 'string')
        ));
        
$this->assertInstanceOf('GuzzleServiceDescriptionParameter'$p->getAdditionalProperties());
        
$this->assertNull($p->getAdditionalProperties()->getAdditionalProperties());
        
$p = new Parameter(array('type' => 'object'));
        
$this->assertTrue($p->getAdditionalProperties());
    }

    public function 
testAddsItems()
    {
        
$p = new Parameter(array(
            
'type'  => 'array',
            
'items' => array('type' => 'string')
        ));
        
$this->assertInstanceOf('GuzzleServiceDescriptionParameter'$p->getItems());
        
$out $p->toArray();
        
$this->assertEquals('array'$out['type']);
        
$this->assertInternalType('array'$out['items']);
    }

    public function 
testHasExtraProperties()
    {
        
$p = new Parameter();
        
$this->assertEquals(array(), $p->getData());
        
$p->setData(array('foo' => 'bar'));
        
$this->assertEquals('bar'$p->getData('foo'));
        
$p->setData('baz''boo');
        
$this->assertEquals(array('foo' => 'bar''baz' => 'boo'), $p->getData());
    }

    public function 
testCanRetrieveKnownPropertiesUsingDataMethod()
    {
        
$p = new Parameter();
        
$this->assertEquals(null$p->getData('foo'));
        
$p->setName('test');
        
$this->assertEquals('test'$p->getData('name'));
    }

    public function 
testHasInstanceOf()
    {
        
$p = new Parameter();
        
$this->assertNull($p->getInstanceOf());
        
$p->setInstanceOf('Foo');
        
$this->assertEquals('Foo'$p->getInstanceOf());
    }

    public function 
testHasPattern()
    {
        
$p = new Parameter();
        
$this->assertNull($p->getPattern());
        
$p->setPattern('/[0-9]+/');
        
$this->assertEquals('/[0-9]+/'$p->getPattern());
    }

    public function 
testHasEnum()
    {
        
$p = new Parameter();
        
$this->assertNull($p->getEnum());
        
$p->setEnum(array('foo''bar'));
        
$this->assertEquals(array('foo''bar'), $p->getEnum());
    }

    public function 
testSerializesItems()
    {
        
$p = new Parameter(array(
            
'type'  => 'object',
            
'additionalProperties' => array('type' => 'string')
        ));
        
$this->assertEquals(array(
            
'type'  => 'object',
            
'additionalProperties' => array('type' => 'string')
        ), 
$p->toArray());
    }

    public function 
testResolvesRefKeysRecursively()
    {
        
$description = new ServiceDescription(array(
            
'models' => array(
                
'JarJar' => array('type' => 'string''default' => 'Mesa address tha senate!'),
                
'Anakin' => array('type' => 'array''items' => array('$ref' => 'JarJar'))
            )
        ));
        
$p = new Parameter(array('$ref' => 'Anakin''description' => 'added'), $description);
        
$this->assertEquals(array(
            
'type' => 'array',
            
'items' => array('type' => 'string''default' => 'Mesa address tha senate!'),
            
'description' => 'added'
        
), $p->toArray());
    }

    public function 
testResolvesExtendsRecursively()
    {
        
$jarJar = array('type' => 'string''default' => 'Mesa address tha senate!''description' => 'a');
        
$anakin = array('type' => 'array''items' => array('extends' => 'JarJar''description' => 'b'));
        
$description = new ServiceDescription(array(
            
'models' => array('JarJar' => $jarJar'Anakin' => $anakin)
        ));
        
// Description attribute will be updated, and format added
        
$p = new Parameter(array('extends' => 'Anakin''format' => 'date'), $description);
        
$this->assertEquals(array(
            
'type'  => 'array',
            
'format' => 'date',
            
'items' => array(
                
'type'    => 'string',
                
'default' => 'Mesa address tha senate!',
                
'description' => 'b'
            
)
        ), 
$p->toArray());
    }

    public function 
testHasKeyMethod()
    {
        
$p = new Parameter(array('name' => 'foo''sentAs' => 'bar'));
        
$this->assertEquals('bar'$p->getWireName());
        
$p->setSentAs(null);
        
$this->assertEquals('foo'$p->getWireName());
    }

    public function 
testIncludesNameInToArrayWhenItemsAttributeHasName()
    {
        
$p = new Parameter(array(
            
'type' => 'array',
            
'name' => 'Abc',
            
'items' => array(
                
'name' => 'Foo',
                
'type' => 'object'
            
)
        ));
        
$result $p->toArray();
        
$this->assertEquals(array(
            
'type' => 'array',
            
'items' => array(
                
'name' => 'Foo',
                
'type' => 'object',
                
'additionalProperties' => true
            
)
        ), 
$result);
    }

    public function 
dateTimeProvider()
    {
        
$d 'October 13, 2012 16:15:46 UTC';

        return array(
            array(
$d'date-time''2012-10-13T16:15:46Z'),
            array(
$d'date''2012-10-13'),
            array(
$d'timestamp'strtotime($d)),
            array(new 
DateTime($d), 'timestamp'strtotime($d))
        );
    }

    
/**
     * @dataProvider dateTimeProvider
     */
    
public function testAppliesFormat($d$format$result)
    {
        
$p = new Parameter();
        
$p->setFormat($format);
        
$this->assertEquals($format$p->getFormat());
        
$this->assertEquals($result$p->filter($d));
    }
}
Онлайн: 0
Реклама