Skip to content

Commit

Permalink
some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
pvsaintpe committed Jul 24, 2019
1 parent 5ca5c16 commit 70db5fc
Show file tree
Hide file tree
Showing 18 changed files with 258 additions and 167 deletions.
4 changes: 2 additions & 2 deletions src/Doctrine/RangeExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public static function getName(): string

public static function getTypes(): array
{
return [
return array_merge(parent::getTypes(), [
TsRangeType::TYPE_NAME => TsRangeType::class,
];
]);
}
}
4 changes: 2 additions & 2 deletions src/Doctrine/VectorExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public static function getName(): string

public static function getTypes(): array
{
return [
return array_merge(parent::getTypes(), [
TsVectorType::TYPE_NAME => TsVectorType::class,
];
]);
}
}
3 changes: 0 additions & 3 deletions src/Extensions/AbstractComponent.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@

namespace Umbrellio\Postgres\Extensions;

/**
* @codeCoverageIgnore
*/
abstract class AbstractComponent
{
final public function __construct()
Expand Down
3 changes: 0 additions & 3 deletions src/Extensions/AbstractExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
use Umbrellio\Postgres\Extensions\Exceptions\MacroableMissedException;
use Umbrellio\Postgres\Extensions\Exceptions\MixinInvalidException;

/**
* @codeCoverageIgnore
*/
abstract class AbstractExtension extends AbstractComponent
{
abstract public static function getMixins(): array;
Expand Down
72 changes: 72 additions & 0 deletions tests/Functional/Helpers/ColumnAssertions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

declare(strict_types=1);

namespace Umbrellio\Postgres\Tests\Functional\Helpers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use PHPUnit\Framework\TestCase;

/**
* @mixin TestCase
*/
trait ColumnAssertions
{
protected function assertCommentOnColumn(string $table, string $column, ?string $expected = null): void
{
$comment = $this->getCommentListing($table, $column);

if ($expected === null) {
$this->assertNull($comment);
}

$this->assertSame($expected, $comment);
}

protected function assertDefaultOnColumn(string $table, string $column, ?string $expected = null): void
{
$defaultValue = $this->getDefaultListing($table, $column);

if ($expected === null) {
$this->assertNull($defaultValue);
}

$this->assertSame($expected, $defaultValue);
}

protected function assertTypeColumn(string $table, string $column, string $expected): void
{
$this->assertSame($expected, Schema::getColumnType($table, $column));
}
private function getCommentListing(string $table, string $column)
{
$definition = DB::selectOne(
'
SELECT pgd.description
FROM pg_catalog.pg_statio_all_tables AS st
INNER JOIN pg_catalog.pg_description pgd ON (pgd.objoid = st.relid)
INNER JOIN information_schema.columns c ON pgd.objsubid = c.ordinal_position
AND c.table_schema = st.schemaname AND c.table_name = st.relname
WHERE c.table_name = ? AND c.column_name = ?
',
[$table, $column]
);

return $definition ? $definition->description : null;
}

private function getDefaultListing(string $table, string $column)
{
$definition = DB::selectOne(
'
SELECT column_default
FROM information_schema.columns c
WHERE c.table_name = ? and c.column_name = ?
',
[$table, $column]
);

return $definition ? $definition->column_default : null;
}
}
41 changes: 41 additions & 0 deletions tests/Functional/Helpers/IndexAssertions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Umbrellio\Postgres\Tests\Functional\Helpers;

use Illuminate\Support\Facades\DB;
use PHPUnit\Framework\TestCase;

/**
* @mixin TestCase
*/
trait IndexAssertions
{
protected function seeIndex(string $index): void
{
$this->assertNotNull($this->getIndexListing($index));
}

protected function assertSameIndex(string $index, string $expectedDef): void
{
$definition = $this->getIndexListing($index);

$this->seeIndex($index);
$this->assertSame($expectedDef, $definition);
}

protected function assertRegExpIndex(string $index, string $expectedDef): void
{
$definition = $this->getIndexListing($index);

$this->seeIndex($index);
$this->assertRegExp($expectedDef, $definition);
}
private function getIndexListing($index): ?string
{
$definition = DB::selectOne('SELECT indexdef FROM pg_indexes WHERE indexname = ?', [$index]);

return $definition ? $definition->indexdef : null;
}
}
36 changes: 36 additions & 0 deletions tests/Functional/Helpers/TableAssertions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

declare(strict_types=1);

namespace Umbrellio\Postgres\Tests\Functional\Helpers;

use Illuminate\Support\Facades\Schema;
use PHPUnit\Framework\TestCase;

/**
* @mixin TestCase
*/
trait TableAssertions
{
protected function assertCompareTables(string $sourceTable, string $destinationTable): void
{
$this->assertSame($this->getTableDefinition($sourceTable), $this->getTableDefinition($destinationTable));
}

protected function assertSameTable(array $expectedDef, string $table): void
{
$definition = $this->getTableDefinition($table);

$this->assertSame($expectedDef, $definition);
}

protected function seeTable(string $table): void
{
$this->assertTrue(Schema::hasTable($table));
}

private function getTableDefinition(string $table): array
{
return Schema::getColumnListing($table);
}
}
10 changes: 5 additions & 5 deletions tests/Functional/Schema/AddColumnsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,29 @@
use Generator;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Schema;
use Umbrellio\Postgres\Doctrine\Types\TsRangeType;
use Umbrellio\Postgres\Schema\Blueprint;
use Umbrellio\Postgres\Tests\Functional\Helpers\ColumnAssertions;
use Umbrellio\Postgres\Tests\FunctionalTestCase;

class AddColumnsTest extends FunctionalTestCase
{
use DatabaseTransactions;
use DatabaseTransactions, ColumnAssertions;

/**
* @test
* @dataProvider provideRangeTypes
*/
public function addColumnRangeFormat(string $expectedFormat, Closure $callback): void
public function addColumnRangeFormat(string $type, Closure $callback): void
{
Schema::create('test_table', function (Blueprint $table) use ($callback) {
$callback($table, 'field_range');
});
$this->assertSame($expectedFormat, Schema::getColumnType('test_table', 'field_range'));
$this->assertTypeColumn('test_table', 'field_range', $type);
}

public function provideRangeTypes(): Generator
{
yield [TsRangeType::TYPE_NAME, function (Blueprint $table, string $column) {
yield ['tsrange', function (Blueprint $table, string $column) {
$table->tsRange($column);
}];
yield ['text', function (Blueprint $table, string $column) {
Expand Down
30 changes: 23 additions & 7 deletions tests/Functional/Schema/AlterColumnsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,26 @@
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Umbrellio\Postgres\Schema\Blueprint;
use Umbrellio\Postgres\Tests\Functional\Helpers\ColumnAssertions;
use Umbrellio\Postgres\Tests\FunctionalTestCase;

class AlterColumnsTest extends FunctionalTestCase
{
use DatabaseTransactions;
use DatabaseTransactions, ColumnAssertions;

/** @test */
public function alterTableSetSimpleComment(): void
{
Schema::create('test_table', function (Blueprint $table) {
$table->string('code')->default('1');
});

$this->assertDefaultOnColumn('test_table', 'code', "'1'::character varying");

Schema::table('test_table', function (Blueprint $table) {
$table->string('code')->comment('some comment')->change();
});

$this->assertCommentOnColumn('test_table', 'code', 'some comment');
$this->assertDefaultOnColumn('test_table', 'code', "'1'::character varying");
}
Expand All @@ -35,10 +39,13 @@ public function alterTableJsonSetComment(): void
Schema::create('test_table', function (Blueprint $table) {
$table->string('json_field');
});

$this->assertCommentOnColumn('test_table', 'json_field');

Schema::table('test_table', function (Blueprint $table) {
$table->json('json_field')->comment('(DC2Type:json_array)')->change();
});

$this->assertCommentOnColumn('test_table', 'json_field', '(DC2Type:json_array)');
}

Expand All @@ -48,11 +55,14 @@ public function alterTableSetDCComment(): void
Schema::create('test_table', function (Blueprint $table) {
$table->string('code')->default('1');
});

$this->assertDefaultOnColumn('test_table', 'code', "'1'::character varying");
$this->assertCommentOnColumn('test_table', 'code');

Schema::table('test_table', function (Blueprint $table) {
$table->string('code')->comment('(DC2Type:string)')->change();
});

$this->assertDefaultOnColumn('test_table', 'code', "'1'::character varying");
$this->assertCommentOnColumn('test_table', 'code', '(DC2Type:string)');
}
Expand All @@ -63,6 +73,7 @@ public function alterTableDropDCComment(): void
Schema::create('test_table', function (Blueprint $table) {
$table->integer('number')->comment('(DC2Type:integer)')->default(1);
});

$this->assertCommentOnColumn('test_table', 'number', '(DC2Type:integer)');

Schema::table('test_table', function (Blueprint $table) {
Expand All @@ -78,11 +89,13 @@ public function alterTableChangeSimpleComment(): void
Schema::create('test_table', function (Blueprint $table) {
$table->integer('number')->comment('(DC2Type:integer)')->default(1);
});

$this->assertDefaultOnColumn('test_table', 'number', '1');

Schema::table('test_table', function (Blueprint $table) {
$table->string('number')->comment('some comment')->change();
});

$this->assertCommentOnColumn('test_table', 'number', 'some comment');
$this->assertDefaultOnColumn('test_table', 'number', "'1'::character varying");
}
Expand All @@ -93,12 +106,14 @@ public function alterTableUsingByDefault(): void
Schema::create('test_table', function (Blueprint $table) {
$table->string('code')->default('1');
});

$this->assertDefaultOnColumn('test_table', 'code', "'1'::character varying");

Schema::table('test_table', function (Blueprint $table) {
$table->integer('code')->default(null)->change();
});

$this->assertSame('integer', Schema::getColumnType('test_table', 'code'));
$this->assertTypeColumn('test_table', 'code', 'integer');
$this->assertDefaultOnColumn('test_table', 'code');
}

Expand All @@ -113,8 +128,9 @@ public function alterTableUsingWithExpression(): void
$this->assertDefaultOnColumn('test_table', 'number', '1');

DB::table('test_table')->insert([['id' => 1]]);

$this->assertDatabaseHas('test_table', ['id' => 1]);
$this->assertSame('integer', Schema::getColumnType('test_table', 'number'));
$this->assertTypeColumn('test_table', 'number', 'integer');

Schema::table('test_table', function (Blueprint $table) {
$table->string('number')
Expand All @@ -123,7 +139,7 @@ public function alterTableUsingWithExpression(): void
});

$this->assertDefaultOnColumn('test_table', 'number', "'1'::character varying");
$this->assertSame('string', Schema::getColumnType('test_table', 'number'));
$this->assertTypeColumn('test_table', 'number', 'string');
$this->assertDatabaseHas('test_table', [
'id' => 1,
'number' => '[1]',
Expand All @@ -137,14 +153,14 @@ public function alterTableSetDefault(): void
$table->integer('code')->nullable();
});

$this->assertSame('integer', Schema::getColumnType('test_table', 'code'));
$this->assertTypeColumn('test_table', 'code', 'integer');
$this->assertDefaultOnColumn('test_table', 'code');

Schema::table('test_table', function (Blueprint $table) {
$table->string('code')->default('test_string')->change();
});

$this->assertSame('string', Schema::getColumnType('test_table', 'code'));
$this->assertTypeColumn('test_table', 'code', 'string');
$this->assertDefaultOnColumn('test_table', 'code', "'test_string'::character varying");
}

Expand All @@ -158,7 +174,7 @@ public function alterTableChangeDefault(): void
$this->assertDefaultOnColumn('test_table', 'description', "'default1'::character varying");

Schema::table('test_table', function (Blueprint $table) {
$table->text('description', 25)->default('default2')->change();
$table->text('description')->default('default2')->change();
});

$this->assertDefaultOnColumn('test_table', 'description', "'default2'::text");
Expand Down
Loading

0 comments on commit 70db5fc

Please sign in to comment.