Skip to content

Commit

Permalink
Hook up plural name to resource type addition
Browse files Browse the repository at this point in the history
  • Loading branch information
CyberiaResurrection committed Dec 27, 2017
1 parent f63cc51 commit 6b7e8f2
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 25 deletions.
39 changes: 27 additions & 12 deletions src/POData/Providers/Metadata/SimpleMetadataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -279,18 +279,30 @@ public function getResourceAssociationSet(
/**
* Add an entity type.
*
* @param \ReflectionClass $refClass reflection class of the entity
* @param string $name name of the entity
* @param mixed $isAbstract
* @param null|mixed $baseType
* @param \ReflectionClass $refClass reflection class of the entity
* @param string $name name of the entity
* @param null $pluralName Optional custom resource set name
* @param mixed $isAbstract
* @param null|mixed $baseType
* @return ResourceEntityType when the name is already in use
* @throws InvalidOperationException when the name is already in use
* @return ResourceEntityType
*
* @internal param string $namespace namespace of the data source
*/
public function addEntityType(\ReflectionClass $refClass, $name, $isAbstract = false, $baseType = null)
{
$result = $this->createResourceType($refClass, $name, ResourceTypeKind::ENTITY(), $isAbstract, $baseType);
public function addEntityType(
\ReflectionClass $refClass,
$name,
$pluralName = null,
$isAbstract = false,
$baseType = null
) {
$result = $this->createResourceType(
$refClass,
$name,
ResourceTypeKind::ENTITY(),
$isAbstract,
$baseType,
$pluralName
);
assert($result instanceof ResourceEntityType);
return $result;
}
Expand All @@ -301,6 +313,7 @@ public function addEntityType(\ReflectionClass $refClass, $name, $isAbstract = f
* @param $typeKind
* @param mixed $isAbstract
* @param null|mixed $baseType
* @param null|mixed $pluralName
* @throws InvalidOperationException
* @return ResourceEntityType|ResourceComplexType
* @internal param null|string $namespace
Expand All @@ -311,7 +324,8 @@ private function createResourceType(
$name,
$typeKind,
$isAbstract = false,
$baseType = null
$baseType = null,
$pluralName = null
) {
if (array_key_exists($name, $this->resourceTypes)) {
throw new InvalidOperationException('Type with same name already added');
Expand All @@ -325,11 +339,12 @@ private function createResourceType(

$type = null;
if ($typeKind == ResourceTypeKind::ENTITY()) {
list($oet, $entitySet) = $this->getMetadataManager()->addEntityType($name, $baseTEntityType, $isAbstract);
list($oet, $entitySet) = $this->getMetadataManager()
->addEntityType($name, $baseTEntityType, $isAbstract, 'Public', null, null, $pluralName);
assert($oet instanceof TEntityTypeType, 'Entity type ' . $name . ' not successfully added');
$type = new ResourceEntityType($refClass, $oet, $this);
$typeName = $type->getFullName();
$returnName = Str::plural($typeName);
$returnName = MetadataManager::getResourceSetNameFromResourceType($typeName);
$this->oDataEntityMap[$typeName] = $oet;
$this->typeSetMapping[$name] = $entitySet;
$this->typeSetMapping[$typeName] = $entitySet;
Expand Down
15 changes: 5 additions & 10 deletions tests/UnitTests/POData/Facets/NorthWind1/NorthWindMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,7 @@ private static function createMetadataCore()

//Register the entity (resource) type 'Customer'
$customersEntityType = $metadata->addEntityType(
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Customer2'),
'Customer'
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Customer2'), 'Customer'
);
$metadata->addKeyProperty($customersEntityType, 'CustomerID', EdmPrimitiveType::STRING);
$metadata->addKeyProperty($customersEntityType, 'CustomerGuid', EdmPrimitiveType::GUID);
Expand All @@ -142,8 +141,7 @@ private static function createMetadataCore()

//Register the entity (resource) type 'Order'
$orderEntityType = $metadata->addEntityType(
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Order2'),
'Order'
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Order2'), 'Order'
);
$metadata->addKeyProperty($orderEntityType, 'OrderID', EdmPrimitiveType::INT32);
$metadata->addPrimitiveProperty($orderEntityType, 'OrderDate', EdmPrimitiveType::DATETIME);
Expand All @@ -155,16 +153,14 @@ private static function createMetadataCore()

//Register the entity (resource) type 'Product2'
$productEntityType = $metadata->addEntityType(
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Product2'),
'Product'
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Product2'), 'Product'
);
$metadata->addKeyProperty($productEntityType, 'ProductID', EdmPrimitiveType::INT32);
$metadata->addPrimitiveProperty($productEntityType, 'ProductName', EdmPrimitiveType::STRING);

//Register the entity (resource) type 'Order_Details'
$orderDetailsEntityType = $metadata->addEntityType(
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\OrderDetails2'),
'Order_Details'
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\OrderDetails2'), 'Order_Details'
);
$metadata->addKeyProperty($orderDetailsEntityType, 'ProductID', EdmPrimitiveType::INT32);
$metadata->addKeyProperty($orderDetailsEntityType, 'OrderID', EdmPrimitiveType::INT32);
Expand All @@ -174,8 +170,7 @@ private static function createMetadataCore()

//Register the entity (resource) type 'Employee'
$employeeEntityType = $metadata->addEntityType(
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Employee2'),
'Employee'
new \ReflectionClass('UnitTests\POData\Facets\NorthWind1\Employee2'), 'Employee'
);
$metadata->addKeyProperty($employeeEntityType, 'EmployeeID', EdmPrimitiveType::STRING);
$metadata->addPrimitiveProperty($employeeEntityType, 'FirstName', EdmPrimitiveType::STRING);
Expand Down
30 changes: 30 additions & 0 deletions tests/UnitTests/POData/ObjectModel/ODataEntryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,17 @@

namespace UnitTests\POData\ObjectModel;

use AlgoWeb\ODataMetadata\MetadataManager;
use POData\ObjectModel\ODataCategory;
use POData\ObjectModel\ODataEntry;
use POData\ObjectModel\ODataPropertyContent;
use POData\Providers\Metadata\ResourceEntityType;
use POData\Providers\Metadata\ResourceProperty;
use POData\Providers\Metadata\SimpleMetadataProvider;
use POData\Providers\Metadata\Type\TypeCode;
use ReflectionClass;
use UnitTests\POData\TestCase;
use Mockery as m;

class ODataEntryTest extends TestCase
{
Expand All @@ -28,4 +36,26 @@ public function testOkEmptyContent()
$foo->isOK($actual);
$this->assertEquals($expected, $actual);
}

public function testAddODataCategoryWithCustomResourceSetName()
{
$typeClass = m::mock(ReflectionClass::class)->makePartial();
$typeClass->shouldReceive('hasMethod')->withArgs(['__get'])->andReturn(true);
$typeClass->shouldReceive('isInstance')->andReturn(true);

$foo = new SimpleMetadataProvider('string', 'String');
$type = $foo->addEntityType($typeClass, 'Die', 'Dice', false, null);
$foo->addKeyProperty($type, 'key', TypeCode::STRING);
$set = $foo->addResourceSet('Dice', $type);
$this->assertEquals('Dice', $set->getName());

$setName = MetadataManager::getResourceSetNameFromResourceType('Die');
$this->assertEquals('Dice', $setName);

$category = new ODataCategory('App.Die');

$entry = new ODataEntry();
$entry->setType($category);
$this->assertEquals('Dice', $entry->resourceSetName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -809,8 +809,8 @@ public function testAddEntityTypeAbstractTest()

$foo = new SimpleMetadataProvider('string', 'String');

$fore = $foo->addEntityType(new \ReflectionClass(get_class($forward)), 'fore', true);
$aft = $foo->addEntityType(new \ReflectionClass(get_class($back)), 'aft', false, $fore);
$fore = $foo->addEntityType(new \ReflectionClass(get_class($forward)), 'fore', null, true);
$aft = $foo->addEntityType(new \ReflectionClass(get_class($back)), 'aft', null, false, $fore);
$this->assertTrue($fore->isAbstract());
$this->assertFalse($aft->isAbstract());
$this->assertEquals($fore, $aft->getBaseType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public function testProcessDataFromClientEndpointRequest()
';

$expectedArray = unserialize(base64_decode('TzoyOToiUE9EYXRhXE9iamVjdE1vZGVsXE9EYXRhRW50cnkiOjE2OntzOjI6ImlkIjtzOjA6IiI7czo4OiJzZWxmTGluayI7TjtzOjU6InRpdGxlIjtPOjI5OiJQT0RhdGFcT2JqZWN0TW9kZWxcT0RhdGFUaXRsZSI6Mjp7czo1OiJ0aXRsZSI7czowOiIiO3M6NDoidHlwZSI7Tjt9czo4OiJlZGl0TGluayI7TjtzOjQ6InR5cGUiO086MzI6IlBPRGF0YVxPYmplY3RNb2RlbFxPRGF0YUNhdGVnb3J5IjoyOntzOjQ6InRlcm0iO3M6MjM6IkRhdGEuQ29tcGFueUNvbmZpZ01vZGVsIjtzOjY6InNjaGVtZSI7czo2MDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9hZG8vMjAwNy8wOC9kYXRhc2VydmljZXMvc2NoZW1lIjt9czoxNToicHJvcGVydHlDb250ZW50IjtPOjM5OiJQT0RhdGFcT2JqZWN0TW9kZWxcT0RhdGFQcm9wZXJ0eUNvbnRlbnQiOjE6e3M6MTA6InByb3BlcnRpZXMiO2E6Njp7czoxMDoiY29tcGFueV9pZCI7TzozMjoiUE9EYXRhXE9iamVjdE1vZGVsXE9EYXRhUHJvcGVydHkiOjQ6e3M6NDoibmFtZSI7czoxMDoiY29tcGFueV9pZCI7czo4OiJ0eXBlTmFtZSI7TjtzOjE5OiJhdHRyaWJ1dGVFeHRlbnNpb25zIjtOO3M6NToidmFsdWUiO3M6NjoiMTExMTExIjt9czo5OiJjb25maWdLZXkiO086MzI6IlBPRGF0YVxPYmplY3RNb2RlbFxPRGF0YVByb3BlcnR5Ijo0OntzOjQ6Im5hbWUiO3M6OToiY29uZmlnS2V5IjtzOjg6InR5cGVOYW1lIjtOO3M6MTk6ImF0dHJpYnV0ZUV4dGVuc2lvbnMiO047czo1OiJ2YWx1ZSI7czoyMDoiQ29tcGFueU1haW5EYXNoYm9hcmQiO31zOjEwOiJjcmVhdGVkX2F0IjtPOjMyOiJQT0RhdGFcT2JqZWN0TW9kZWxcT0RhdGFQcm9wZXJ0eSI6NDp7czo0OiJuYW1lIjtzOjEwOiJjcmVhdGVkX2F0IjtzOjg6InR5cGVOYW1lIjtzOjEyOiJFZG0uRGF0ZVRpbWUiO3M6MTk6ImF0dHJpYnV0ZUV4dGVuc2lvbnMiO047czo1OiJ2YWx1ZSI7czoxOToiMDAwMS0wMS0wMVQwMDowMDowMCI7fXM6MjoiaWQiO086MzI6IlBPRGF0YVxPYmplY3RNb2RlbFxPRGF0YVByb3BlcnR5Ijo0OntzOjQ6Im5hbWUiO3M6MjoiaWQiO3M6ODoidHlwZU5hbWUiO3M6OToiRWRtLkludDMyIjtzOjE5OiJhdHRyaWJ1dGVFeHRlbnNpb25zIjtOO3M6NToidmFsdWUiO3M6MToiMCI7fXM6MTA6InVwZGF0ZWRfYXQiO086MzI6IlBPRGF0YVxPYmplY3RNb2RlbFxPRGF0YVByb3BlcnR5Ijo0OntzOjQ6Im5hbWUiO3M6MTA6InVwZGF0ZWRfYXQiO3M6ODoidHlwZU5hbWUiO3M6MTI6IkVkbS5EYXRlVGltZSI7czoxOToiYXR0cmlidXRlRXh0ZW5zaW9ucyI7TjtzOjU6InZhbHVlIjtzOjE5OiIwMDAxLTAxLTAxVDAwOjAwOjAwIjt9czo1OiJ2YWx1ZSI7TzozMjoiUE9EYXRhXE9iamVjdE1vZGVsXE9EYXRhUHJvcGVydHkiOjQ6e3M6NDoibmFtZSI7czo1OiJ2YWx1ZSI7czo4OiJ0eXBlTmFtZSI7TjtzOjE5OiJhdHRyaWJ1dGVFeHRlbnNpb25zIjtOO3M6NToidmFsdWUiO3M6NTMwOiI8RGFzaGJvYXJkIEN1cnJlbmN5Q3VsdHVyZT0iZW4tQVUiPg0KICA8VGl0bGUgVGV4dD0iRGFzaGJvYXJkIiAvPg0KICA8RGF0YVNvdXJjZXM+DQogICAgPE9iamVjdERhdGFTb3VyY2UgQ29tcG9uZW50TmFtZT0iZGFzaGJvYXJkT2JqZWN0RGF0YVNvdXJjZTEiPg0KICAgICAgPE5hbWU+Rm9vIEJhcjwvTmFtZT4NCiAgICAgIDxEYXRhU291cmNlIFR5cGU9IlN5c3RlbS5EYXRhLlNlcnZpY2VzLkNsaWVudC5EYXRhU2VydmljZVF1ZXJ5YDErRGF0YVNlcnZpY2VPcmRlcmVkUXVlcnlbW0Zvb0Jhci5Gb29CYXJSZW1vdGVXQ0YuQWRkcmVzcywgRm9vQmFyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dLCBNaWNyb3NvZnQuRGF0YS5TZXJ2aWNlcy5DbGllbnQsIFZlcnNpb249NS42LjQuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1IiAvPg0KICAgIDwvT2JqZWN0RGF0YVNvdXJjZT4NCiAgPC9EYXRhU291cmNlcz4NCjwvRGFzaGJvYXJkPiI7fX19czoxMDoibWVkaWFMaW5rcyI7YTowOnt9czo5OiJtZWRpYUxpbmsiO047czo1OiJsaW5rcyI7YTowOnt9czo0OiJlVGFnIjtOO3M6MTY6ImlzTWVkaWFMaW5rRW50cnkiO2I6MDtzOjE1OiJyZXNvdXJjZVNldE5hbWUiO047czo3OiJ1cGRhdGVkIjtzOjIwOiIyMDE3LTA2LTE1VDA0OjQ0OjQwWiI7czo3OiJiYXNlVVJJIjtOO3M6MTE6ImF0b21Db250ZW50IjtOO3M6MTA6ImF0b21BdXRob3IiO047fQ=='));
$expectedArray->resourceSetName = 'CompanyConfigModels';
//$expectedArray->resourceSetName = 'CompanyConfigModels';

$url = m::mock(Url::class);
$url->shouldReceive('getUrlAsString')->andReturn('http://localhost/foobar/odata.svc/CompanyConfigModels');
Expand Down

0 comments on commit 6b7e8f2

Please sign in to comment.