Skip to content

Commit 5f0f81a

Browse files
authored
Merge pull request #223 from RonasIT/fix-seeder-generation-logic
fix: seeder generation logic
2 parents 2570247 + 1aa69c0 commit 5f0f81a

File tree

8 files changed

+89
-5
lines changed

8 files changed

+89
-5
lines changed

ReadMe.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ Since 1.3 version you need to add to your config/entity-generator.php following
152152
```php
153153
'paths' => [
154154
... // your old data
155-
'seeds' => 'database/seeds',
156155
'database_seeder' => 'database/seeds/DatabaseSeeder.php',
157156
'translations' => 'lang/en/validation.php'
158157
],

src/Generators/SeederGenerator.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public function generate(): void
2828

2929
$this->createNamespace('seeders');
3030

31-
$this->createDatabaseSeeder();
31+
if (!file_exists($this->databaseSeederPath)) {
32+
$this->createDatabaseSeeder();
33+
}
3234

3335
$this->createEntitySeeder();
3436

tests/SeederGeneratorTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
use RonasIT\Support\DTO\RelationsDTO;
66
use RonasIT\Support\Events\WarningEvent;
77
use RonasIT\Support\Generators\SeederGenerator;
8+
use RonasIT\Support\Tests\Support\Seeder\SeederGeneratorMockTrait;
89
use RonasIT\Support\Exceptions\ResourceAlreadyExistsException;
9-
use RonasIT\Support\Tests\Support\Repository\RepositoryMockTrait;
1010

1111
class SeederGeneratorTest extends TestCase
1212
{
13-
use RepositoryMockTrait;
13+
use SeederGeneratorMockTrait;
1414

1515
public function testCreateSeeder()
1616
{
@@ -22,7 +22,23 @@ public function testCreateSeeder()
2222
->setModel('Post')
2323
->generate();
2424

25-
$this->assertGeneratedFileEquals('database_seeder.php', 'database/seeders/DatabaseSeeder.php');
25+
$this->assertGeneratedFileEquals('database_seeder_created.php', 'database/seeders/DatabaseSeeder.php');
26+
$this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php');
27+
}
28+
29+
public function testCreateSeederDatabaseSeederExists()
30+
{
31+
$this->mockFilesystem();
32+
33+
app(SeederGenerator::class)
34+
->setRelations(new RelationsDTO(
35+
hasMany: ['Comment'],
36+
belongsTo: ['User'],
37+
))
38+
->setModel('Post')
39+
->generate();
40+
41+
$this->assertGeneratedFileEquals('database_seeder_modified.php', 'database/seeders/DatabaseSeeder.php');
2642
$this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php');
2743
}
2844

tests/Support/FileSystemMock.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class FileSystemMock
1919
public ?array $factories = null;
2020
public ?array $translations = null;
2121
public ?array $config = null;
22+
public ?array $seeders = null;
2223

2324
public function setStructure(): void
2425
{
@@ -124,6 +125,14 @@ public function setStructure(): void
124125
}
125126
}
126127

128+
if (!is_null($this->seeders)) {
129+
$structure['database']['seeders'] = [];
130+
131+
foreach ($this->seeders as $seeder => $content) {
132+
$structure['database']['seeders'][$seeder] = $content;
133+
}
134+
}
135+
127136
vfsStream::create($structure);
128137
}
129138
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace RonasIT\Support\Tests\Support\Seeder;
4+
5+
use RonasIT\Support\Tests\Support\FileSystemMock;
6+
use RonasIT\Support\Tests\Support\GeneratorMockTrait;
7+
8+
trait SeederGeneratorMockTrait
9+
{
10+
use GeneratorMockTrait;
11+
12+
public function mockFilesystem(): void
13+
{
14+
$fileSystemMock = new FileSystemMock();
15+
$fileSystemMock->seeders = [
16+
'DatabaseSeeder.php' => file_get_contents(getcwd() . '/tests/fixtures/SeederGeneratorTest/existed_database_seeder.php'),
17+
];
18+
19+
$fileSystemMock->setStructure();
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Database\Seeders;
4+
5+
use Illuminate\Database\Seeder;
6+
7+
class DatabaseSeeder extends Seeder
8+
{
9+
/**
10+
* Run the database seeds.
11+
*
12+
* @return void
13+
*/
14+
public function run()
15+
{
16+
$this->call(AuthorSeeder::class);
17+
$this->call(PostSeeder::class);
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Database\Seeders;
4+
5+
use Illuminate\Database\Seeder;
6+
7+
class DatabaseSeeder extends Seeder
8+
{
9+
/**
10+
* Run the database seeds.
11+
*
12+
* @return void
13+
*/
14+
public function run()
15+
{
16+
$this->call(AuthorSeeder::class);
17+
}
18+
}

0 commit comments

Comments
 (0)