GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#45)
by joseph
02:37
created

testBuildUniqueFieldsAndSetToEntity()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
eloc 5
nc 2
nop 0
1
<?php declare(strict_types=1);
2
3
namespace EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Generator;
4
5
use Doctrine\Common\Util\Inflector;
6
use EdmondsCommerce\DoctrineStaticMeta\AbstractTest;
7
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\NamespaceHelper;
8
use EdmondsCommerce\DoctrineStaticMeta\MappingHelper;
9
10
class FieldGeneratorTest extends AbstractTest
11
{
12
    public const WORK_DIR = AbstractTest::VAR_PATH.'/FieldGeneratorTest/';
13
14
    private const TEST_ENTITY_CAR = self::TEST_PROJECT_ROOT_NAMESPACE.'\\'
15
                                    .AbstractGenerator::ENTITIES_FOLDER_NAME.'\\Car';
16
17
    private const TEST_FIELD_NAMESPACE = self::TEST_PROJECT_ROOT_NAMESPACE.'\\'
18
                                         .AbstractGenerator::ENTITY_FIELD_TRAIT_NAMESPACE;
19
20
    private const CAR_FIELDS_TO_TYPES = [
21
        [self::TEST_FIELD_NAMESPACE.'\\Brand', MappingHelper::TYPE_STRING],
22
        [self::TEST_FIELD_NAMESPACE.'\\EngineCC', MappingHelper::TYPE_INTEGER],
23
        [self::TEST_FIELD_NAMESPACE.'\\Manufactured', MappingHelper::TYPE_DATETIME],
24
        [self::TEST_FIELD_NAMESPACE.'\\Mpg', MappingHelper::TYPE_FLOAT],
25
        [self::TEST_FIELD_NAMESPACE.'\\Description', MappingHelper::TYPE_TEXT],
26
        [self::TEST_FIELD_NAMESPACE.'\\IsCar', MappingHelper::TYPE_BOOLEAN],
27
    ];
28
29
    private const UNIQUE_FIELDS_TO_TYPES = [
30
        [self::TEST_FIELD_NAMESPACE.'\\UniqueString', MappingHelper::TYPE_STRING],
31
        [self::TEST_FIELD_NAMESPACE.'\\UniqueInt', MappingHelper::TYPE_INTEGER],
32
    ];
33
34
    /**
35
     * @var FieldGenerator
36
     */
37
    private $fieldGenerator;
38
39
    public function setup()
40
    {
41
        parent::setup();
42
        $this->getEntityGenerator()->generateEntity(self::TEST_ENTITY_CAR);
43
        $this->fieldGenerator = $this->getFieldGenerator();
44
    }
45
46
    public function testFieldMustContainEntityNamespace()
47
    {
48
        $this->expectException(\InvalidArgumentException::class);
49
        $this->fieldGenerator->generateField(
50
            '\\Blah\\Foop',
51
            MappingHelper::TYPE_STRING,
52
            null,
53
            true,
54
            true
55
        );
56
    }
57
58
    public function testFieldTypeMustBeValid()
59
    {
60
        $this->expectException(\InvalidArgumentException::class);
61
        $this->fieldGenerator->generateField(
62
            '\\Blah\\Foop',
63
            'invalid',
64
            null,
65
            true,
66
            true
67
        );
68
    }
69
70
    public function testPHPTypeMustBeValid()
71
    {
72
        $this->expectException(\InvalidArgumentException::class);
73
        $this->fieldGenerator->generateField(
74
            '\\Blah\\Foop',
75
            MappingHelper::PHP_TYPE_FLOAT,
76
            'invalid',
77
            true,
78
            true
79
        );
80
    }
81
82
    /**
83
     * Build and then test a field
84
     *
85
     * @param string $name
86
     * @param string $type
87
     *
88
     * @param bool   $isNullable
89
     *
90
     * @param bool   $isUnique
91
     *
92
     * @return string
93
     * @throws \EdmondsCommerce\DoctrineStaticMeta\Exception\DoctrineStaticMetaException
94
     * @SuppressWarnings(PHPMD.StaticAccess)
95
     * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
96
     */
97
    protected function buildAndCheck(
98
        string $name,
99
        string $type,
100
        bool $isNullable = true,
101
        bool $isUnique = false
102
    ): string {
103
        $fieldTraitFqn = $this->fieldGenerator->generateField(
104
            $name,
105
            $type,
106
            null,
107
            $isNullable,
108
            $isUnique
109
        );
110
111
        $this->qaGeneratedCode();
112
        $basePath        = self::WORK_DIR.'src/Entity/Fields/';
113
        $namespaceHelper = new NamespaceHelper();
114
        $basename        = $namespaceHelper->basename($name);
115
116
        $interfacePath = $basePath.'Interfaces/'.Inflector::classify($basename).'FieldInterface.php';
117
        $this->assertNoMissedReplacements($interfacePath);
118
119
        $traitPath = $basePath.'Traits/'.Inflector::classify($basename).'FieldTrait.php';
120
        $this->assertNoMissedReplacements($traitPath);
121
122
        $interfaceContents = file_get_contents($interfacePath);
123
        $traitContents     = file_get_contents($traitPath);
124
125
        if (!\in_array($type, [MappingHelper::TYPE_TEXT, MappingHelper::TYPE_STRING], true)) {
126
            $this->assertNotContains(': string', $interfaceContents);
127
            $this->assertNotContains('(string', $interfaceContents);
128
            $this->assertNotContains(': string', $traitContents);
129
            $this->assertNotContains('(string', $traitContents);
130
        }
131
132
        if ($type === MappingHelper::TYPE_BOOLEAN) {
133
            $this->assertNotContains('public function get', $interfaceContents);
134
            $this->assertNotContains('public function isIs', $interfaceContents, '', true);
135
            $this->assertNotContains('public function get', $traitContents);
136
            $this->assertNotContains('public function isIs', $traitContents, '', true);
137
        }
138
139
        return $fieldTraitFqn;
140
    }
141
142
    public function testBuildFieldsAndSetToEntity()
143
    {
144
        $this->getEntityGenerator()->generateEntity(self::TEST_ENTITY_CAR);
145
        foreach (self::CAR_FIELDS_TO_TYPES as $args) {
146
            $fieldFqn = $this->buildAndCheck($args[0], $args[1], false);
147
            $this->fieldGenerator->setEntityHasField(self::TEST_ENTITY_CAR, $fieldFqn);
148
        }
149
        $this->qaGeneratedCode();
150
    }
151
152
    public function testBuildNullableFieldsAndSetToEntity()
153
    {
154
        $this->getEntityGenerator()->generateEntity(self::TEST_ENTITY_CAR);
155
        foreach (self::CAR_FIELDS_TO_TYPES as $args) {
156
            $fieldFqn = $this->buildAndCheck($args[0], $args[1], true);
157
            $this->fieldGenerator->setEntityHasField(self::TEST_ENTITY_CAR, $fieldFqn);
158
        }
159
        $this->qaGeneratedCode();
160
    }
161
162
    public function testBuildUniqueFieldsAndSetToEntity()
163
    {
164
        $this->getEntityGenerator()->generateEntity(self::TEST_ENTITY_CAR);
165
        foreach (self::UNIQUE_FIELDS_TO_TYPES as $args) {
166
            $fieldFqn = $this->buildAndCheck($args[0], $args[1], true, true);
167
            $this->fieldGenerator->setEntityHasField(self::TEST_ENTITY_CAR, $fieldFqn);
168
        }
169
        $this->qaGeneratedCode();
170
    }
171
}
172