mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 23:59:26 +03:00
0845377300
When no groups are given in the ApiDoc, there should be no GroupExclusion and the Entity should be parsed wihtout exclusions. Otherwise only the "Default" group of the Entity would be parsed, which may not be used. The ApiDoc should not enforce the Entity to be grouped with "Default", to generate a "full-view" of it.
364 lines
13 KiB
PHP
364 lines
13 KiB
PHP
<?php
|
|
namespace NelmioApiDocBundle\Tests\Parser;
|
|
|
|
use Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested;
|
|
use Nelmio\ApiDocBundle\Parser\JmsMetadataParser;
|
|
use JMS\Serializer\Metadata\ClassMetadata;
|
|
use JMS\Serializer\Metadata\PropertyMetadata;
|
|
use JMS\Serializer\Naming\CamelCaseNamingStrategy;
|
|
|
|
class JmsMetadataParserTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @dataProvider dataTestParserWithNestedType
|
|
*/
|
|
public function testParserWithNestedType($type)
|
|
{
|
|
$metadataFactory = $this->getMock('Metadata\MetadataFactoryInterface');
|
|
$docCommentExtractor = $this->getMockBuilder('Nelmio\ApiDocBundle\Util\DocCommentExtractor')
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$propertyMetadataFoo = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'foo');
|
|
$propertyMetadataFoo->type = array(
|
|
'name' => 'DateTime'
|
|
);
|
|
|
|
$propertyMetadataBar = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'bar');
|
|
$propertyMetadataBar->type = array(
|
|
'name' => 'string'
|
|
);
|
|
|
|
$propertyMetadataBaz = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'baz');
|
|
$propertyMetadataBaz->type = array(
|
|
'name' => $type,
|
|
'params' => array(
|
|
array(
|
|
'name' => 'integer',
|
|
'params' => array()
|
|
)
|
|
)
|
|
);
|
|
|
|
$metadata = new ClassMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested');
|
|
$metadata->addPropertyMetadata($propertyMetadataFoo);
|
|
$metadata->addPropertyMetadata($propertyMetadataBar);
|
|
$metadata->addPropertyMetadata($propertyMetadataBaz);
|
|
|
|
$propertyNamingStrategy = $this->getMock('JMS\Serializer\Naming\PropertyNamingStrategyInterface');
|
|
|
|
$propertyNamingStrategy
|
|
->expects($this->at(0))
|
|
->method('translateName')
|
|
->will($this->returnValue('foo'));
|
|
|
|
$propertyNamingStrategy
|
|
->expects($this->at(1))
|
|
->method('translateName')
|
|
->will($this->returnValue('bar'));
|
|
|
|
$propertyNamingStrategy
|
|
->expects($this->at(2))
|
|
->method('translateName')
|
|
->will($this->returnValue('baz'));
|
|
|
|
$input = 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested';
|
|
|
|
$metadataFactory->expects($this->once())
|
|
->method('getMetadataForClass')
|
|
->with($input)
|
|
->will($this->returnValue($metadata));
|
|
|
|
$jmsMetadataParser = new JmsMetadataParser($metadataFactory, $propertyNamingStrategy, $docCommentExtractor);
|
|
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array(),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'foo' => array(
|
|
'dataType' => 'DateTime',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'baz' => array(
|
|
'dataType' => 'array of integers',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
)
|
|
),
|
|
$output
|
|
);
|
|
}
|
|
|
|
public function testParserWithGroups()
|
|
{
|
|
$metadataFactory = $this->getMock('Metadata\MetadataFactoryInterface');
|
|
$docCommentExtractor = $this->getMockBuilder('Nelmio\ApiDocBundle\Util\DocCommentExtractor')
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$propertyMetadataFoo = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'foo');
|
|
$propertyMetadataFoo->type = array('name' => 'string');
|
|
|
|
$propertyMetadataBar = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'bar');
|
|
$propertyMetadataBar->type = array('name' => 'string');
|
|
$propertyMetadataBar->groups = array('Default', 'Special');
|
|
|
|
$propertyMetadataBaz = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'baz');
|
|
$propertyMetadataBaz->type = array('name' => 'string');
|
|
$propertyMetadataBaz->groups = array('Special');
|
|
|
|
$input = 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested';
|
|
|
|
$metadata = new ClassMetadata($input);
|
|
$metadata->addPropertyMetadata($propertyMetadataFoo);
|
|
$metadata->addPropertyMetadata($propertyMetadataBar);
|
|
$metadata->addPropertyMetadata($propertyMetadataBaz);
|
|
|
|
$metadataFactory->expects($this->any())
|
|
->method('getMetadataForClass')
|
|
->with($input)
|
|
->will($this->returnValue($metadata));
|
|
|
|
$propertyNamingStrategy = new CamelCaseNamingStrategy();
|
|
|
|
$jmsMetadataParser = new JmsMetadataParser($metadataFactory, $propertyNamingStrategy, $docCommentExtractor);
|
|
|
|
// No group specified.
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array(),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'foo' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'baz' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
),
|
|
$output
|
|
);
|
|
|
|
// Default group.
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array('Default'),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'foo' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
),
|
|
$output
|
|
);
|
|
|
|
// Special group.
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array('Special'),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'baz' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
),
|
|
$output
|
|
);
|
|
|
|
// Default + Special groups.
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array('Default', 'Special'),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'foo' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'baz' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
)
|
|
),
|
|
$output
|
|
);
|
|
}
|
|
|
|
public function testParserWithVersion()
|
|
{
|
|
$metadataFactory = $this->getMock('Metadata\MetadataFactoryInterface');
|
|
$docCommentExtractor = $this->getMockBuilder('Nelmio\ApiDocBundle\Util\DocCommentExtractor')
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$propertyMetadataFoo = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'foo');
|
|
$propertyMetadataFoo->type = array('name' => 'string');
|
|
|
|
$propertyMetadataBar = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'bar');
|
|
$propertyMetadataBar->type = array('name' => 'string');
|
|
$propertyMetadataBar->sinceVersion = '2.0';
|
|
|
|
$propertyMetadataBaz = new PropertyMetadata('Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested', 'baz');
|
|
$propertyMetadataBaz->type = array('name' => 'string');
|
|
$propertyMetadataBaz->untilVersion = '3.0';
|
|
|
|
$input = 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\JmsNested';
|
|
|
|
$metadata = new ClassMetadata($input);
|
|
$metadata->addPropertyMetadata($propertyMetadataFoo);
|
|
$metadata->addPropertyMetadata($propertyMetadataBar);
|
|
$metadata->addPropertyMetadata($propertyMetadataBaz);
|
|
|
|
$metadataFactory->expects($this->any())
|
|
->method('getMetadataForClass')
|
|
->with($input)
|
|
->will($this->returnValue($metadata));
|
|
|
|
$propertyNamingStrategy = new CamelCaseNamingStrategy();
|
|
|
|
$jmsMetadataParser = new JmsMetadataParser($metadataFactory, $propertyNamingStrategy, $docCommentExtractor);
|
|
|
|
// No group specified.
|
|
$output = $jmsMetadataParser->parse(
|
|
array(
|
|
'class' => $input,
|
|
'groups' => array(),
|
|
)
|
|
);
|
|
|
|
$this->assertEquals(
|
|
array(
|
|
'foo' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => null,
|
|
),
|
|
'bar' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => '2.0',
|
|
'untilVersion' => null,
|
|
),
|
|
'baz' => array(
|
|
'dataType' => 'string',
|
|
'required' => false,
|
|
'description' => null,
|
|
'readonly' => false,
|
|
'sinceVersion' => null,
|
|
'untilVersion' => '3.0',
|
|
)
|
|
),
|
|
$output
|
|
);
|
|
}
|
|
|
|
public function dataTestParserWithNestedType()
|
|
{
|
|
return array(
|
|
array('array'),
|
|
array('ArrayCollection')
|
|
);
|
|
}
|
|
}
|