ColumnSchemaAwareTypeTest.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. declare(strict_types=1);
  3. namespace Cake\Test\TestCase\Database;
  4. use Cake\Database\Driver\Mysql;
  5. use Cake\Database\Schema\TableSchema;
  6. use Cake\Database\TypeFactory;
  7. use Cake\Datasource\ConnectionManager;
  8. use Cake\TestSuite\TestCase;
  9. use TestApp\Database\Type\ColumnSchemaAwareType;
  10. class ColumnSchemaAwareTypeTest extends TestCase
  11. {
  12. /**
  13. * @var \Cake\Database\Connection
  14. */
  15. protected $connection;
  16. public function setUp(): void
  17. {
  18. parent::setUp();
  19. $this->connection = ConnectionManager::get('test');
  20. TypeFactory::map('columnSchemaAwareType', ColumnSchemaAwareType::class);
  21. }
  22. public function testColumnSql(): void
  23. {
  24. $dialect = $this->connection->getDriver()->schemaDialect();
  25. $schema = new TableSchema('table', [
  26. 'field' => [
  27. 'type' => 'columnSchemaAwareType',
  28. 'null' => false,
  29. 'comment' => 'Lorem ipsum',
  30. ],
  31. ]);
  32. $sql = $dialect->columnSql($schema, 'field');
  33. if ($this->connection->getDriver() instanceof Mysql) {
  34. $this->assertEqualsSql("field TEXT NOT NULL COMMENT 'Lorem ipsum (schema aware)'", $sql);
  35. } else {
  36. $this->assertEqualsSql('field TEXT NOT NULL', $sql);
  37. }
  38. }
  39. public function testColumnSqlForUnmappedType(): void
  40. {
  41. $map = TypeFactory::getMap();
  42. TypeFactory::clear();
  43. $dialect = $this->connection->getDriver()->schemaDialect();
  44. $schema = new TableSchema('table', [
  45. 'field' => [
  46. 'type' => 'time',
  47. 'null' => false,
  48. 'comment' => null,
  49. ],
  50. ]);
  51. $sql = $dialect->columnSql($schema, 'field');
  52. TypeFactory::setMap($map);
  53. $this->assertEqualsSql('field TIME NOT NULL', $sql);
  54. }
  55. }