--- /dev/null
+<?php
+
+namespace Doctrine\Tests\ORM\Functional;
+
+use Doctrine\ORM\Event\PreUpdateEventArgs;
+
+require_once __DIR__ . '/../../TestInit.php';
+
+class PostgreSQLIdentityStrategyTest extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+ protected function setUp() {
+ parent::setUp();
+ if ($this->_em->getConnection()->getDatabasePlatform()->getName() != 'postgresql') {
+ $this->markTestSkipped('This test is special to the PostgreSQL IDENTITY key generation strategy.');
+ } else {
+ try {
+ $this->_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\PostgreSQLIdentityEntity'),
+ ));
+ } catch (\Exception $e) {
+ // Swallow all exceptions. We do not test the schema tool here.
+ }
+ }
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+ // drop sequence manually due to dependency
+ $this->_em->getConnection()->exec('DROP SEQUENCE postgresqlidentityentity_id_seq CASCADE');
+ }
+
+ public function testPreSavePostSaveCallbacksAreInvoked()
+ {
+ $entity = new PostgreSQLIdentityEntity();
+ $entity->setValue('hello');
+ $this->_em->persist($entity);
+ $this->_em->flush();
+ $this->assertTrue(is_numeric($entity->getId()));
+ $this->assertTrue($entity->getId() > 0);
+ $this->assertTrue($this->_em->contains($entity));
+ }
+}
+
+/** @Entity */
+class PostgreSQLIdentityEntity {
+ /** @Id @Column(type="integer") @GeneratedValue(strategy="IDENTITY") */
+ private $id;
+ /** @Column(type="string") */
+ private $value;
+ public function getId() {return $this->id;}
+ public function getValue() {return $this->value;}
+ public function setValue($value) {$this->value = $value;}
+}