PlatformTest.php 6.0 KB

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