DatabaseSyncCommandTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace Test\PhpDevCommunity\PaperORM;
  3. use PhpDevCommunity\Console\CommandParser;
  4. use PhpDevCommunity\Console\CommandRunner;
  5. use PhpDevCommunity\Console\Output;
  6. use PhpDevCommunity\PaperORM\Collector\EntityDirCollector;
  7. use PhpDevCommunity\PaperORM\Command\DatabaseSyncCommand;
  8. use PhpDevCommunity\PaperORM\Command\ShowTablesCommand;
  9. use PhpDevCommunity\PaperORM\EntityManager;
  10. use PhpDevCommunity\PaperORM\Mapping\Column\BoolColumn;
  11. use PhpDevCommunity\PaperORM\Mapping\Column\IntColumn;
  12. use PhpDevCommunity\PaperORM\Mapping\Column\JoinColumn;
  13. use PhpDevCommunity\PaperORM\Mapping\Column\PrimaryKeyColumn;
  14. use PhpDevCommunity\PaperORM\Mapping\Column\StringColumn;
  15. use PhpDevCommunity\PaperORM\Migration\PaperMigration;
  16. use PhpDevCommunity\PaperORM\PaperConfiguration;
  17. use PhpDevCommunity\UniTester\TestCase;
  18. use Test\PhpDevCommunity\PaperORM\Entity\UserTest;
  19. use Test\PhpDevCommunity\PaperORM\Helper\DataBaseHelperTest;
  20. class DatabaseSyncCommandTest extends TestCase
  21. {
  22. protected function setUp(): void
  23. {
  24. }
  25. protected function tearDown(): void
  26. {
  27. }
  28. protected function execute(): void
  29. {
  30. foreach (DataBaseHelperTest::drivers() as $params) {
  31. $em = EntityManager::createFromConfig(PaperConfiguration::fromArray($params));
  32. $this->executeTest($em);
  33. $em->getConnection()->close();
  34. }
  35. }
  36. private function executeTest(EntityManager $em)
  37. {
  38. $platform = $em->getPlatform();
  39. $platform->createDatabaseIfNotExists();
  40. $platform->dropDatabase();
  41. $platform->createDatabaseIfNotExists();
  42. $paperMigration = PaperMigration::create($em, 'mig_versions', __DIR__ . '/migrations');
  43. $runner = new CommandRunner([
  44. new DatabaseSyncCommand($paperMigration, EntityDirCollector::bootstrap([__DIR__ . '/Entity']), 'test'),
  45. ]);
  46. $out = [];
  47. $code = $runner->run(new CommandParser(['', 'paper:database:sync', '--no-execute']), new Output(function ($message) use(&$out) {
  48. $out[] = $message;
  49. }));
  50. $this->assertEquals(0, $code);
  51. $this->assertStringContains( implode(' ', $out), "[INFO] Preview mode only — SQL statements were displayed but NOT executed.");
  52. $out = [];
  53. $code = $runner->run(new CommandParser(['', 'paper:database:sync']), new Output(function ($message) use(&$out) {
  54. $out[] = $message;
  55. }));
  56. $this->assertEquals(0, $code);
  57. $this->assertStringContains( implode(' ', $out), "✔ Executed:");
  58. $out = [];
  59. $code = $runner->run(new CommandParser(['', 'paper:database:sync']), new Output(function ($message) use(&$out) {
  60. $out[] = $message;
  61. }));
  62. $this->assertEquals(0, $code);
  63. $this->assertStringContains( implode(' ', $out), "No differences detected — all entities are already in sync with the database schema.");
  64. $platform->dropDatabase();
  65. }
  66. }