Passed
Push — master ( 624a9a...4c85b9 )
by Arthur
36:47
created

FileGeneratorTest::testCreateDto()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 19
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace Foundation\Tests;
4
5
use Foundation\Abstracts\Tests\TestCase;
6
use Foundation\Core\Larapi;
7
use Foundation\Generator\Abstracts\ResourceGeneratedEvent;
8
use Foundation\Generator\Contracts\ResourceGenerationContract;
9
use Foundation\Generator\Events\AttributeGeneratedEvent;
10
use Foundation\Generator\Events\CommandGeneratedEvent;
11
use Foundation\Generator\Events\ComposerGeneratedEvent;
12
use Foundation\Generator\Events\ControllerGeneratedEvent;
13
use Foundation\Generator\Events\DtoGeneratedEvent;
14
use Foundation\Generator\Events\FactoryGeneratedEvent;
15
use Foundation\Generator\Events\JobGeneratedEvent;
16
use Foundation\Generator\Events\ListenerGeneratedEvent;
17
use Foundation\Generator\Events\MiddlewareGeneratedEvent;
18
use Foundation\Generator\Events\MigrationGeneratedEvent;
19
use Foundation\Generator\Events\ModelGeneratedEvent;
20
use Foundation\Generator\Events\NotificationGeneratedEvent;
21
use Foundation\Generator\Events\PermissionGeneratedEvent;
22
use Foundation\Generator\Events\PolicyGeneratedEvent;
23
use Foundation\Generator\Events\ProviderGeneratedEvent;
24
use Foundation\Generator\Events\RequestGeneratedEvent;
25
use Foundation\Generator\Events\RouteGeneratedEvent;
26
use Foundation\Generator\Events\RuleGeneratedEvent;
27
use Foundation\Generator\Events\SeederGeneratedEvent;
28
use Foundation\Generator\Events\ServiceGeneratedEvent;
29
use Foundation\Generator\Events\TestGeneratedEvent;
30
use Foundation\Generator\Events\TransformerGeneratedEvent;
31
use Foundation\Generator\Managers\GeneratorManager;
32
use Foundation\Traits\DispatchedEvents;
33
use Foundation\Traits\DisableRefreshDatabase;
34
use \Illuminate\Support\Facades\Event;
35
use Illuminate\Support\Str;
36
37
/**
38
 * Created by PhpStorm.
39
 * User: arthur
40
 * Date: 10.03.19
41
 * Time: 18:35
42
 */
43
class FileGeneratorTest extends TestCase
44
{
45
    use DisableRefreshDatabase, DispatchedEvents;
46
47
    public function setUp(): void
48
    {
49
        parent::setUp();
50
51
        /* Do not remove this line. It prevents the listener that generates the files from executing */
52
        Event::fake();
53
    }
54
55
    protected function getModuleGenerator(string $moduleName): GeneratorManager
56
    {
57
        return GeneratorManager::module($moduleName, true);
58
    }
59
60
    public function testCreateSqlMigration()
61
    {
62
        $module = 'User';
63
        $class = "CreateUserTable";
64
        $table = "users";
65
        $mongo = false;
66
        $this->getModuleGenerator($module)->createMigration($class, $table, $mongo);
67
68
        $stub = "migration.stub";
69
        $table = "users";
70
71
        /* @var MigrationGeneratedEvent $event */
72
        $event = $this->getFirstDispatchedEvent(MigrationGeneratedEvent::class);
73
        $this->assertNotNull($event);
74
        $this->assertEquals($module, $event->getModuleName());
75
        $this->assertEquals($stub, $event->getStub()->getName());
76
        $this->assertEquals($class, $event->getClassName());
77
        $this->assertEquals($table, $event->getTableName());
78
        $this->assertEquals($mongo,$event->isMongoMigration());
79
    }
80
81
    public function testCreateMongoMigration()
82
    {
83
        $module = 'User';
84
        $class = "CreateUserTable";
85
        $table = "users";
86
        $mongo = true;
87
        $this->getModuleGenerator($module)->createMigration($class, $table, $mongo);
88
89
        $stub = "migration-mongo.stub";
90
        $table = "users";
91
92
        /* @var MigrationGeneratedEvent $event */
93
        $event = $this->getFirstDispatchedEvent(MigrationGeneratedEvent::class);
94
        $this->assertNotNull($event);
95
        $this->assertEquals($module, $event->getModuleName());
96
        $this->assertEquals($stub, $event->getStub()->getName());
97
        $this->assertEquals($class, $event->getClassName());
98
        $this->assertEquals($table, $event->getTableName());
99
        $this->assertEquals($mongo,$event->isMongoMigration());
100
    }
101
102
    public function testCreateFactory()
103
    {
104
        $module = "User";
105
        $model = $module;
106
        $class = $model . "Factory";
107
        $this->getModuleGenerator($module)->createFactory($module);
108
109
        $path = Larapi::getModule($module)->getFactories()->getPath() . "/$class.php";
110
        $stub = "factory.stub";
111
        $modelNamespace  = "Modules\User\Entities\User";
112
113
        /* @var FactoryGeneratedEvent $event */
114
        $event = $this->getFirstDispatchedEvent(FactoryGeneratedEvent::class);
115
        $this->assertFileBasics(
116
            $event,
117
            $module,
118
            $stub,
119
            $path);
120
        $this->assertEquals($class,$event->getClassName());
121
        $this->assertEquals($model,$event->getModel());
122
        $this->assertEquals($modelNamespace,$event->getModelNamespace());
123
124
    }
125
126
    public function testCreateController()
127
    {
128
        $module = "User";
129
        $class = "UserController";
130
        $this->getModuleGenerator($module)->createController($class);
131
132
        $path = Larapi::getModule($module)->getControllers()->getPath() . "/$class.php";
133
        $stub = "controller.stub";
134
        $namespace = "Modules\User\Http\Controllers";
135
136
        /* @var ControllerGeneratedEvent $event */
137
        $event = $this->getFirstDispatchedEvent(ControllerGeneratedEvent::class);
138
        $this->assertClassBasics(
139
            $event,
140
            $module,
141
            $stub,
142
            $class,
143
            $namespace,
144
            $path);
145
    }
146
147
    public function testCreateAttribute()
148
    {
149
        $module = "User";
150
        $class = "UserAttribute";
151
        $this->getModuleGenerator($module)->createAttribute($class);
152
153
        $path = Larapi::getModule($module)->getAttributes()->getPath() . "/$class.php";
154
        $stub = "attribute.stub";
155
        $namespace = "Modules\User\Attributes";
156
157
        /* @var AttributeGeneratedEvent $event */
158
        $event = $this->getFirstDispatchedEvent(AttributeGeneratedEvent::class);
159
        $this->assertClassBasics(
160
            $event,
161
            $module,
162
            $stub,
163
            $class,
164
            $namespace,
165
            $path);
166
    }
167
168
    public function testCreateDto()
169
    {
170
        $module = "User";
171
        $class = "CreateUserData";
172
        $this->getModuleGenerator($module)->createDto($class);
173
174
        $path = Larapi::getModule($module)->getDtos()->getPath() . "/$class.php";
175
        $stub = "dto.stub";
176
        $namespace = "Modules\User\Dtos";
177
178
        /* @var DtoGeneratedEvent $event */
179
        $event = $this->getFirstDispatchedEvent(DtoGeneratedEvent::class);
180
        $this->assertClassBasics(
181
            $event,
182
            $module,
183
            $stub,
184
            $class,
185
            $namespace,
186
            $path);
187
    }
188
189
    public function testCreateListener()
190
    {
191
        $module = "User";
192
        $class = "SendWelcomeMail";
193
        $eventClass = "UserRegisteredEvent";
194
        $queued = false;
195
        $this->getModuleGenerator($module)->createListener($class, $eventClass, $queued);
196
197
        $path = Larapi::getModule($module)->getListeners()->getPath() . '/SendWelcomeMail.php';
198
        $stub = "listener.stub";
199
        $namespace = "Modules\User\Listeners";
200
        $eventNamespace = "Modules\User\Events\UserRegisteredEvent";
201
202
        /* @var ListenerGeneratedEvent $event */
203
        $event = $this->getFirstDispatchedEvent(ListenerGeneratedEvent::class);
204
        $this->assertClassBasics(
205
            $event,
206
            $module,
207
            $stub,
208
            $class,
209
            $namespace,
210
            $path);
211
        $this->assertEquals($queued, $event->isQueued());
212
        $this->assertEquals($eventClass, $event->getEvent());
213
        $this->assertEquals($eventNamespace, $event->getEventNamespace());
214
    }
215
216
    public function testCreateQueuedListener()
217
    {
218
        $module = "User";
219
        $class = "SendWelcomeMail";
220
        $eventClass = "UserRegisteredEvent";
221
        $queued = true;
222
        $this->getModuleGenerator($module)->createListener($class, $eventClass, $queued);
223
224
        $path = Larapi::getModule($module)->getListeners()->getPath() . '/SendWelcomeMail.php';
225
        $stub = "listener-queued.stub";
226
        $namespace = "Modules\User\Listeners";
227
        $eventNamespace = "Modules\User\Events\UserRegisteredEvent";
228
229
        /* @var ListenerGeneratedEvent $event */
230
        $event = $this->getFirstDispatchedEvent(ListenerGeneratedEvent::class);
231
        $this->assertClassBasics(
232
            $event,
233
            $module,
234
            $stub,
235
            $class,
236
            $namespace,
237
            $path);
238
        $this->assertEquals($queued, $event->isQueued());
239
        $this->assertEquals($eventClass, $event->getEvent());
240
        $this->assertEquals($eventNamespace, $event->getEventNamespace());
241
    }
242
243
    public function testCreateJob()
244
    {
245
        $module = "User";
246
        $class = "RandomUserJob";
247
        $synchronous = false;
248
249
        $this->getModuleGenerator($module)->createJob($class, $synchronous);
250
251
        $path = Larapi::getModule($module)->getJobs()->getPath() . "/$class.php";
252
        $stub = "job-queued.stub";
253
        $namespace = "Modules\User\Jobs";
254
255
        /* @var JobGeneratedEvent $event */
256
        $event = $this->getFirstDispatchedEvent(JobGeneratedEvent::class);
257
        $this->assertClassBasics(
258
            $event,
259
            $module,
260
            $stub,
261
            $class,
262
            $namespace,
263
            $path);
264
        $this->assertEquals($synchronous, $event->isSynchronous());
265
    }
266
267
    public function testCreateSynchronousJob()
268
    {
269
        $module = "User";
270
        $class = "RandomUserJob";
271
        $synchronous = true;
272
273
        $this->getModuleGenerator($module)->createJob($class, $synchronous);
274
275
        $path = Larapi::getModule($module)->getJobs()->getPath() . "/$class.php";
276
        $stub = "job.stub";
277
        $namespace = "Modules\User\Jobs";
278
279
        /* @var JobGeneratedEvent $event */
280
        $event = $this->getFirstDispatchedEvent(JobGeneratedEvent::class);
281
        $this->assertClassBasics(
282
            $event,
283
            $module,
284
            $stub,
285
            $class,
286
            $namespace,
287
            $path);
288
        $this->assertEquals($synchronous, $event->isSynchronous());
289
    }
290
291
    public function testCreateCommand()
292
    {
293
        $module = "User";
294
        $class = "RandomCommand";
295
        $consoleCommand = "user:dosomethingrandom";
296
297
        $this->getModuleGenerator($module)->createCommand($class, $consoleCommand);
298
299
        $path = Larapi::getModule($module)->getCommands()->getPath() . "/$class.php";
300
        $stub = "command.stub";
301
        $namespace = "Modules\User\Console";
302
303
304
        /* @var CommandGeneratedEvent $event */
305
        $event = $this->getFirstDispatchedEvent(CommandGeneratedEvent::class);
306
        $this->assertClassBasics(
307
            $event,
308
            $module,
309
            $stub,
310
            $class,
311
            $namespace,
312
            $path);
313
        $this->assertEquals($consoleCommand, $event->getConsoleCommand());
314
    }
315
316
    public function testCreateMiddleware()
317
    {
318
        $module = "User";
319
        $class = "RandomMiddleware";
320
321
        $this->getModuleGenerator($module)->createMiddleware($class);
322
323
        $path = Larapi::getModule($module)->getMiddleWare()->getPath() . "/$class.php";
324
        $stub = "middleware.stub";
325
        $namespace = "Modules\User\Http\Middleware";
326
327
        /* @var MiddlewareGeneratedEvent $event */
328
        $event = $this->getFirstDispatchedEvent(MiddlewareGeneratedEvent::class);
329
        $this->assertClassBasics(
330
            $event,
331
            $module,
332
            $stub,
333
            $class,
334
            $namespace,
335
            $path);
336
    }
337
338
    public function testCreateProvider()
339
    {
340
        $module = "User";
341
        $class = "RandomServiceProvider";
342
343
        $this->getModuleGenerator($module)->createServiceProvider($class);
344
345
        $path = Larapi::getModule($module)->getServiceProviders()->getPath() . "/$class.php";
346
        $stub = "provider.stub";
347
        $namespace = "Modules\User\Providers";
348
349
        /* @var ProviderGeneratedEvent $event */
350
        $event = $this->getFirstDispatchedEvent(ProviderGeneratedEvent::class);
351
        $this->assertClassBasics(
352
            $event,
353
            $module,
354
            $stub,
355
            $class,
356
            $namespace,
357
            $path);
358
    }
359
360
    public function testCreateService()
361
    {
362
        $module = "User";
363
        $class = "UserService";
364
365
        $this->getModuleGenerator($module)->createService($class);
366
367
        $path = Larapi::getModule($module)->getServices()->getPath() . "/$class.php";
368
        $stub = "service.stub";
369
        $namespace = "Modules\User\Services";
370
371
        /* @var ServiceGeneratedEvent $event */
372
        $event = $this->getFirstDispatchedEvent(ServiceGeneratedEvent::class);
373
        $this->assertClassBasics(
374
            $event,
375
            $module,
376
            $stub,
377
            $class,
378
            $namespace,
379
            $path);
380
    }
381
382
    public function testCreateNotification()
383
    {
384
        $module = "User";
385
        $class = "RandomNotification";
386
387
        $this->getModuleGenerator($module)->createNotification($class);
388
389
        $path = Larapi::getModule($module)->getNotifications()->getPath() . "/$class.php";
390
        $stub = "notification.stub";
391
        $namespace = "Modules\User\Notifications";
392
393
        /* @var NotificationGeneratedEvent $event */
394
        $event = $this->getFirstDispatchedEvent(NotificationGeneratedEvent::class);
395
        $this->assertClassBasics(
396
            $event,
397
            $module,
398
            $stub,
399
            $class,
400
            $namespace,
401
            $path);
402
    }
403
404
    public function testCreateModel()
405
    {
406
        $module = "User";
407
        $modelName = "Address";
408
        $class = $module . $modelName;
409
        $needsMigration = true;
410
        $isMongoModel = false;
411
412
        $this->getModuleGenerator($module)->createModel($class, $isMongoModel, $needsMigration);
413
414
        $path = Larapi::getModule($module)->getModels()->getPath() . "/$module$modelName.php";
415
        $stub = "model.stub";
416
        $namespace = "Modules\User\Entities";
417
418
        /* @var ModelGeneratedEvent $event */
419
        $event = $this->getFirstDispatchedEvent(ModelGeneratedEvent::class);
420
        $this->assertClassBasics(
421
            $event,
422
            $module,
423
            $stub,
424
            $class,
425
            $namespace,
426
            $path);
427
428
        $stub = "migration.stub";
429
        $table = "user_addresses";
430
        $migrationClass = "CreateUserAddressTable";
431
432
        /* @var MigrationGeneratedEvent $event */
433
        $event = $this->getFirstDispatchedEvent(MigrationGeneratedEvent::class);
434
        $this->assertNotNull($event);
435
        $this->assertEquals($module, $event->getModuleName());
436
        $this->assertEquals($stub, $event->getStub()->getName());
437
        $this->assertEquals($migrationClass, $event->getClassName());
438
        $this->assertEquals($table, $event->getTableName());
439
    }
440
441
    public function testCreatePolicy()
442
    {
443
        $module = "User";
444
        $class = "UserOwnershipPolicy";
445
446
        $this->getModuleGenerator($module)->createPolicy($class);
447
448
        $path = Larapi::getModule($module)->getPolicies()->getPath() . "/$class.php";
449
        $stub = "policy.stub";
450
        $namespace = "Modules\User\Policies";
451
452
        /* @var PolicyGeneratedEvent $event */
453
        $event = $this->getFirstDispatchedEvent(PolicyGeneratedEvent::class);
454
        $this->assertClassBasics(
455
            $event,
456
            $module,
457
            $stub,
458
            $class,
459
            $namespace,
460
            $path);
461
    }
462
463
    public function testCreateTransformer()
464
    {
465
        $module = "User";
466
        $model = "User";
467
        $class = "BlablaTransformer";
468
469
        $this->getModuleGenerator($module)->createTransformer($class, $model);
470
471
        $path = Larapi::getModule($module)->getTransformers()->getPath() . "/$class.php";
472
        $stub = "transformer.stub";
473
        $namespace = "Modules\User\Transformers";
474
        $modelNamespace = "Modules\User\Entities\User";
475
476
        /* @var TransformerGeneratedEvent $event */
477
        $event = $this->getFirstDispatchedEvent(TransformerGeneratedEvent::class);
478
        $this->assertClassBasics(
479
            $event,
480
            $module,
481
            $stub,
482
            $class,
483
            $namespace,
484
            $path);
485
        $this->assertEquals($model, $event->getModel());
486
        $this->assertEquals($modelNamespace, $event->getModelNamespace());
487
    }
488
489
    public function testCreateUnitTest()
490
    {
491
        $module = "User";
492
        $class = "AUserUnitTest";
493
494
        $this->getModuleGenerator($module)->createTest($class, 'unit');
495
496
        $path = Larapi::getModule($module)->getTests()->getPath() . "/$class.php";
497
        $stub = "test-unit.stub";
498
        $namespace = "Modules\User\Tests";
499
        $type = "unit";
500
501
        /* @var TestGeneratedEvent $event */
502
        $event = $this->getFirstDispatchedEvent(TestGeneratedEvent::class);
503
        $this->assertClassBasics(
504
            $event,
505
            $module,
506
            $stub,
507
            $class,
508
            $namespace,
509
            $path);
510
        $this->assertEquals($type, $event->getType());
511
    }
512
513
    public function testCreateRequest()
514
    {
515
        $module = "User";
516
        $class = "ARequest";
517
518
        $this->getModuleGenerator($module)->createRequest($class);
519
520
        $path = Larapi::getModule($module)->getRequests()->getPath() . "/$class.php";
521
        $stub = "request.stub";
522
        $namespace = "Modules\User\Http\Requests";
523
524
        /* @var RequestGeneratedEvent $event */
525
        $event = $this->getFirstDispatchedEvent(RequestGeneratedEvent::class);
526
        $this->assertClassBasics(
527
            $event,
528
            $module,
529
            $stub,
530
            $class,
531
            $namespace,
532
            $path);
533
    }
534
535
    public function testCreateRule()
536
    {
537
        $module = "User";
538
        $fileName = "BlalkaRule";
539
540
        $this->getModuleGenerator($module)->createRule($fileName);
541
542
        $path = Larapi::getModule($module)->getRules()->getPath() . "/$fileName.php";
543
        $stub = "rule.stub";
544
        $class = "BlalkaRule";
545
        $namespace = "Modules\User\Rules";
546
547
        /* @var RuleGeneratedEvent $event */
548
        $event = $this->getFirstDispatchedEvent(RuleGeneratedEvent::class);
549
        $this->assertClassBasics(
550
            $event,
551
            $module,
552
            $stub,
553
            $class,
554
            $namespace,
555
            $path);
556
    }
557
558
    public function testCreateSeeder()
559
    {
560
        $module = "User";
561
        $class = "BlablaSeeder";
562
563
        $this->getModuleGenerator($module)->createSeeder($class);
564
565
        $path = Larapi::getModule($module)->getSeeders()->getPath() . "/$class.php";
566
        $stub = "seeder.stub";
567
        $namespace = "Modules\User\Database\Seeders";
568
569
        /* @var SeederGeneratedEvent $event */
570
        $event = $this->getFirstDispatchedEvent(SeederGeneratedEvent::class);
571
        $this->assertClassBasics(
572
            $event,
573
            $module,
574
            $stub,
575
            $class,
576
            $namespace,
577
            $path);
578
    }
579
580
    public function testCreatePermission()
581
    {
582
        $module = "User";
583
        $class = "UserPermission";
584
585
        $this->getModuleGenerator($module)->createPermission($class);
586
587
        $path = Larapi::getModule($module)->getPermissions()->getPath() . "/$class.php";
588
        $stub = "permission.stub";
589
        $namespace = "Modules\User\Permissions";
590
591
        /* @var PermissionGeneratedEvent $event */
592
        $event = $this->getFirstDispatchedEvent(PermissionGeneratedEvent::class);
593
        $this->assertClassBasics(
594
            $event,
595
            $module,
596
            $stub,
597
            $class,
598
            $namespace,
599
            $path);
600
    }
601
602
    public function testCreateRoute()
603
    {
604
        $moduleName = "Demo";
605
        $version = 'v1';
606
        $routename = strtolower(Str::plural($moduleName)) . ".$version";
607
608
        $this->getModuleGenerator($moduleName)->createRoute($version);
609
610
        $expectedFileName = Larapi::getModule($moduleName)->getRoutes()->getPath() . "/$routename.php";
611
        $expectedStubName = "route.stub";
612
        $expectedVersion = "v1";
613
614
        /* @var RouteGeneratedEvent $event */
615
        $event = $this->getFirstDispatchedEvent(RouteGeneratedEvent::class);
616
        $this->assertNotNull($event);
617
618
        $this->assertEquals($expectedFileName, $event->getFilePath());
619
        $this->assertEquals($expectedStubName, $event->getStub()->getName());
620
        $this->assertEquals($expectedVersion, $event->getVersion());
621
    }
622
623
    public function testCreateComposer()
624
    {
625
        $moduleName = "Demo";
626
627
        $this->getModuleGenerator($moduleName)->createComposer();
628
629
        $expectedFileName = Larapi::getModule($moduleName)->getPath() . "/composer.json";
630
        $expectedStubName = "composer.stub";
631
        $authorName = 'arthur devious';
632
        $authorMail = '[email protected]';
633
634
        /* @var ComposerGeneratedEvent $event */
635
        $event = $this->getFirstDispatchedEvent(ComposerGeneratedEvent::class);
636
        $this->assertNotNull($event);
637
638
        $this->assertEquals($expectedFileName, $event->getFilePath());
639
        $this->assertEquals($expectedStubName, $event->getStub()->getName());
640
        $this->assertEquals($authorName, $event->getAuthorName());
641
        $this->assertEquals($authorMail, $event->getAuthorMail());
642
    }
643
644
645
    /**
646
     * @param ResourceGenerationContract $event
647
     * @param string $module
648
     * @param $stub
649
     * @param string $class
650
     * @param string $namespace
651
     * @param string $path
652
     */
653
    private function assertClassBasics(?ResourceGenerationContract $event, string $module, $stub, string $class, string $namespace, string $path)
654
    {
655
        $this->assertFileBasics($event, $module, $stub, $path);
656
        $this->assertEquals($namespace, $event->getNamespace());
0 ignored issues
show
Bug introduced by
The method getNamespace() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

656
        $this->assertEquals($namespace, $event->/** @scrutinizer ignore-call */ getNamespace());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
657
        $this->assertEquals($class, $event->getClassName());
658
        $this->assertEquals($path, $event->getFilePath());
659
    }
660
661
    private function assertFileBasics(?ResourceGenerationContract $event, string $module, $stub, string $path)
662
    {
663
        $this->assertNotNull($event);
664
        $this->assertEquals($module, $event->getModuleName());
665
        $this->assertEquals($stub, $event->getStub()->getName());
666
        $this->assertEquals($path, $event->getFilePath());
667
    }
668
}
669