11762 use doctrine for schema creation and update
[tine20] / tests / tine20 / Inventory / DoctrineModelTest.php
1 <?php
2 /**
3  * Tine 2.0 - http://www.tine20.org
4  * 
5  * @package     Inventory
6  * @subpackage  Record
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Cornelius WeiƟ <c.weiss@metaways.de>
10  */
11
12 use Doctrine\DBAL\Schema\Comparator;
13
14 /**
15  * Test class for Inventory_JsonTest
16  */
17 class Inventory_DoctrineModelTest extends Inventory_TestCase
18 {
19
20     protected function setUp()
21     {
22     }
23
24     public function testGetMetadataOfInventoryModel()
25     {
26         $em = Setup_SchemaTool::getEntityManager('Inventory', array('Inventory_Model_InventoryItem'));
27
28         $invItemMetadata = $em->getClassMetadata('Inventory_Model_InventoryItem');
29
30         $this->assertEquals('Doctrine\ORM\Mapping\ClassMetadata', get_class($invItemMetadata));
31         $this->assertTrue($invItemMetadata->hasField('name'));
32
33         $mapping = $invItemMetadata->getFieldMapping('name');
34         $this->assertEquals('string', $mapping['type']);
35     }
36
37     public function testExplicitRenameProblemExists()
38     {
39         $em = Setup_SchemaTool::getEntityManager('Inventory');
40         $sm = $em->getConnection()->getSchemaManager();
41
42         // NOTE: the DBAL schema is stateless and 'just' describes a schema in a plattform independend way
43         //       thus, all schema upgrade is based on schema comparisim
44         $fromSchema = $sm->createSchema();
45         $toSchema = clone $fromSchema;
46
47         $table = $toSchema->getTable('tine20_inventory_item');
48
49         $this->setExpectedException('Doctrine\DBAL\DBALException');
50         $table->renameColumn('id', 'ident');
51     }
52
53     public function testExplicitRename()
54     {
55         $this->markTestSkipped('evauate concept for explicit field rename with doctrine2 schema tool');
56         $em = Setup_SchemaTool::getEntityManager('Inventory');
57         $sm = $em->getConnection()->getSchemaManager();
58
59         // NOTE: the DBAL schema is stateless and 'just' describes a schema in a plattform independend way
60         //       thus, all schema upgrade is based on schema comparisim
61
62         $fromSchema = $sm->createSchema();
63         $toSchema = clone $fromSchema;
64
65         $table = $toSchema->getTable('tine20_inventory_item');
66
67
68         // workaround -> might have problems?!
69         $col = $table->getColumn('id');
70         $table->dropColumn('id');
71         $table->addColumn('ident', $col->getType()->getName(), $col->toArray());
72
73         // better create, copy, delete?
74         // @TODO ask some insider
75         //  ? Schema tool can't rename cols, but schema diff with compare (at least with mysql plattform) alters table name correctly when col is renamed in annotations
76
77         // non rename updates are a lot more easy
78         $table->changeColumn('name', array(
79             'length' => 200,
80         ));
81
82         $comparator = new Comparator();
83         $schemaDiff = $comparator->compare($fromSchema, $toSchema);
84
85         $updateSql = $schemaDiff->toSql($em->getConnection()->getDatabasePlatform());
86 //        print_r($updateSql);
87     }
88 }