PlatformDiffTest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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\PrimaryKeyColumn;
  6. use PhpDevCommunity\PaperORM\Mapping\Column\StringColumn;
  7. use PhpDevCommunity\UniTester\TestCase;
  8. use Test\PhpDevCommunity\PaperORM\Helper\DataBaseHelperTest;
  9. class PlatformDiffTest extends TestCase
  10. {
  11. protected function setUp(): void
  12. {
  13. }
  14. protected function tearDown(): void
  15. {
  16. }
  17. protected function execute(): void
  18. {
  19. foreach (DataBaseHelperTest::drivers() as $params) {
  20. $em = new EntityManager($params);
  21. $this->executeTest($em);
  22. $em->getConnection()->close();
  23. }
  24. }
  25. private function executeTest(EntityManager $em)
  26. {
  27. $platform = $em->createDatabasePlatform();
  28. $platform->createDatabaseIfNotExists();
  29. $platform->dropDatabase();
  30. $platform->createDatabaseIfNotExists();
  31. $columns = [
  32. new PrimaryKeyColumn('id'),
  33. new StringColumn('firstname'),
  34. new StringColumn('lastname'),
  35. new StringColumn('email'),
  36. new StringColumn('password'),
  37. (new BoolColumn('is_active'))->bindProperty('active'),
  38. ];
  39. $platform->createTable('user', $columns);
  40. $diff = $platform->diff('user', $columns, [] );
  41. $this->assertEmpty($diff->getColumnsToAdd());
  42. $this->assertEmpty($diff->getColumnsToUpdate());
  43. $this->assertEmpty($diff->getColumnsToDelete());
  44. $columns[3] = new StringColumn('username');
  45. $diff = $platform->diff('user', $columns, [] );
  46. $this->assertTrue(count($diff->getColumnsToAdd()) == 1);
  47. $this->assertTrue(count($diff->getColumnsToDelete()) == 1);
  48. $this->assertEmpty($diff->getColumnsToUpdate());
  49. $platform->dropTable('user');
  50. $platform->createTable('user', $columns, [] );
  51. $columns[3] = new StringColumn( 'username', 100);
  52. $diff = $platform->diff('user', $columns, [] );
  53. $this->assertTrue(count($diff->getColumnsToUpdate()) == 1);
  54. $this->assertEmpty($diff->getColumnsToAdd());
  55. $this->assertEmpty($diff->getColumnsToDelete());
  56. $diff = $platform->diff('user2', $columns, [] );
  57. $this->assertTrue(count($diff->getColumnsToAdd()) == 6);
  58. }
  59. }