Browse Source

Add model factory generator

tags/0.1.0
Nafies Luthfi 8 years ago
parent
commit
7494559dac
  1. 2
      readme.md
  2. 16
      src/CrudMake.php
  3. 12
      src/stubs/model-factory.stub
  4. 1
      tests/CrudMakeCommandTest.php
  5. 31
      tests/Generators/ModelFactoryGeneratorTest.php

2
readme.md

@ -51,6 +51,8 @@ Item model generated.
Item table migration generated.
ItemsController generated.
Item view files generated.
item lang files generated.
item model factory generated.
ManageItemsTest generated.
ItemTest (model) generated.
CRUD files generated successfully!

16
src/CrudMake.php

@ -49,6 +49,7 @@ class CrudMake extends Command
$this->generateController();
$this->generateViews();
$this->generateLangFile();
$this->generateModelFactory();
$this->generateTests();
$this->info('CRUD files generated successfully!');
@ -109,6 +110,15 @@ class CrudMake extends Command
$this->info($this->singleModelName.' lang files generated.');
}
public function generateModelFactory()
{
$modelFactoryPath = $this->makeDirectory(database_path('factories'));
$this->files->put($modelFactoryPath.'/'.$this->modelName.'Factory.php', $this->getModelFactoryContent());
$this->info($this->singleModelName.' model factory generated.');
}
public function generateTests()
{
$featureTestPath = $this->makeDirectory(base_path('tests/Feature'));
@ -150,6 +160,12 @@ class CrudMake extends Command
return $this->replaceViewDummyStrings($stub)->replaceClass($stub);
}
public function getModelFactoryContent()
{
$stub = $this->files->get(__DIR__.'/stubs/model-factory.stub');
return $this->replaceViewDummyStrings($stub)->replaceClass($stub);
}
public function getFeatureTestContent()
{
$stub = $this->files->get(__DIR__.'/stubs/test.stub');

12
src/stubs/model-factory.stub

@ -0,0 +1,12 @@
<?php
use App\Master;
use Faker\Generator as Faker;
$factory->define(Master::class, function (Faker $faker) {
return [
'name' => $faker->word,
'description' => $faker->sentence,
];
});

1
tests/CrudMakeCommandTest.php

@ -18,6 +18,7 @@ class CrudMakeCommandTest extends TestCase
$this->assertFileExists(resource_path("views/{$this->tableName}/index.blade.php"));
$this->assertFileExists(resource_path("views/{$this->tableName}/forms.blade.php"));
$this->assertFileExists(resource_path("lang/en/{$this->singleModelName}.php"));
$this->assertFileExists(database_path("factories/{$this->modelName}Factory.php"));
$this->assertFileExists(base_path("tests/Feature/Manage{$this->pluralModelName}Test.php"));
$this->assertFileExists(base_path("tests/Unit/Models/{$this->modelName}Test.php"));
}

31
tests/Generators/ModelFactoryGeneratorTest.php

@ -0,0 +1,31 @@
<?php
namespace Tests\Generators;
use Tests\TestCase;
class ModelFactoryGeneratorTest extends TestCase
{
/** @test */
public function it_creates_correct_model_factory_content()
{
$this->artisan('make:crud', ['name' => $this->modelName, '--no-interaction' => true]);
$modelFactoryPath = database_path('factories/'.$this->modelName.'Factory.php');
$this->assertFileExists($modelFactoryPath);
$modelFactoryContent = "<?php
use App\Item;
use Faker\Generator as Faker;
\$factory->define(Item::class, function (Faker \$faker) {
return [
'name' => \$faker->word,
'description' => \$faker->sentence,
];
});
";
$this->assertEquals($modelFactoryContent, file_get_contents($modelFactoryPath));
}
}
Loading…
Cancel
Save