Skip to content

Commit a69a712

Browse files
committed
tests: tests for api and scaffold generators
1 parent 74e40a1 commit a69a712

File tree

6 files changed

+269
-44
lines changed

6 files changed

+269
-44
lines changed

src/InfyOmGeneratorServiceProvider.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Support\ServiceProvider;
66
use InfyOm\Generator\Commands\API\APIControllerGeneratorCommand;
7+
use InfyOm\Generator\Commands\API\APIGeneratorCommand;
78
use InfyOm\Generator\Commands\API\APIRequestsGeneratorCommand;
89
use InfyOm\Generator\Commands\API\TestsGeneratorCommand;
910
use InfyOm\Generator\Commands\APIScaffoldGeneratorCommand;
@@ -64,6 +65,8 @@ private function registerCommands()
6465

6566
$this->commands([
6667
APIScaffoldGeneratorCommand::class,
68+
69+
APIGeneratorCommand::class,
6770
APIControllerGeneratorCommand::class,
6871
APIRequestsGeneratorCommand::class,
6972
TestsGeneratorCommand::class,
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<?php
2+
3+
use InfyOm\Generator\Commands\API\APIGeneratorCommand;
4+
use InfyOm\Generator\Facades\FileUtils;
5+
use InfyOm\Generator\Generators\API\APIControllerGenerator;
6+
use InfyOm\Generator\Generators\API\APIRequestGenerator;
7+
use InfyOm\Generator\Generators\API\APIRoutesGenerator;
8+
use InfyOm\Generator\Generators\API\APITestGenerator;
9+
use InfyOm\Generator\Generators\FactoryGenerator;
10+
use InfyOm\Generator\Generators\MigrationGenerator;
11+
use InfyOm\Generator\Generators\ModelGenerator;
12+
use InfyOm\Generator\Generators\RepositoryGenerator;
13+
use InfyOm\Generator\Generators\RepositoryTestGenerator;
14+
use InfyOm\Generator\Generators\Scaffold\ControllerGenerator;
15+
use InfyOm\Generator\Generators\Scaffold\MenuGenerator;
16+
use InfyOm\Generator\Generators\Scaffold\RequestGenerator;
17+
use InfyOm\Generator\Generators\Scaffold\RoutesGenerator;
18+
use InfyOm\Generator\Generators\Scaffold\ViewGenerator;
19+
use InfyOm\Generator\Generators\SeederGenerator;
20+
use Mockery as m;
21+
use function Pest\Laravel\artisan;
22+
23+
afterEach(function () {
24+
m::close();
25+
});
26+
27+
it('generates all files for api from console', function () {
28+
FileUtils::fake();
29+
30+
$shouldHaveCalledGenerators = [
31+
MigrationGenerator::class,
32+
ModelGenerator::class,
33+
APIRequestGenerator::class,
34+
APIControllerGenerator::class,
35+
APIRoutesGenerator::class,
36+
SeederGenerator::class,
37+
];
38+
39+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
40+
41+
$shouldNotHaveCalledGenerator = [
42+
RepositoryGenerator::class,
43+
RequestGenerator::class,
44+
ControllerGenerator::class,
45+
ViewGenerator::class,
46+
RoutesGenerator::class,
47+
MenuGenerator::class,
48+
RepositoryTestGenerator::class,
49+
APITestGenerator::class,
50+
FactoryGenerator::class,
51+
];
52+
53+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
54+
55+
config()->set('laravel_generator.options.seeder', true);
56+
config()->set('laravel_generator.options.repository_pattern', false);
57+
58+
artisan(APIGeneratorCommand::class, ['model' => 'Post'])
59+
->expectsQuestion('Field: (name db_type html_type options)', 'title body text')
60+
->expectsQuestion('Enter validations: ', 'required')
61+
->expectsQuestion('Field: (name db_type html_type options)', 'exit')
62+
->expectsQuestion(PHP_EOL.'Do you want to migrate database? [y|N]', false)
63+
->assertSuccessful();
64+
});
65+
66+
it('generates all files for api from fields file', function () {
67+
$fileUtils = FileUtils::fake([
68+
'createFile' => true,
69+
'createDirectoryIfNotExist' => true,
70+
'deleteFile' => true,
71+
]);
72+
73+
$shouldHaveCalledGenerators = [
74+
MigrationGenerator::class,
75+
ModelGenerator::class,
76+
RepositoryGenerator::class,
77+
APIRequestGenerator::class,
78+
APIControllerGenerator::class,
79+
APIRoutesGenerator::class,
80+
];
81+
82+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
83+
84+
$shouldNotHaveCalledGenerator = [
85+
RequestGenerator::class,
86+
ControllerGenerator::class,
87+
ViewGenerator::class,
88+
RoutesGenerator::class,
89+
MenuGenerator::class,
90+
RepositoryTestGenerator::class,
91+
APITestGenerator::class,
92+
FactoryGenerator::class,
93+
SeederGenerator::class,
94+
];
95+
96+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
97+
98+
$modelSchemaFile = __DIR__.'/../fixtures/model_schema/Post.json';
99+
100+
$fileUtils->shouldReceive('getFile')
101+
->withArgs([$modelSchemaFile])
102+
->andReturn(file_get_contents($modelSchemaFile));
103+
$fileUtils->shouldReceive('getFile')
104+
->andReturn('');
105+
106+
artisan(APIGeneratorCommand::class, ['model' => 'Post', '--fieldsFile' => $modelSchemaFile])
107+
->expectsQuestion(PHP_EOL.'Do you want to migrate database? [y|N]', false)
108+
->assertSuccessful();
109+
});

tests/Commands/APIScaffoldGeneratorCommandTest.php

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -24,46 +24,6 @@
2424
m::close();
2525
});
2626

27-
function mockShouldHaveCalledAPIScaffoldGenerator(array $shouldHaveCalledGenerators): array
28-
{
29-
$mockedObjects = [];
30-
31-
foreach ($shouldHaveCalledGenerators as $generator) {
32-
$mock = m::mock($generator);
33-
34-
$mock->shouldReceive('generate')
35-
->once()
36-
->andReturn(true);
37-
38-
app()->singleton($generator, function () use ($mock) {
39-
return $mock;
40-
});
41-
42-
$mockedObjects[] = $mock;
43-
}
44-
45-
return $mockedObjects;
46-
}
47-
48-
function mockShouldNotHaveCalledAPIScaffoldGenerators(array $shouldNotHaveCalledGenerator): array
49-
{
50-
$mockedObjects = [];
51-
52-
foreach ($shouldNotHaveCalledGenerator as $generator) {
53-
$mock = m::mock($generator);
54-
55-
$mock->shouldNotReceive('generate');
56-
57-
app()->singleton($generator, function () use ($mock) {
58-
return $mock;
59-
});
60-
61-
$mockedObjects[] = $mock;
62-
}
63-
64-
return $mockedObjects;
65-
}
66-
6727
it('generates all files for api_scaffold from console', function () {
6828
FileUtils::fake();
6929

@@ -82,15 +42,15 @@ function mockShouldNotHaveCalledAPIScaffoldGenerators(array $shouldNotHaveCalled
8242
SeederGenerator::class,
8343
];
8444

85-
mockShouldHaveCalledAPIScaffoldGenerator($shouldHaveCalledGenerators);
45+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
8646

8747
$shouldNotHaveCalledGenerator = [
8848
RepositoryTestGenerator::class,
8949
APITestGenerator::class,
9050
FactoryGenerator::class,
9151
];
9252

93-
mockShouldNotHaveCalledAPIScaffoldGenerators($shouldNotHaveCalledGenerator);
53+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
9454

9555
config()->set('laravel_generator.options.seeder', true);
9656

@@ -126,13 +86,13 @@ function mockShouldNotHaveCalledAPIScaffoldGenerators(array $shouldNotHaveCalled
12686
FactoryGenerator::class,
12787
];
12888

129-
mockShouldHaveCalledAPIScaffoldGenerator($shouldHaveCalledGenerators);
89+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
13090

13191
$shouldNotHaveCalledGenerator = [
13292
SeederGenerator::class,
13393
];
13494

135-
mockShouldNotHaveCalledAPIScaffoldGenerators($shouldNotHaveCalledGenerator);
95+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
13696

13797
config()->set('laravel_generator.add_ons.tests', true);
13898

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?php
2+
3+
use InfyOm\Generator\Commands\Scaffold\ScaffoldGeneratorCommand;
4+
use InfyOm\Generator\Facades\FileUtils;
5+
use InfyOm\Generator\Generators\API\APIControllerGenerator;
6+
use InfyOm\Generator\Generators\API\APIRequestGenerator;
7+
use InfyOm\Generator\Generators\API\APIRoutesGenerator;
8+
use InfyOm\Generator\Generators\API\APITestGenerator;
9+
use InfyOm\Generator\Generators\FactoryGenerator;
10+
use InfyOm\Generator\Generators\MigrationGenerator;
11+
use InfyOm\Generator\Generators\ModelGenerator;
12+
use InfyOm\Generator\Generators\RepositoryGenerator;
13+
use InfyOm\Generator\Generators\RepositoryTestGenerator;
14+
use InfyOm\Generator\Generators\Scaffold\ControllerGenerator;
15+
use InfyOm\Generator\Generators\Scaffold\MenuGenerator;
16+
use InfyOm\Generator\Generators\Scaffold\RequestGenerator;
17+
use InfyOm\Generator\Generators\Scaffold\RoutesGenerator;
18+
use InfyOm\Generator\Generators\Scaffold\ViewGenerator;
19+
use InfyOm\Generator\Generators\SeederGenerator;
20+
use Mockery as m;
21+
use function Pest\Laravel\artisan;
22+
23+
afterEach(function () {
24+
m::close();
25+
});
26+
27+
it('generates all files for scaffold from console', function () {
28+
FileUtils::fake();
29+
30+
$shouldHaveCalledGenerators = [
31+
MigrationGenerator::class,
32+
ModelGenerator::class,
33+
RepositoryGenerator::class,
34+
RequestGenerator::class,
35+
ControllerGenerator::class,
36+
ViewGenerator::class,
37+
RoutesGenerator::class,
38+
MenuGenerator::class,
39+
];
40+
41+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
42+
43+
$shouldNotHaveCalledGenerator = [
44+
SeederGenerator::class,
45+
APIRequestGenerator::class,
46+
APIControllerGenerator::class,
47+
APIRoutesGenerator::class,
48+
RepositoryTestGenerator::class,
49+
APITestGenerator::class,
50+
FactoryGenerator::class,
51+
];
52+
53+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
54+
55+
artisan(ScaffoldGeneratorCommand::class, ['model' => 'Post'])
56+
->expectsQuestion('Field: (name db_type html_type options)', 'title body text')
57+
->expectsQuestion('Enter validations: ', 'required')
58+
->expectsQuestion('Field: (name db_type html_type options)', 'exit')
59+
->expectsQuestion(PHP_EOL.'Do you want to migrate database? [y|N]', false)
60+
->assertSuccessful();
61+
});
62+
63+
it('generates all files for scaffold from fields file', function () {
64+
$fileUtils = FileUtils::fake([
65+
'createFile' => true,
66+
'createDirectoryIfNotExist' => true,
67+
'deleteFile' => true,
68+
]);
69+
70+
$shouldHaveCalledGenerators = [
71+
MigrationGenerator::class,
72+
ModelGenerator::class,
73+
RepositoryGenerator::class,
74+
RequestGenerator::class,
75+
ControllerGenerator::class,
76+
ViewGenerator::class,
77+
RoutesGenerator::class,
78+
MenuGenerator::class,
79+
FactoryGenerator::class,
80+
];
81+
82+
mockShouldHaveCalledGenerateMethod($shouldHaveCalledGenerators);
83+
84+
$shouldNotHaveCalledGenerator = [
85+
RepositoryTestGenerator::class,
86+
APITestGenerator::class,
87+
APIRequestGenerator::class,
88+
APIControllerGenerator::class,
89+
APIRoutesGenerator::class,
90+
SeederGenerator::class,
91+
];
92+
93+
mockShouldNotHaveCalledGenerateMethod($shouldNotHaveCalledGenerator);
94+
95+
config()->set('laravel_generator.options.factory', true);
96+
97+
$modelSchemaFile = __DIR__.'/../fixtures/model_schema/Post.json';
98+
99+
$fileUtils->shouldReceive('getFile')
100+
->withArgs([$modelSchemaFile])
101+
->andReturn(file_get_contents($modelSchemaFile));
102+
$fileUtils->shouldReceive('getFile')
103+
->andReturn('');
104+
105+
artisan(ScaffoldGeneratorCommand::class, ['model' => 'Post', '--fieldsFile' => $modelSchemaFile])
106+
->expectsQuestion(PHP_EOL.'Do you want to migrate database? [y|N]', false)
107+
->assertSuccessful();
108+
});

tests/Pest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,5 @@
3838
| global functions to help you to reduce the number of lines of code in your test files.
3939
|
4040
*/
41+
42+
include_once 'TestHelpers.php';

tests/TestHelpers.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
use Mockery as m;
4+
5+
function mockShouldHaveCalledGenerateMethod(array $shouldHaveCalledGenerators): array
6+
{
7+
$mockedObjects = [];
8+
9+
foreach ($shouldHaveCalledGenerators as $generator) {
10+
$mock = m::mock($generator);
11+
12+
$mock->shouldReceive('generate')
13+
->once()
14+
->andReturn(true);
15+
16+
app()->singleton($generator, function () use ($mock) {
17+
return $mock;
18+
});
19+
20+
$mockedObjects[] = $mock;
21+
}
22+
23+
return $mockedObjects;
24+
}
25+
26+
function mockShouldNotHaveCalledGenerateMethod(array $shouldNotHaveCalledGenerator): array
27+
{
28+
$mockedObjects = [];
29+
30+
foreach ($shouldNotHaveCalledGenerator as $generator) {
31+
$mock = m::mock($generator);
32+
33+
$mock->shouldNotReceive('generate');
34+
35+
app()->singleton($generator, function () use ($mock) {
36+
return $mock;
37+
});
38+
39+
$mockedObjects[] = $mock;
40+
}
41+
42+
return $mockedObjects;
43+
}

0 commit comments

Comments
 (0)