Skip to content

Commit

Permalink
Merge e2059da into 90f8688
Browse files Browse the repository at this point in the history
  • Loading branch information
soyuka committed Aug 29, 2016
2 parents 90f8688 + e2059da commit be06531
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/Api/ResourceClassResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public function getResourceClass($value, string $resourceClass = null, bool $str
}

if (!$this->isResourceClass($typeToFind) || ($strict && isset($type) && $resourceClass !== $type)) {
if (is_subclass_of($type, $resourceClass) && $this->isResourceClass($type)) {
if (is_subclass_of($type, $resourceClass) && $this->isResourceClass($resourceClass)) {
return $type;
}

Expand Down
35 changes: 35 additions & 0 deletions tests/Api/ResourceClassResolverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceNameCollectionFactoryInterface;
use ApiPlatform\Core\Metadata\Resource\ResourceNameCollection;
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyTableInheritance;
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyTableInheritanceChild;

/**
* @author Amrouche Hamza <hamza.simperfit@gmail.com>
Expand Down Expand Up @@ -93,4 +95,37 @@ public function testIsResourceClassWithWrongClassName()
$resourceClass = $resourceClassResolver->isResourceClass('');
$this->assertFalse($resourceClass);
}

/**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage No resource class found.
*/
public function testGetResourceClassWithNoResourceClassNameAndNoObject()
{
$resourceNameCollectionFactoryProphecy = $this->prophesize(ResourceNameCollectionFactoryInterface::class);

$resourceClassResolver = new ResourceClassResolver($resourceNameCollectionFactoryProphecy->reveal());
$resourceClassResolver->getResourceClass(false, null);
}

public function testGetResourceClassWithResourceClassNameAndNoObject()
{
$resourceNameCollectionFactoryProphecy = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
$resourceNameCollectionFactoryProphecy->create()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled();

$resourceClassResolver = new ResourceClassResolver($resourceNameCollectionFactoryProphecy->reveal());
$this->assertEquals($resourceClassResolver->getResourceClass(false, Dummy::class), Dummy::class);
}

public function testGetResourceClassWithChildResource()
{
$resourceNameCollectionFactoryProphecy = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
$resourceNameCollectionFactoryProphecy->create()->willReturn(new ResourceNameCollection([DummyTableInheritance::class]))->shouldBeCalled();

$t = new DummyTableInheritanceChild();

$resourceClassResolver = new ResourceClassResolver($resourceNameCollectionFactoryProphecy->reveal());

$this->assertEquals($resourceClassResolver->getResourceClass($t, DummyTableInheritance::class), DummyTableInheritanceChild::class);
}
}

0 comments on commit be06531

Please sign in to comment.