From eab25ae84c35d00e08132994e8a669b7a508fe64 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 19:31:20 +0100 Subject: [PATCH 1/7] add factory definition for morphs --- src/Generators/FactoryGenerator.php | 3 +++ tests/fixtures/definitions/phone.bp | 1 + tests/fixtures/factories/phone.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/Generators/FactoryGenerator.php b/src/Generators/FactoryGenerator.php index 0bf65382..85f5b12b 100644 --- a/src/Generators/FactoryGenerator.php +++ b/src/Generators/FactoryGenerator.php @@ -106,6 +106,9 @@ protected function buildDefinition(Model $model) } elseif ($column->dataType() === 'json') { $default = $column->defaultValue() ?? "'{}'"; $definition .= self::INDENT . "'{$column->name()}' => {$default}," . PHP_EOL; + } elseif ($column->dataType() === 'morphs') { + $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_id'", self::fakerDataType('id'), PHP_EOL); + $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_type'", self::fakerDataType('string'), PHP_EOL); } else { $definition .= self::INDENT . "'{$column->name()}' => "; $faker = self::fakerData($column->name()) ?? self::fakerDataType($column->dataType()); diff --git a/tests/fixtures/definitions/phone.bp b/tests/fixtures/definitions/phone.bp index 615761b7..8a9dff82 100644 --- a/tests/fixtures/definitions/phone.bp +++ b/tests/fixtures/definitions/phone.bp @@ -5,3 +5,4 @@ models: phone_number: text type: enum:home,cell status: set:archived,deleted + foo: morphs \ No newline at end of file diff --git a/tests/fixtures/factories/phone.php b/tests/fixtures/factories/phone.php index a32378ad..2fabb31e 100644 --- a/tests/fixtures/factories/phone.php +++ b/tests/fixtures/factories/phone.php @@ -12,5 +12,7 @@ 'phone_number' => $faker->phoneNumber, 'type' => $faker->randomElement(["home","cell"]), 'status' => $faker->randomElement(["archived","deleted"]), + 'foo_id' => $faker->randomDigitNotNull, + 'foo_type' => $faker->word, ]; }); From d228efaad0c1e4e41793c7d935aaa24eb7c5d176 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 19:43:31 +0100 Subject: [PATCH 2/7] isNullable helper method for Column Model --- src/Models/Column.php | 5 +++++ tests/Unit/Models/ColumnTest.php | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 tests/Unit/Models/ColumnTest.php diff --git a/src/Models/Column.php b/src/Models/Column.php index 802b3879..39e34928 100644 --- a/src/Models/Column.php +++ b/src/Models/Column.php @@ -45,4 +45,9 @@ public function defaultValue() return $key === 'default'; }); } + + public function isNullable() + { + return in_array('nullable', $this->modifiers); + } } diff --git a/tests/Unit/Models/ColumnTest.php b/tests/Unit/Models/ColumnTest.php new file mode 100644 index 00000000..f3766f83 --- /dev/null +++ b/tests/Unit/Models/ColumnTest.php @@ -0,0 +1,20 @@ +assertTrue((new Column('foo', 'string', ['nullable']))->isNullable()); + + $this->assertFalse((new Column('foo', 'string', []))->isNullable()); + $this->assertFalse((new Column('foo', 'string', ['something']))->isNullable()); + } +} \ No newline at end of file From c0961b737ad975f9cc4cd7c788b3fbfcc622a4a8 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 19:46:30 +0100 Subject: [PATCH 3/7] continue if morphs is nullable --- src/Generators/FactoryGenerator.php | 3 +++ tests/fixtures/definitions/phone.bp | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Generators/FactoryGenerator.php b/src/Generators/FactoryGenerator.php index 85f5b12b..b834ceb8 100644 --- a/src/Generators/FactoryGenerator.php +++ b/src/Generators/FactoryGenerator.php @@ -107,6 +107,9 @@ protected function buildDefinition(Model $model) $default = $column->defaultValue() ?? "'{}'"; $definition .= self::INDENT . "'{$column->name()}' => {$default}," . PHP_EOL; } elseif ($column->dataType() === 'morphs') { + if ($column->isNullable()) { + continue; + } $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_id'", self::fakerDataType('id'), PHP_EOL); $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_type'", self::fakerDataType('string'), PHP_EOL); } else { diff --git a/tests/fixtures/definitions/phone.bp b/tests/fixtures/definitions/phone.bp index 8a9dff82..ca351622 100644 --- a/tests/fixtures/definitions/phone.bp +++ b/tests/fixtures/definitions/phone.bp @@ -5,4 +5,5 @@ models: phone_number: text type: enum:home,cell status: set:archived,deleted - foo: morphs \ No newline at end of file + foo: morphs + nullable: morphs nullable \ No newline at end of file From 015369b4c7d8267ce744e4f863d4d3d2e9200fc4 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 20:04:29 +0100 Subject: [PATCH 4/7] remove double space --- src/Generators/FactoryGenerator.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Generators/FactoryGenerator.php b/src/Generators/FactoryGenerator.php index b834ceb8..8db8d052 100644 --- a/src/Generators/FactoryGenerator.php +++ b/src/Generators/FactoryGenerator.php @@ -2,10 +2,10 @@ namespace Blueprint\Generators; +use Blueprint\Contracts\Generator; +use Blueprint\Models\Column; use Blueprint\Models\Model; use Illuminate\Support\Str; -use Blueprint\Models\Column; -use Blueprint\Contracts\Generator; class FactoryGenerator implements Generator { @@ -110,8 +110,8 @@ protected function buildDefinition(Model $model) if ($column->isNullable()) { continue; } - $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_id'", self::fakerDataType('id'), PHP_EOL); - $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_type'", self::fakerDataType('string'), PHP_EOL); + $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_id'", self::fakerDataType('id'), PHP_EOL); + $definition .= sprintf('%s%s => $faker->%s,%s', self::INDENT, "'{$column->name()}_type'", self::fakerDataType('string'), PHP_EOL); } else { $definition .= self::INDENT . "'{$column->name()}' => "; $faker = self::fakerData($column->name()) ?? self::fakerDataType($column->dataType()); From e6a066a332c9f20afbb4b5b0f77e8e6f22cfa1fa Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 20:05:59 +0100 Subject: [PATCH 5/7] remove empty lines --- tests/Unit/Models/ColumnTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/Unit/Models/ColumnTest.php b/tests/Unit/Models/ColumnTest.php index f3766f83..58c5ed97 100644 --- a/tests/Unit/Models/ColumnTest.php +++ b/tests/Unit/Models/ColumnTest.php @@ -2,8 +2,6 @@ namespace Tests\Unit\Models; - - use Blueprint\Models\Column; use PHPUnit\Framework\TestCase; @@ -17,4 +15,4 @@ public function it_knows_if_its_nullable() $this->assertFalse((new Column('foo', 'string', []))->isNullable()); $this->assertFalse((new Column('foo', 'string', ['something']))->isNullable()); } -} \ No newline at end of file +} From 5927f5fa9ad5291bac9d5ff30ce28290d36dda46 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 21:49:20 +0100 Subject: [PATCH 6/7] change it to bar --- tests/fixtures/definitions/phone.bp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/definitions/phone.bp b/tests/fixtures/definitions/phone.bp index ca351622..3970b0b7 100644 --- a/tests/fixtures/definitions/phone.bp +++ b/tests/fixtures/definitions/phone.bp @@ -6,4 +6,4 @@ models: type: enum:home,cell status: set:archived,deleted foo: morphs - nullable: morphs nullable \ No newline at end of file + bar: morphs nullable \ No newline at end of file From 4ce483b6106ebb274d59345facc5f90ac27c1901 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 19 Apr 2020 21:52:46 +0100 Subject: [PATCH 7/7] use isNullable method --- src/Generators/MigrationGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Generators/MigrationGenerator.php b/src/Generators/MigrationGenerator.php index 340d109b..1756a9db 100644 --- a/src/Generators/MigrationGenerator.php +++ b/src/Generators/MigrationGenerator.php @@ -111,7 +111,7 @@ protected function buildDefinition(Model $model) $dataType = 'unsigned' . ucfirst($dataType); } - if (in_array($dataType, self::NULLABLE_TYPES) && in_array('nullable', $column->modifiers())) { + if (in_array($dataType, self::NULLABLE_TYPES) && $column->isNullable()) { $dataType = 'nullable' . ucfirst($dataType); }