From 7222991b13562c76336a56e9bcbfcee288fdc6df Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Sun, 18 Jan 2015 23:21:57 +0100 Subject: [PATCH] Tested composite primary key support --- .../Doctrine/Tests/Models/GeoNames/Admin1.php | 44 ++++++++++++ .../Models/GeoNames/Admin1AlternateName.php | 41 ++++++++++++ tests/Doctrine/Tests/Models/GeoNames/City.php | 47 +++++++++++++ .../Tests/Models/GeoNames/Country.php | 29 ++++++++ ...ompositePrimaryKeyWithAssociationsTest.php | 60 +++++++++++++++++ ...tyPersisterCompositeTypeParametersTest.php | 67 +++++++++++++++++++ ...sicEntityPersisterCompositeTypeSqlTest.php | 62 +++++++++++++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 15 ++++- 8 files changed, 364 insertions(+), 1 deletion(-) create mode 100644 tests/Doctrine/Tests/Models/GeoNames/Admin1.php create mode 100644 tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php create mode 100644 tests/Doctrine/Tests/Models/GeoNames/City.php create mode 100644 tests/Doctrine/Tests/Models/GeoNames/Country.php create mode 100644 tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php create mode 100644 tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php create mode 100644 tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php diff --git a/tests/Doctrine/Tests/Models/GeoNames/Admin1.php b/tests/Doctrine/Tests/Models/GeoNames/Admin1.php new file mode 100644 index 000000000..15a0147ed --- /dev/null +++ b/tests/Doctrine/Tests/Models/GeoNames/Admin1.php @@ -0,0 +1,44 @@ +id = $id; + $this->name = $name; + $this->country = $country; + } +} diff --git a/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php b/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php new file mode 100644 index 000000000..49d9939bd --- /dev/null +++ b/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php @@ -0,0 +1,41 @@ +id = $id; + $this->name = $name; + $this->admin1 = $admin1; + } +} diff --git a/tests/Doctrine/Tests/Models/GeoNames/City.php b/tests/Doctrine/Tests/Models/GeoNames/City.php new file mode 100644 index 000000000..411f4db91 --- /dev/null +++ b/tests/Doctrine/Tests/Models/GeoNames/City.php @@ -0,0 +1,47 @@ +id = $id; + $this->name = $name; + } +} diff --git a/tests/Doctrine/Tests/Models/GeoNames/Country.php b/tests/Doctrine/Tests/Models/GeoNames/Country.php new file mode 100644 index 000000000..ebde305f8 --- /dev/null +++ b/tests/Doctrine/Tests/Models/GeoNames/Country.php @@ -0,0 +1,29 @@ +id = $id; + $this->name = $name; + } +} diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php new file mode 100644 index 000000000..6ded5bb49 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php @@ -0,0 +1,60 @@ +useModelSet('geonames'); + parent::setUp(); + + $it = new Country("IT", "Italy"); + + $this->_em->persist($it); + $this->_em->flush(); + + $admin1 = new Admin1(1, "Rome", $it); + + $this->_em->persist($admin1); + $this->_em->flush(); + + $name1 = new Admin1AlternateName(1, "Roma", $admin1); + $name2 = new Admin1AlternateName(2, "Rome", $admin1); + + $admin1->names[] = $name1; + $admin1->names[] = $name2; + + $this->_em->persist($admin1); + $this->_em->persist($name1); + $this->_em->persist($name2); + + $this->_em->flush(); + + $this->_em->clear(); + } + + public function testFindByAbleToGetCompositeEntitiesWithMixedTypeIdentifiers() + { + $admin1Repo = $this->_em->getRepository('Doctrine\Tests\Models\GeoNames\Admin1'); + $admin1NamesRepo = $this->_em->getRepository('Doctrine\Tests\Models\GeoNames\Admin1AlternateName'); + + $admin1Rome = $admin1Repo->findOneBy(array('country' => 'IT', 'id' => 1)); + + $names = $admin1NamesRepo->findBy(array('admin1' => $admin1Rome)); + $this->assertCount(2, $names); + + $name1 = $admin1NamesRepo->findOneBy(array('admin1' => $admin1Rome, 'id' => 1)); + $name2 = $admin1NamesRepo->findOneBy(array('admin1' => $admin1Rome, 'id' => 2)); + + $this->assertEquals(1, $name1->id); + $this->assertEquals("Roma", $name1->name); + + $this->assertEquals(2, $name2->id); + $this->assertEquals("Rome", $name2->name); + } +} diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php new file mode 100644 index 000000000..76daadc3f --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -0,0 +1,67 @@ +_em = $this->_getTestEntityManager(); + + $this->_em->getClassMetadata('Doctrine\Tests\Models\GeoNames\Country'); + $this->_em->getClassMetadata('Doctrine\Tests\Models\GeoNames\Admin1'); + $this->_em->getClassMetadata('Doctrine\Tests\Models\GeoNames\Admin1AlternateName'); + + $this->_persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\Models\GeoNames\Admin1AlternateName')); + + } + + public function testExpandParametersWillExpandCompositeEntityKeys() + { + $country = new Country("IT", "Italy"); + $admin1 = new Admin1(10, "Rome", $country); + + + list ($values, $types) = $this->_persister->expandParameters(array( + 'admin1' => $admin1 + )); + + $this->assertEquals(array('integer', 'string'), $types); + $this->assertEquals(array(10, 'IT'), $values); + } + + public function testExpandCriteriaParametersWillExpandCompositeEntityKeys() + { + $country = new Country("IT", "Italy"); + $admin1 = new Admin1(10, "Rome", $country); + + $criteria = Criteria::create(); + + $criteria->andWhere(Criteria::expr()->eq("admin1", $admin1)); + + list ($values, $types) = $this->_persister->expandCriteriaParameters($criteria); + + $this->assertEquals(array('integer', 'string'), $types); + $this->assertEquals(array(10, 'IT'), $values); + } +} diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php new file mode 100644 index 000000000..54b1a2351 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -0,0 +1,62 @@ +_em = $this->_getTestEntityManager(); + + $this->_persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\Models\GeoNames\Admin1AlternateName')); + } + + public function testSelectConditionStatementEq() + { + $statement = $this->_persister->getSelectConditionStatementSQL('admin1', 1, array(), Comparison::EQ); + $this->assertEquals('t0.admin1 = ? AND t0.country = ?', $statement); + } + + public function testSelectConditionStatementEqNull() + { + $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, array(), Comparison::IS); + $this->assertEquals('t0.admin1 IS NULL AND t0.country IS NULL', $statement); + } + + public function testSelectConditionStatementNeqNull() + { + $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, array(), Comparison::NEQ); + $this->assertEquals('t0.admin1 IS NOT NULL AND t0.country IS NOT NULL', $statement); + } + + /** + * @expectedException Doctrine\ORM\ORMException + */ + public function testSelectConditionStatementIn() + { + $this->_persister->getSelectConditionStatementSQL('admin1', array(), array(), Comparison::IN); + } +} diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index fedeed734..7aaeae81a 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -252,6 +252,12 @@ abstract class OrmFunctionalTestCase extends OrmTestCase 'Doctrine\Tests\Models\ValueConversionType\InversedManyToManyExtraLazyEntity', 'Doctrine\Tests\Models\ValueConversionType\OwningManyToManyExtraLazyEntity' ), + 'geonames' => array( + 'Doctrine\Tests\Models\GeoNames\Country', + 'Doctrine\Tests\Models\GeoNames\Admin1', + 'Doctrine\Tests\Models\GeoNames\Admin1AlternateName', + 'Doctrine\Tests\Models\GeoNames\City' + ) ); /** @@ -483,6 +489,12 @@ abstract class OrmFunctionalTestCase extends OrmTestCase $conn->executeUpdate('DELETE FROM vct_owning_manytomany_extralazy'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany_extralazy'); } + if (isset($this->_usedModelSets['geonames'])) { + $conn->executeUpdate('DELETE FROM geonames_admin1_alternate_name'); + $conn->executeUpdate('DELETE FROM geonames_admin1'); + $conn->executeUpdate('DELETE FROM geonames_city'); + $conn->executeUpdate('DELETE FROM geonames_country'); + } $this->_em->clear(); } @@ -623,7 +635,8 @@ abstract class OrmFunctionalTestCase extends OrmTestCase } $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(array( - realpath(__DIR__ . '/Models/Cache') + realpath(__DIR__ . '/Models/Cache'), + realpath(__DIR__ . '/Models/GeoNames') ), true)); $conn = static::$_sharedConn;