Passed
Push — master ( 965fb6...8a373e )
by Arthur
21:36
created

FileGeneratorTest::testCreatePermission()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

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

611
        $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...
612
        $this->assertEquals($class, $event->getClassName());
613
        $this->assertEquals($path, $event->getFilePath());
614
    }
615
616
    private function assertFileBasics(?ResourceGenerationContract $event, string $module, $stub, string $path)
617
    {
618
        $this->assertNotNull($event);
619
        $this->assertEquals($module, $event->getModuleName());
620
        $this->assertEquals($stub, $event->getStub()->getName());
621
        $this->assertEquals($path, $event->getFilePath());
622
    }
623
}
624