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 86e72fd0..748f7f0c 100644 --- a/src/Generators/SeederGenerator.php +++ b/src/Generators/SeederGenerator.php @@ -28,7 +28,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 48b6b026..6d76c276 100644 --- a/tests/SeederGeneratorTest.php +++ b/tests/SeederGeneratorTest.php @@ -5,12 +5,12 @@ use RonasIT\Support\DTO\RelationsDTO; use RonasIT\Support\Events\WarningEvent; use RonasIT\Support\Generators\SeederGenerator; +use RonasIT\Support\Tests\Support\Seeder\SeederGeneratorMockTrait; use RonasIT\Support\Exceptions\ResourceAlreadyExistsException; -use RonasIT\Support\Tests\Support\Repository\RepositoryMockTrait; class SeederGeneratorTest extends TestCase { - use RepositoryMockTrait; + use SeederGeneratorMockTrait; public function testCreateSeeder() { @@ -22,7 +22,23 @@ public function testCreateSeeder() ->setModel('Post') ->generate(); - $this->assertGeneratedFileEquals('database_seeder.php', 'database/seeders/DatabaseSeeder.php'); + $this->assertGeneratedFileEquals('database_seeder_created.php', 'database/seeders/DatabaseSeeder.php'); + $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); + } + + public function testCreateSeederDatabaseSeederExists() + { + $this->mockFilesystem(); + + app(SeederGenerator::class) + ->setRelations(new RelationsDTO( + hasMany: ['Comment'], + belongsTo: ['User'], + )) + ->setModel('Post') + ->generate(); + + $this->assertGeneratedFileEquals('database_seeder_modified.php', 'database/seeders/DatabaseSeeder.php'); $this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php'); } 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 new file mode 100644 index 00000000..83f29196 --- /dev/null +++ b/tests/Support/Seeder/SeederGeneratorMockTrait.php @@ -0,0 +1,21 @@ +seeders = [ + 'DatabaseSeeder.php' => file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php'), + ]; + + $fileSystemMock->setStructure(); + } +} 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_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); + } +} diff --git a/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php b/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php new file mode 100644 index 00000000..15794a4e --- /dev/null +++ b/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php @@ -0,0 +1,18 @@ +call(AuthorSeeder::class); + } +}