Test Failed
Push — master ( 1b7368...050678 )
by Fran
25:16 queued 22:49
created

GeneratorServiceTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Importance

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