From 43bde20ff741ef16bd19238b861a8d50161ff6a1 Mon Sep 17 00:00:00 2001 From: Artyom Osepyan Date: Thu, 30 Oct 2025 15:16:23 +0300 Subject: [PATCH 1/5] fix: seeder generation logic Refs: https://github.com/RonasIT/laravel-entity-generator/issues/221 --- ReadMe.md | 1 - src/Generators/SeederGenerator.php | 4 ++- tests/SeederGeneratorTest.php | 23 +++++++++++++++-- .../Seeder/SeederGeneratorMockTrait.php | 25 +++++++++++++++++++ ...seeder.php => database_seeder_created.php} | 0 .../database_seeder_existing.php | 18 +++++++++++++ .../database_seeder_modified.php | 19 ++++++++++++++ 7 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 tests/Support/Seeder/SeederGeneratorMockTrait.php rename tests/fixtures/SeederGeneratorTest/{database_seeder.php => database_seeder_created.php} (100%) create mode 100644 tests/fixtures/SeederGeneratorTest/database_seeder_existing.php create mode 100644 tests/fixtures/SeederGeneratorTest/database_seeder_modified.php diff --git a/ReadMe.md b/ReadMe.md index 9bc4f0ed..4aca2714 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -152,7 +152,6 @@ Since 1.3 version you need to add to your config/entity-generator.php following ```php 'paths' => [ ... // your old data - 'seeds' => 'database/seeds', 'database_seeder' => 'database/seeds/DatabaseSeeder.php', 'translations' => 'lang/en/validation.php' ], diff --git a/src/Generators/SeederGenerator.php b/src/Generators/SeederGenerator.php index c4c1d7fd..dd504b84 100644 --- a/src/Generators/SeederGenerator.php +++ b/src/Generators/SeederGenerator.php @@ -26,7 +26,9 @@ public function generate(): void $this->createNamespace('seeders'); - $this->createDatabaseSeeder(); + if (!file_exists($this->databaseSeederPath)) { + $this->createDatabaseSeeder(); + } $this->createEntitySeeder(); diff --git a/tests/SeederGeneratorTest.php b/tests/SeederGeneratorTest.php index 1d8be0e7..bc19e500 100644 --- a/tests/SeederGeneratorTest.php +++ b/tests/SeederGeneratorTest.php @@ -5,11 +5,30 @@ use RonasIT\Support\DTO\RelationsDTO; use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Generators\SeederGenerator; +use RonasIT\Support\Tests\Support\Seeder\SeederGeneratorMockTrait; class SeederGeneratorTest extends TestCase { - public function testCreateSeeder() + use SeederGeneratorMockTrait; + + public function testCreateSeedersWhenDatabaseSeederDoesNotExist() + { + app(SeederGenerator::class) + ->setRelations(new RelationsDTO( + hasMany: ['Comment'], + belongsTo: ['User'], + )) + ->setModel('Post') + ->generate(); + + $this->assertGeneratedFileEquals('database_seeder_created.php', 'database/seeders/DatabaseSeeder.php'); + $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); + } + + public function testCreateSeederWhenDatabaseSeederExists() { + $this->mockFilesystem(); + app(SeederGenerator::class) ->setRelations(new RelationsDTO( hasMany: ['Comment'], @@ -18,7 +37,7 @@ public function testCreateSeeder() ->setModel('Post') ->generate(); - $this->assertGeneratedFileEquals('database_seeder.php', 'database/seeders/DatabaseSeeder.php'); + $this->assertGeneratedFileEquals('database_seeder_modified.php', 'database/seeders/DatabaseSeeder.php'); $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); } diff --git a/tests/Support/Seeder/SeederGeneratorMockTrait.php b/tests/Support/Seeder/SeederGeneratorMockTrait.php new file mode 100644 index 00000000..26ae55ba --- /dev/null +++ b/tests/Support/Seeder/SeederGeneratorMockTrait.php @@ -0,0 +1,25 @@ + [ + 'seeders' => [], + ], + ]; + + $root = vfsStream::setup('root', null, $structure); + + $databaseSeederContent = file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php'); + + vfsStream::newFile('database/seeders/DatabaseSeeder.php') + ->at($root) + ->setContent($databaseSeederContent); + } +} diff --git a/tests/fixtures/SeederGeneratorTest/database_seeder.php b/tests/fixtures/SeederGeneratorTest/database_seeder_created.php similarity index 100% rename from tests/fixtures/SeederGeneratorTest/database_seeder.php rename to tests/fixtures/SeederGeneratorTest/database_seeder_created.php diff --git a/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php b/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php new file mode 100644 index 00000000..15794a4e --- /dev/null +++ b/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php @@ -0,0 +1,18 @@ +call(AuthorSeeder::class); + } +} diff --git a/tests/fixtures/SeederGeneratorTest/database_seeder_modified.php b/tests/fixtures/SeederGeneratorTest/database_seeder_modified.php new file mode 100644 index 00000000..f4a4b71d --- /dev/null +++ b/tests/fixtures/SeederGeneratorTest/database_seeder_modified.php @@ -0,0 +1,19 @@ +call(AuthorSeeder::class); + $this->call(PostSeeder::class); + } +} From 2ed9b65f017706da6ff1e2cce4e4a7baa8836dad Mon Sep 17 00:00:00 2001 From: Anton Zabolotnikov <110885041+AZabolotnikov@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:43:49 +0500 Subject: [PATCH 2/5] Apply suggestion from @AZabolotnikov --- tests/SeederGeneratorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SeederGeneratorTest.php b/tests/SeederGeneratorTest.php index bc19e500..6452581e 100644 --- a/tests/SeederGeneratorTest.php +++ b/tests/SeederGeneratorTest.php @@ -11,7 +11,7 @@ class SeederGeneratorTest extends TestCase { use SeederGeneratorMockTrait; - public function testCreateSeedersWhenDatabaseSeederDoesNotExist() + public function testCreateSeeder() { app(SeederGenerator::class) ->setRelations(new RelationsDTO( From 4899ed8b588d619b45f4c4f58245ebef6f77aacd Mon Sep 17 00:00:00 2001 From: Anton Zabolotnikov <110885041+AZabolotnikov@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:47:06 +0500 Subject: [PATCH 3/5] Apply suggestion from @AZabolotnikov --- tests/SeederGeneratorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SeederGeneratorTest.php b/tests/SeederGeneratorTest.php index 6452581e..eb2722d7 100644 --- a/tests/SeederGeneratorTest.php +++ b/tests/SeederGeneratorTest.php @@ -25,7 +25,7 @@ public function testCreateSeeder() $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); } - public function testCreateSeederWhenDatabaseSeederExists() + public function testCreateSeederDatabaseSeederExists() { $this->mockFilesystem(); From a8f0bba8411912ae4e2e861bce37c5667f9f1860 Mon Sep 17 00:00:00 2001 From: Artyom Osepyan Date: Tue, 4 Nov 2025 15:22:09 +0300 Subject: [PATCH 4/5] fix: remarks from reviewer --- tests/Support/Seeder/SeederGeneratorMockTrait.php | 2 +- ...database_seeder_existing.php => existed_database_seeder.php} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename tests/fixtures/SeederGeneratorTest/{database_seeder_existing.php => existed_database_seeder.php} (100%) diff --git a/tests/Support/Seeder/SeederGeneratorMockTrait.php b/tests/Support/Seeder/SeederGeneratorMockTrait.php index a0a918ac..802d60d7 100644 --- a/tests/Support/Seeder/SeederGeneratorMockTrait.php +++ b/tests/Support/Seeder/SeederGeneratorMockTrait.php @@ -19,7 +19,7 @@ public function mockFilesystem(): void $root = vfsStream::setup('root', null, $structure); - $databaseSeederContent = file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php'); + $databaseSeederContent = file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php'); vfsStream::newFile('database/seeders/DatabaseSeeder.php') ->at($root) diff --git a/tests/fixtures/SeederGeneratorTest/database_seeder_existing.php b/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php similarity index 100% rename from tests/fixtures/SeederGeneratorTest/database_seeder_existing.php rename to tests/fixtures/SeederGeneratorTest/existed_database_seeder.php From 1aa69c0b8f3900076d44f53bffe74aabc5adaa33 Mon Sep 17 00:00:00 2001 From: Artyom Osepyan Date: Mon, 10 Nov 2025 14:56:30 +0300 Subject: [PATCH 5/5] fix: remarks from reviewer --- tests/Support/FileSystemMock.php | 9 +++++++++ .../Support/Seeder/SeederGeneratorMockTrait.php | 17 +++++------------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/tests/Support/FileSystemMock.php b/tests/Support/FileSystemMock.php index 11c84f27..134a5e54 100644 --- a/tests/Support/FileSystemMock.php +++ b/tests/Support/FileSystemMock.php @@ -19,6 +19,7 @@ class FileSystemMock public ?array $factories = null; public ?array $translations = null; public ?array $config = null; + public ?array $seeders = null; public function setStructure(): void { @@ -124,6 +125,14 @@ public function setStructure(): void } } + if (!is_null($this->seeders)) { + $structure['database']['seeders'] = []; + + foreach ($this->seeders as $seeder => $content) { + $structure['database']['seeders'][$seeder] = $content; + } + } + vfsStream::create($structure); } } diff --git a/tests/Support/Seeder/SeederGeneratorMockTrait.php b/tests/Support/Seeder/SeederGeneratorMockTrait.php index 802d60d7..83f29196 100644 --- a/tests/Support/Seeder/SeederGeneratorMockTrait.php +++ b/tests/Support/Seeder/SeederGeneratorMockTrait.php @@ -2,7 +2,7 @@ namespace RonasIT\Support\Tests\Support\Seeder; -use org\bovigo\vfs\vfsStream; +use RonasIT\Support\Tests\Support\FileSystemMock; use RonasIT\Support\Tests\Support\GeneratorMockTrait; trait SeederGeneratorMockTrait @@ -11,18 +11,11 @@ trait SeederGeneratorMockTrait public function mockFilesystem(): void { - $structure = [ - 'database' => [ - 'seeders' => [], - ], + $fileSystemMock = new FileSystemMock(); + $fileSystemMock->seeders = [ + 'DatabaseSeeder.php' => file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php'), ]; - $root = vfsStream::setup('root', null, $structure); - - $databaseSeederContent = file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php'); - - vfsStream::newFile('database/seeders/DatabaseSeeder.php') - ->at($root) - ->setContent($databaseSeederContent); + $fileSystemMock->setStructure(); } }