DatabaseSchemaBuilderTest.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Illuminate\Tests\Database;
  3. use Illuminate\Database\Connection;
  4. use Illuminate\Database\Schema\Builder;
  5. use LogicException;
  6. use Mockery as m;
  7. use PHPUnit\Framework\TestCase;
  8. use stdClass;
  9. class DatabaseSchemaBuilderTest extends TestCase
  10. {
  11. protected function tearDown(): void
  12. {
  13. m::close();
  14. }
  15. public function testCreateDatabase()
  16. {
  17. $connection = m::mock(Connection::class);
  18. $grammar = m::mock(stdClass::class);
  19. $connection->shouldReceive('getSchemaGrammar')->andReturn($grammar);
  20. $builder = new Builder($connection);
  21. $this->expectException(LogicException::class);
  22. $this->expectExceptionMessage('This database driver does not support creating databases.');
  23. $builder->createDatabase('foo');
  24. }
  25. public function testDropDatabaseIfExists()
  26. {
  27. $connection = m::mock(Connection::class);
  28. $grammar = m::mock(stdClass::class);
  29. $connection->shouldReceive('getSchemaGrammar')->andReturn($grammar);
  30. $builder = new Builder($connection);
  31. $this->expectException(LogicException::class);
  32. $this->expectExceptionMessage('This database driver does not support dropping databases.');
  33. $builder->dropDatabaseIfExists('foo');
  34. }
  35. public function testHasTableCorrectlyCallsGrammar()
  36. {
  37. $connection = m::mock(Connection::class);
  38. $grammar = m::mock(stdClass::class);
  39. $connection->shouldReceive('getSchemaGrammar')->andReturn($grammar);
  40. $builder = new Builder($connection);
  41. $grammar->shouldReceive('compileTableExists')->once()->andReturn('sql');
  42. $connection->shouldReceive('getTablePrefix')->once()->andReturn('prefix_');
  43. $connection->shouldReceive('selectFromWriteConnection')->once()->with('sql', ['prefix_table'])->andReturn(['prefix_table']);
  44. $this->assertTrue($builder->hasTable('table'));
  45. }
  46. public function testTableHasColumns()
  47. {
  48. $connection = m::mock(Connection::class);
  49. $grammar = m::mock(stdClass::class);
  50. $connection->shouldReceive('getSchemaGrammar')->andReturn($grammar);
  51. $builder = m::mock(Builder::class.'[getColumnListing]', [$connection]);
  52. $builder->shouldReceive('getColumnListing')->with('users')->twice()->andReturn(['id', 'firstname']);
  53. $this->assertTrue($builder->hasColumns('users', ['id', 'firstname']));
  54. $this->assertFalse($builder->hasColumns('users', ['id', 'address']));
  55. }
  56. public function testGetColumnTypeAddsPrefix()
  57. {
  58. $connection = m::mock(Connection::class);
  59. $column = m::mock(stdClass::class);
  60. $type = m::mock(stdClass::class);
  61. $grammar = m::mock(stdClass::class);
  62. $connection->shouldReceive('getSchemaGrammar')->once()->andReturn($grammar);
  63. $builder = new Builder($connection);
  64. $connection->shouldReceive('getTablePrefix')->once()->andReturn('prefix_');
  65. $connection->shouldReceive('getDoctrineColumn')->once()->with('prefix_users', 'id')->andReturn($column);
  66. $column->shouldReceive('getType')->once()->andReturn($type);
  67. $type->shouldReceive('getName')->once()->andReturn('integer');
  68. $this->assertSame('integer', $builder->getColumnType('users', 'id'));
  69. }
  70. }