2
0

PlatformTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace Test\PhpDevCommunity\PaperORM;
  3. use PhpDevCommunity\PaperORM\EntityManager;
  4. use PhpDevCommunity\PaperORM\Mapping\Column\BoolColumn;
  5. use PhpDevCommunity\PaperORM\Mapping\Column\IntColumn;
  6. use PhpDevCommunity\PaperORM\Mapping\Column\PrimaryKeyColumn;
  7. use PhpDevCommunity\PaperORM\Mapping\Column\StringColumn;
  8. use PhpDevCommunity\PaperORM\Metadata\ColumnMetadata;
  9. use PhpDevCommunity\UniTester\TestCase;
  10. use Test\PhpDevCommunity\PaperORM\Helper\DataBaseHelperTest;
  11. class PlatformTest extends TestCase
  12. {
  13. protected function setUp(): void
  14. {
  15. }
  16. protected function tearDown(): void
  17. {
  18. }
  19. protected function execute(): void
  20. {
  21. foreach (DataBaseHelperTest::drivers() as $params) {
  22. $em = new EntityManager($params);
  23. $this->testCreateTables($em);
  24. $this->testDropTable($em);
  25. $this->testDropColumn($em);
  26. $this->testAddColumn($em);
  27. $this->testRenameColumn($em);
  28. $em->getConnection()->close();
  29. }
  30. }
  31. public function testCreateTables(EntityManager $em)
  32. {
  33. $em->getConnection()->close();
  34. $em->getConnection()->connect();
  35. $platform = $em->getPlatform();
  36. $platform->createDatabaseIfNotExists();
  37. $platform->dropDatabase();
  38. $platform->createDatabaseIfNotExists();
  39. $platform->createTable('user', [
  40. new PrimaryKeyColumn('id'),
  41. new StringColumn('firstname'),
  42. new StringColumn('lastname'),
  43. new StringColumn('email'),
  44. new StringColumn('password'),
  45. new BoolColumn('is_active'),
  46. ]);
  47. $platform->createTable('post', [
  48. new PrimaryKeyColumn('id'),
  49. new IntColumn('user_id'),
  50. new StringColumn('title'),
  51. new StringColumn('content'),
  52. ]);
  53. $this->assertStrictEquals(2, count($platform->listTables()));
  54. $this->assertEquals(['user', 'post'], $platform->listTables());
  55. }
  56. public function testDropTable(EntityManager $em)
  57. {
  58. $em->getConnection()->close();
  59. $em->getConnection()->connect();
  60. $platform = $em->getPlatform();
  61. $platform->createDatabaseIfNotExists();
  62. $platform->dropDatabase();
  63. $platform->createDatabaseIfNotExists();
  64. $platform = $em->getPlatform();
  65. $platform->createTable('user', [
  66. new PrimaryKeyColumn('id'),
  67. new StringColumn('firstname'),
  68. new StringColumn('lastname'),
  69. new StringColumn('email'),
  70. new StringColumn('password'),
  71. new BoolColumn('is_active'),
  72. ]);
  73. $this->assertStrictEquals(1, count($platform->listTables()));
  74. $platform->dropTable('user');
  75. $this->assertStrictEquals(0, count($platform->listTables()));
  76. }
  77. public function testDropColumn(EntityManager $em)
  78. {
  79. $platform = $em->getPlatform();
  80. if ($platform->getSchema()->supportsDropColumn() === false) {
  81. return;
  82. }
  83. $em->getConnection()->close();
  84. $em->getConnection()->connect();
  85. $platform = $em->getPlatform();
  86. $platform->createDatabaseIfNotExists();
  87. $platform->dropDatabase();
  88. $platform->createDatabaseIfNotExists();
  89. $platform->createTable('user', [
  90. new PrimaryKeyColumn('id'),
  91. new StringColumn('firstname'),
  92. new StringColumn('lastname'),
  93. new StringColumn('email'),
  94. new StringColumn('password'),
  95. new BoolColumn('is_active'),
  96. ]);
  97. $this->assertStrictEquals(6, count($platform->listTableColumns('user')));
  98. $platform->dropColumn('user', new StringColumn('lastname'));
  99. $this->assertStrictEquals(5, count($platform->listTableColumns('user')));
  100. }
  101. public function testAddColumn(EntityManager $em)
  102. {
  103. $em->getConnection()->close();
  104. $em->getConnection()->connect();
  105. $platform = $em->getPlatform();
  106. $platform->createDatabaseIfNotExists();
  107. $platform->dropDatabase();
  108. $platform->createDatabaseIfNotExists();
  109. $platform = $em->getPlatform();
  110. $platform->createTable('user', [
  111. new PrimaryKeyColumn('id'),
  112. new StringColumn('firstname'),
  113. new StringColumn('lastname'),
  114. new StringColumn('email'),
  115. new StringColumn('password'),
  116. new BoolColumn('is_active'),
  117. ]);
  118. $this->assertStrictEquals(6, count($platform->listTableColumns('user')));
  119. $platform->addColumn('user', new StringColumn('username'));
  120. $this->assertStrictEquals(7, count($platform->listTableColumns('user')));
  121. }
  122. public function testRenameColumn(EntityManager $em)
  123. {
  124. $em->getConnection()->close();
  125. $em->getConnection()->connect();
  126. $platform = $em->getPlatform();
  127. $platform->createDatabaseIfNotExists();
  128. $platform->dropDatabase();
  129. $platform->createDatabaseIfNotExists();
  130. $platform = $em->getPlatform();
  131. $platform->createTable('user', [
  132. new PrimaryKeyColumn('id'),
  133. new StringColumn('firstname'),
  134. new StringColumn('lastname'),
  135. new StringColumn('email'),
  136. new StringColumn('password'),
  137. new BoolColumn('is_active'),
  138. ]);
  139. $columnsAsArray = array_map(function (ColumnMetadata $column) {
  140. return $column->toArray();
  141. }, $platform->listTableColumns('user'));
  142. $columns = array_column($columnsAsArray, 'name');
  143. $this->assertTrue(in_array('firstname', $columns));
  144. $platform->renameColumn('user', 'firstname', 'prenom');
  145. $columnsAsArray = array_map(function (ColumnMetadata $column) {
  146. return $column->toArray();
  147. }, $platform->listTableColumns('user'));
  148. $columns = array_column($columnsAsArray, 'name');
  149. $this->assertTrue(!in_array('firstname', $columns));
  150. $this->assertTrue(in_array('prenom', $columns));
  151. }
  152. }