Passed
Pull Request — master (#28)
by Fran
08:31
created

GeneratorServiceTest::testBaseClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace PSFS\tests\services;
4
5
use PHPUnit\Framework\TestCase;
6
use PSFS\base\types\helpers\GeneratorHelper;
7
use PSFS\base\types\traits\BoostrapTrait;
8
use PSFS\services\GeneratorService as Service;
9
10
/**
11
 * Class GeneratorServiceTest
12
 * @package PSFS\tests\services
13
 */
14
class GeneratorServiceTest extends TestCase
15
{
16
    use BoostrapTrait;
17
18
    const MODULE_NAME = 'CLIENT';
19
20
    public function testBaseClass()
21
    {
22
        $this->assertTrue(true);
23
    }
24
25
    public static array $filesToCheckWithoutSchema = [
26
        DIRECTORY_SEPARATOR . 'phpunit.xml.dist',
27
        DIRECTORY_SEPARATOR . 'autoload.php',
28
        DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . self::MODULE_NAME . 'Test.php',
29
        DIRECTORY_SEPARATOR . 'Templates' . DIRECTORY_SEPARATOR . 'index.html.twig',
30
        DIRECTORY_SEPARATOR . 'Services' . DIRECTORY_SEPARATOR . self::MODULE_NAME . 'Service.php',
31
        DIRECTORY_SEPARATOR . 'Controller' . DIRECTORY_SEPARATOR . self::MODULE_NAME . 'Controller.php',
32
        DIRECTORY_SEPARATOR . 'Controller' . DIRECTORY_SEPARATOR . 'base' . DIRECTORY_SEPARATOR . self::MODULE_NAME . 'BaseController.php',
33
        DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'app.js',
34
        DIRECTORY_SEPARATOR . 'Public' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'styles.css',
35
        DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'schema.xml',
36
        DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'propel.php',
37
        DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'config.php',
38
        DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'Sql' . DIRECTORY_SEPARATOR . 'CLIENT.sql',
39
        DIRECTORY_SEPARATOR . 'Config' . DIRECTORY_SEPARATOR . 'Sql' . DIRECTORY_SEPARATOR . 'sqldb.map',
40
    ];
41
42
    public static array $filesToCheckWithSchema = [
43
        // Simple model creation
44
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'Solo.php',
45
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'base' . DIRECTORY_SEPARATOR . 'SoloBaseApi.php',
46
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Solo.php',
47
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'SoloQuery.php',
48
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'Solo.php',
49
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'SoloQuery.php',
50
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Map' . DIRECTORY_SEPARATOR . 'SoloTableMap.php',
51
        // Package model creation and I18n
52
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Test.php',
53
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'base' . DIRECTORY_SEPARATOR . 'TestBaseApi.php',
54
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Test.php',
55
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'TestQuery.php',
56
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'TestI18n.php',
57
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'TestI18nQuery.php',
58
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'Test.php',
59
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'TestQuery.php',
60
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'TestI18n.php',
61
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'TestI18nQuery.php',
62
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Map' . DIRECTORY_SEPARATOR . 'TestTableMap.php',
63
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Map' . DIRECTORY_SEPARATOR . 'TestI18nTableMap.php',
64
        // Package related model
65
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'Related.php',
66
        DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'base' . DIRECTORY_SEPARATOR . 'RelatedBaseApi.php',
67
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'Related.php',
68
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'RelatedQuery.php',
69
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'Related.php',
70
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'Base' . DIRECTORY_SEPARATOR . 'RelatedQuery.php',
71
        DIRECTORY_SEPARATOR . 'Models' . DIRECTORY_SEPARATOR . 'Related' . DIRECTORY_SEPARATOR . 'Map' . DIRECTORY_SEPARATOR . 'RelatedTableMap.php',
72
    ];
73
74
    /**
75
     * @param Service $generatorService
76
     * @throws \PSFS\base\exception\GeneratorException
77
     * @throws \ReflectionException
78
     */
79
    public function createNewModule(Service $generatorService): void
80
    {
81
        $generatorService->createStructureModule(self::MODULE_NAME, true, skipMigration: true);
82
        $this->checkBasicStructure();
83
    }
84
85
    /**
86
     * @return string
87
     * @throws \PSFS\base\exception\GeneratorException
88
     * @throws \ReflectionException
89
     */
90
    public function checkCreateExistingModule(): string
91
    {
92
        $generatorService = Service::getInstance();
93
        $this->assertInstanceOf(Service::class, $generatorService, 'Error getting GeneratorService instance');
94
        $modulePath = CORE_DIR . DIRECTORY_SEPARATOR . self::MODULE_NAME;
95
96
        $this->createNewModule($generatorService);
97
98
        GeneratorHelper::copyr(
99
            dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . 'generator' . DIRECTORY_SEPARATOR . 'Config',
100
            $modulePath . DIRECTORY_SEPARATOR . 'Config'
101
        );
102
        require_once $modulePath . DIRECTORY_SEPARATOR . 'autoload.php';
103
        $generatorService->createStructureModule(self::MODULE_NAME, skipMigration: true);
104
        $this->checkBasicStructure();
105
106
        foreach (self::$filesToCheckWithSchema as $fileName) {
107
            $this->assertFileExists($modulePath . $fileName, $fileName . ' do not exists after generate module with schema');
108
        }
109
        return $modulePath;
110
    }
111
112
    private function checkBasicStructure()
113
    {
114
        $modulePath = CORE_DIR . DIRECTORY_SEPARATOR . self::MODULE_NAME;
115
        $this->assertDirectoryExists($modulePath, 'Directory not created');
116
        foreach (self::$filesToCheckWithoutSchema as $fileName) {
117
            $this->assertFileExists($modulePath . $fileName, $fileName . ' do not exists after generate module from scratch');
118
        }
119
    }
120
}
121