Skip to content

Commit ad316d1

Browse files
committed
test: added SeederGeneratorTest
1 parent 26b2cdc commit ad316d1

File tree

7 files changed

+158
-19
lines changed

7 files changed

+158
-19
lines changed

src/Generators/SeederGenerator.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@ public function __construct()
1616
{
1717
parent::__construct();
1818

19-
$this->seedsPath = Arr::get($this->paths, 'seeders', 'database/seeders');
20-
$this->databaseSeederPath = Arr::get($this->paths, 'database_seeder', 'database/seeders/DatabaseSeeder.php');
19+
$this->seedsPath = base_path(Arr::get($this->paths, 'seeders', 'database/seeders'));
20+
$this->databaseSeederPath = base_path(Arr::get($this->paths, 'database_seeder', 'database/seeders/DatabaseSeeder.php'));
2121
}
2222

2323
public function generate(): void
2424
{
25+
if (!file_exists($this->seedsPath)) {
26+
mkdir($this->seedsPath);
27+
}
28+
2529
if (!file_exists($this->databaseSeederPath)) {
2630
list($basePath, $databaseSeederDir) = extract_last_part($this->databaseSeederPath, '/');
2731

@@ -32,10 +36,6 @@ public function generate(): void
3236
$this->createDatabaseSeeder();
3337
}
3438

35-
if (!is_dir($this->seedsPath)) {
36-
mkdir($this->seedsPath);
37-
}
38-
3939
$this->createEntitySeeder();
4040

4141
$this->appendSeederToList();
@@ -78,7 +78,7 @@ protected function createEntitySeeder(): void
7878
'modelsNamespace' => $this->getOrCreateNamespace('models')
7979
])->render();
8080

81-
$seederPath = base_path("{$this->seedsPath}/{$this->model}Seeder.php");
81+
$seederPath = "{$this->seedsPath}/{$this->model}Seeder.php";
8282

8383
file_put_contents($seederPath, $content);
8484

@@ -91,7 +91,7 @@ protected function appendSeederToList(): void
9191
{
9292
$content = file_get_contents($this->databaseSeederPath);
9393

94-
$insertContent = "\n \$this->call({$this->model}Seeder::class);\n }\n}";
94+
$insertContent = " \$this->call({$this->model}Seeder::class);\n }\n}";
9595

9696
$fixedContent = preg_replace('/\}\s*\}\s*\z/', $insertContent, $content);
9797

tests/NovaTestGeneratorTest.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,6 @@ class NovaTestGeneratorTest extends TestCase
1212
{
1313
use NovaTestMockTrait;
1414

15-
public function setUp(): void
16-
{
17-
parent::setUp();
18-
19-
vfsStream::setup();
20-
21-
$this->generatedFileBasePath = vfsStream::url('root');
22-
23-
$this->app->setBasePath($this->generatedFileBasePath);
24-
}
25-
2615
public function testCreateNovaTestsResourceNotExists()
2716
{
2817
$mock = $this->mockClassExistsFunction();

tests/SeederGeneratorTest.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace RonasIT\Support\Tests;
4+
5+
use Illuminate\Support\Facades\Event;
6+
use RonasIT\Support\Events\WarningMessage;
7+
use RonasIT\Support\Generators\SeederGenerator;
8+
use RonasIT\Support\Tests\Support\SeederGeneratorMockTrait;
9+
10+
class SeederGeneratorTest extends TestCase
11+
{
12+
use SeederGeneratorMockTrait;
13+
14+
public function testCreateSeeder()
15+
{
16+
$this->mockViewsNamespace();
17+
$this->mockConfigurations();
18+
$this->mockFilesystem();
19+
20+
app(SeederGenerator::class)
21+
->setRelations([
22+
'hasOne' => [],
23+
'belongsTo' => ['User'],
24+
'hasMany' => ['Comment'],
25+
'belongsToMany' => []
26+
])
27+
->setModel('Post')
28+
->generate();
29+
30+
$this->rollbackToDefaultBasePath();
31+
32+
$this->assertGeneratedFileEquals('database_seeder.php', 'database/seeders/DatabaseSeeder.php');
33+
$this->assertGeneratedFileEquals('post_seeder.php', 'database/seeders/PostSeeder.php');
34+
}
35+
36+
public function testCreateSeederWithOldConfig()
37+
{
38+
Event::fake();
39+
$this->mockViewsNamespace();
40+
$this->mockConfigurations();
41+
$this->mockFilesystem();
42+
43+
config([
44+
'entity-generator.stubs.database_empty_seeder' => 'entity-generator::database_seed_empty',
45+
]);
46+
47+
app(SeederGenerator::class)
48+
->setRelations([
49+
'hasOne' => [],
50+
'belongsTo' => ['User'],
51+
'hasMany' => ['Comment'],
52+
'belongsToMany' => []
53+
])
54+
->setModel('Post')
55+
->generate();
56+
57+
$this->rollbackToDefaultBasePath();
58+
59+
Event::assertDispatched(WarningMessage::class);
60+
}
61+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace RonasIT\Support\Tests\Support;
4+
5+
use Illuminate\Support\Facades\View;
6+
use org\bovigo\vfs\vfsStream;
7+
8+
trait SeederGeneratorMockTrait
9+
{
10+
public function mockConfigurations(): void
11+
{
12+
config([
13+
'entity-generator.stubs.database_empty_seeder' => 'entity-generator::database_empty_seeder',
14+
'entity-generator.stubs.legacy_seeder' => 'entity-generator::legacy_seeder',
15+
'entity-generator.stubs.resource' => 'entity-generator::resource',
16+
'entity-generator.stubs.seeder' => 'entity-generator::seeder',
17+
'entity-generator.paths' => [
18+
'seeders' => 'database/seeders',
19+
'models' => 'app/Models',
20+
'database_seeder' => 'database/seeders/DatabaseSeeder.php',
21+
]
22+
]);
23+
}
24+
25+
public function mockFilesystem(): void
26+
{
27+
$structure = [
28+
'database' => []
29+
];
30+
31+
vfsStream::create($structure);
32+
}
33+
34+
public function mockViewsNamespace(): void
35+
{
36+
View::addNamespace('entity-generator', getcwd() . '/stubs');
37+
}
38+
}

tests/TestCase.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Illuminate\Foundation\Testing\Concerns\InteractsWithViews;
77
use Illuminate\Support\Str;
88
use Orchestra\Testbench\TestCase as BaseTestCase;
9+
use org\bovigo\vfs\vfsStream;
910
use RonasIT\Support\Traits\FixturesTrait;
1011

1112
class TestCase extends BaseTestCase
@@ -16,6 +17,17 @@ class TestCase extends BaseTestCase
1617
protected bool $globalExportMode = false;
1718
protected string $generatedFileBasePath;
1819

20+
public function setUp(): void
21+
{
22+
parent::setUp();
23+
24+
vfsStream::setup();
25+
26+
$this->generatedFileBasePath = vfsStream::url('root');
27+
28+
$this->app->setBasePath($this->generatedFileBasePath);
29+
}
30+
1931
public function rollbackToDefaultBasePath(): void
2032
{
2133
$this->app->setBasePath(getcwd());
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(PostSeeder::class);
17+
}
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Database\Seeders;
4+
5+
use Illuminate\Database\Seeder;
6+
use App\Models\Post;
7+
8+
class PostSeeder extends Seeder
9+
{
10+
public function run()
11+
{
12+
Post::factory()->make([
13+
'user_id' => \App\Models\User::factory()->create()->id,
14+
]);
15+
16+
\App\Models\Comment::factory()->count(10)->make([
17+
'post_id' => $post->id,
18+
]);
19+
20+
}
21+
}

0 commit comments

Comments
 (0)