diff --git a/tests/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php b/tests/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php new file mode 100644 index 00000000000..d79136e7e84 --- /dev/null +++ b/tests/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ApiPlatform\Core\Tests\Doctrine\Orm\Extension; + +use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\EagerLoadingExtension; +use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\QueryBuilder; + +/** + * @author Amrouche Hamza + */ +class EagerLoadingExtensionTest extends \PHPUnit_Framework_TestCase +{ + public function testApplyToCollection() + { + $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); + + $classMetadataProphecy = $this->prophesize(ClassMetadata::class); + $classMetadataProphecy->getAssociationNames()->shouldBeCalled()->willReturn([0 => 'dummyRelation']); + $classMetadataProphecy->associationMappings = ['dummyRelation' => ['fetch' => 3]]; + $emProphecy = $this->prophesize(EntityManager::class); + $emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal()); + $queryBuilderProphecy->leftJoin('o.dummyRelation', 'a0')->shouldBeCalled(1); + $queryBuilderProphecy->addSelect('a0')->shouldBeCalled(1); + + $em = $queryBuilderProphecy->getEntityManager()->shouldBeCalled(1)->willReturn($emProphecy->reveal()); + + $queryBuilder = $queryBuilderProphecy->reveal(); + $orderExtensionTest = new EagerLoadingExtension(); + $orderExtensionTest->applyToCollection($queryBuilder, Dummy::class); + } + + public function testApplyToItem() + { + $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); + + $classMetadataProphecy = $this->prophesize(ClassMetadata::class); + $classMetadataProphecy->getAssociationNames()->shouldBeCalled()->willReturn([0 => 'dummyRelation']); + $classMetadataProphecy->associationMappings = ['dummyRelation' => ['fetch' => 3]]; + $emProphecy = $this->prophesize(EntityManager::class); + $emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal()); + $queryBuilderProphecy->leftJoin('o.dummyRelation', 'a0')->shouldBeCalled(1); + $queryBuilderProphecy->addSelect('a0')->shouldBeCalled(1); + + $em = $queryBuilderProphecy->getEntityManager()->shouldBeCalled(1)->willReturn($emProphecy->reveal()); + + $queryBuilder = $queryBuilderProphecy->reveal(); + $orderExtensionTest = new EagerLoadingExtension(); + $orderExtensionTest->applyToItem($queryBuilder, Dummy::class, []); + } +} diff --git a/tests/Bridge/Doctrine/Orm/Extension/FilterExtensionTest.php b/tests/Bridge/Doctrine/Orm/Extension/FilterExtensionTest.php new file mode 100644 index 00000000000..7a79b9c8d1a --- /dev/null +++ b/tests/Bridge/Doctrine/Orm/Extension/FilterExtensionTest.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ApiPlatform\Core\Tests\Doctrine\Orm\Extension; + +use ApiPlatform\Core\Api\FilterCollection; +use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterExtension; +use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\FilterInterface; +use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface; +use ApiPlatform\Core\Metadata\Resource\ResourceMetadata; +use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy; +use Doctrine\ORM\QueryBuilder; + +/** + * @author Amrouche Hamza + */ +class FilterExtensionTest extends \PHPUnit_Framework_TestCase +{ + public function testApplyToCollectionWithValidFilters() + { + $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); + + $dummyMetadata = new ResourceMetadata('dummy', 'dummy', '#dummy', ['get' => ['method' => 'GET'], 'put' => ['method' => 'PUT']], ['get' => ['method' => 'GET', 'filters' => ['dummyFilter']], 'post' => ['method' => 'POST'], 'custom' => ['method' => 'GET', 'path' => '/foo'], 'custom2' => ['method' => 'POST', 'path' => '/foo']], []); + $resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class); + $resourceMetadataFactoryProphecy->create(Dummy::class)->shouldBeCalled()->willReturn($dummyMetadata); + + $queryBuilder = $queryBuilderProphecy->reveal(); + + $filterProphecy = $this->prophesize(FilterInterface::class); + $filterProphecy->apply($queryBuilder, Dummy::class, 'get')->shouldBeCalled(); + + $orderExtensionTest = new FilterExtension($resourceMetadataFactoryProphecy->reveal(), new FilterCollection(['dummyFilter' => $filterProphecy->reveal()])); + $orderExtensionTest->applyToCollection($queryBuilder, Dummy::class, 'get'); + } +} diff --git a/tests/Bridge/Doctrine/Orm/Extension/OrderExtensionTest.php b/tests/Bridge/Doctrine/Orm/Extension/OrderExtensionTest.php new file mode 100644 index 00000000000..06130d2f689 --- /dev/null +++ b/tests/Bridge/Doctrine/Orm/Extension/OrderExtensionTest.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ApiPlatform\Core\Tests\Doctrine\Orm\Extension; + +use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension; +use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\QueryBuilder; + +/** + * @author Amrouche Hamza + */ +class OrderExtensionTest extends \PHPUnit_Framework_TestCase +{ + public function testApplyToCollectionWithValidOrder() + { + $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); + + $queryBuilderProphecy->addOrderBy('o.name', 'asc')->shouldBeCalled(); + + $classMetadataProphecy = $this->prophesize(ClassMetadata::class); + $classMetadataProphecy->getIdentifier()->shouldBeCalled()->willReturn(['name']); + + $emProphecy = $this->prophesize(EntityManager::class); + $emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal()); + + $em = $queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal()); + + $queryBuilder = $queryBuilderProphecy->reveal(); + $orderExtensionTest = new OrderExtension('asc'); + $orderExtensionTest->applyToCollection($queryBuilder, Dummy::class); + } + + public function testApplyToCollectionWithWrongOrder() + { + $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); + + $queryBuilderProphecy->addOrderBy('o.name', 'asc')->shouldNotBeCalled(); + + $classMetadataProphecy = $this->prophesize(ClassMetadata::class); + $classMetadataProphecy->getIdentifier()->shouldBeCalled()->willReturn(['name']); + + $emProphecy = $this->prophesize(EntityManager::class); + $emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal()); + + $em = $queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal()); + + $queryBuilder = $queryBuilderProphecy->reveal(); + $orderExtensionTest = new OrderExtension(); + $orderExtensionTest->applyToCollection($queryBuilder, Dummy::class); + } +}