PlatformDiffTest.php 2.5 KB

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