Completed
Push — master ( 7e3691...614a48 )
by Christopher
05:10
created

EdmxTest::pluralize()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 19
Code Lines 13

Duplication

Lines 15
Ratio 78.95 %

Importance

Changes 2
Bugs 1 Features 1
Metric Value
c 2
b 1
f 1
dl 15
loc 19
rs 8.8571
cc 6
eloc 13
nc 5
nop 3
1
<?php
2
3
namespace AlgoWeb\ODataMetadata\Tests;
4
5
use AlgoWeb\ODataMetadata\MetadataV3\edm\Schema;
6
use AlgoWeb\ODataMetadata\MetadataV3\edmx\Edmx;
7
8
use Illuminate\Support\Str;
9
10
use AlgoWeb\ODataMetadata\MetadataV3\edmx\TDataServicesType;
11
use AlgoWeb\ODataMetadata\MetadataV3\edmx\TEdmxType;
12
13
class EdmxTest extends TestCase
14
{
15
    public function testIsOKAtDefault()
16
    {
17
        $msg = null;
18
        $edmx = new Edmx();
19
        $this->assertTrue($edmx->isOK($msg), $msg);
20
    }
21
22
    public function testDefaultSerializeOk()
23
    {
24
        $ds = DIRECTORY_SEPARATOR;
25
        $msg = null;
26
        $edmx = new Edmx();
27
        $this->assertTrue($edmx->isOK($msg), $msg);
28
        $this->assertNull($msg);
29
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
30
        $serializer =
31
            \JMS\Serializer\SerializerBuilder::create()
32
                ->addMetadataDir($ymlDir)
33
                ->build();
34
        $d = $serializer->serialize($edmx, "xml");
35
        $this->v3MetadataAgainstXSD($d);
36
    }
37
38 View Code Duplication
    public function v3MetadataAgainstXSD($data)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
39
    {
40
        $ds = DIRECTORY_SEPARATOR;
41
42
        $goodxsd = dirname(__DIR__) . $ds . "xsd" . $ds . "Microsoft.Data.Entity.Design.Edmx_3.Fixed.xsd";
43
        if (!file_exists($goodxsd)) {
44
            return true;
45
        }
46
        $xml = new \DOMDocument();
47
        $xml->loadXML($data);
48
        $xml->schemaValidate($goodxsd);
49
        return true;
50
    }
51
52
    public function testDefaultSerializeDeserializeRoundTrip()
53
    {
54
        $ds = DIRECTORY_SEPARATOR;
55
        $msg = null;
56
        $edmx = new Edmx();
57
        $this->assertTrue($edmx->isOK($msg), $msg);
58
        $this->assertNull($msg);
59
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg);
60
    }
61
62
    /**
63
     * @param $ds
64
     * @param $edmx
65
     * @param $msg
66
     */
67
    private function checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg)
68
    {
69
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
70
        $serializer =
71
            \JMS\Serializer\SerializerBuilder::create()
72
                ->addMetadataDir($ymlDir)
73
                ->build();
74
        $d1 = $serializer->serialize($edmx, "xml");
75
        $this->v3MetadataAgainstXSD($d1);
76
        $edmxElectricBoogaloo = $serializer->deserialize($d1, get_class($edmx), 'xml');
77
        $this->assertTrue($edmxElectricBoogaloo->isOK($msg), $msg);
78
        $this->assertEquals($edmx, $edmxElectricBoogaloo);
79
        // and final serialize pass to further constrain undetected misbehaviour
80
        $d2 = $serializer->serialize($edmxElectricBoogaloo, 'xml');
81
        $this->v3MetadataAgainstXSD($d2);
82
        $this->assertEquals($d1, $d2);
83
    }
84
85
    public function testFirstLevelSerializeDeserializeRoundTrip()
86
    {
87
        $ds = DIRECTORY_SEPARATOR;
88
        $msg = null;
89
        $schema = new Schema('data', 'metadata');
90
        $this->assertTrue($schema->isOK($msg), $msg);
91
        $services = new TDataServicesType('3.0', '1.0');
92
        $services->addToSchema($schema);
93
        $this->assertTrue($services->isOK($msg), $msg);
94
        $edmx = new Edmx();
95
        $edmx->setDataServiceType($services);
96
        $this->assertTrue($edmx->isOK($msg), $msg);
97
        $this->assertNull($msg);
98
99
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg);
100
    }
101
102
    public function testWithSingleEntitySerializeOk()
103
    {
104
        $ds = DIRECTORY_SEPARATOR;
105
        $msg = null;
106
        $NewEntity = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityTypeType();
107
        $NewEntity->setName("simpleEntityType");
108
        $this->assertTrue($NewEntity->isOK($msg), $msg);
109
        $this->assertNull($msg);
110
        $edmx = new Edmx();
111
        $edmx->getDataServiceType()->getSchema()[0]->addToEntityType($NewEntity);
112
        $this->assertTrue($edmx->isOK($msg), $msg);
113
        $this->assertNull($msg);
114
115
116
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
117
        $serializer =
118
            \JMS\Serializer\SerializerBuilder::create()
119
                ->addMetadataDir($ymlDir)
120
                ->build();
121
        $d = $serializer->serialize($edmx, "xml");
122
123
        $this->v3MetadataAgainstXSD($d);
124
    }
125
126
    public function testWithSingleEntitySerializeDeserializeRoundTrip()
127
    {
128
        $ds = DIRECTORY_SEPARATOR;
129
        $msg = null;
130
        $NewEntity = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityTypeType();
131
        $NewEntity->setName("simpleEntityType");
132
        $this->assertTrue($NewEntity->isOK($msg), $msg);
133
        $this->assertNull($msg);
134
        $edmx = new Edmx();
135
        $edmx->getDataServiceType()->getSchema()[0]->addToEntityType($NewEntity);
136
        $this->assertTrue($edmx->isOK($msg), $msg);
137
        $this->assertNull($msg);
138
139
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg);
140
    }
141
142 View Code Duplication
    public function testKnownGoodV3DocumentDeserialiseToOk()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
143
    {
144
        $this->markTestSkipped('Skipped until service-document models get implemented');
145
        $ds = DIRECTORY_SEPARATOR;
146
        $msg = null;
147
148
        $docLocation = dirname(__DIR__) . $ds . "tests" . $ds . "exampleV3ServiceDocument.xml";
149
        $document = file_get_contents($docLocation);
150
        $type = 'AlgoWeb\ODataMetadata\MetadataV3\edmx\TDataServicesType';
151
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
152
153
        $serializer =
154
            \JMS\Serializer\SerializerBuilder::create()
155
                ->addMetadataDir($ymlDir)
156
                ->build();
157
158
        $d = $serializer->deserialize($document, $type, 'xml');
159
        $this->assertTrue($d instanceof TDataServicesType, get_class($this));
160
        $this->assertTrue($d->isOK($msg), $msg);
161
    }
162
163 View Code Duplication
    public function testKnownGoodV3MetadataDeserialiseToOk()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
164
    {
165
        $ds = DIRECTORY_SEPARATOR;
166
        $msg = null;
167
168
        $docLocation = dirname(__DIR__) . $ds . "tests" . $ds . "exampleV3ServiceMetadata.xml";
169
        $document = file_get_contents($docLocation);
170
        $type = 'AlgoWeb\ODataMetadata\MetadataV3\edmx\Edmx';
171
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
172
173
        $serializer =
174
            \JMS\Serializer\SerializerBuilder::create()
175
                ->addMetadataDir($ymlDir)
176
                ->build();
177
178
        $d = $serializer->deserialize($document, $type, 'xml');
179
        $this->assertTrue($d instanceof TEdmxType, get_class($d));
180
        $this->assertTrue($d->isOK($msg), $msg);
181
    }
182
183
    public function testKnownGoodV3MetadataDeserialiseToOkSerializeDeserializeRoundTrip()
184
    {
185
        $this->markTestSkipped();
186
        $ds = DIRECTORY_SEPARATOR;
187
        $msg = null;
188
189
        $docLocation = dirname(__DIR__) . $ds . "tests" . $ds . "exampleV3ServiceMetadata.xml";
190
        $document = file_get_contents($docLocation);
191
        $this->v3MetadataAgainstXSD($document);
192
        $type = 'AlgoWeb\ODataMetadata\MetadataV3\edmx\Edmx';
193
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
194
195
        $serializer =
196
            \JMS\Serializer\SerializerBuilder::create()
197
                ->addMetadataDir($ymlDir)
198
                ->build();
199
200
        $d = $serializer->deserialize($document, $type, 'xml');
201
        $this->assertTrue($d instanceof TEdmxType, get_class($d));
202
        $this->assertTrue($d->isOK($msg), $msg);
203
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $d, $msg);
204
    }
205
206
    public function testWithSingleEntityWithPropertiesSerializeOk()
207
    {
208
        $ds = DIRECTORY_SEPARATOR;
209
        $msg = null;
210
        $NewProperty = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityPropertyType();
211
        $NewProperty->setName("TheFirstProperty");
212
        $NewProperty->setType("String");
213
        $this->assertTrue($NewProperty->isOK($msg), $msg);
214
        $this->assertNull($msg);
215
216
        $NewEntity = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityTypeType();
217
        $NewEntity->setName("simpleEntityType");
218
        $NewEntity->addToProperty($NewProperty);
219
        $this->assertTrue($NewEntity->isOK($msg), $msg);
220
        $this->assertNull($msg);
221
222
        $entitySet = new \AlgoWeb\ODataMetadata\MetadataV3\edm\EntityContainer\EntitySetAnonymousType();
223
        $entitySet->setName(Str::plural($NewEntity->getName(), 2));
224
        $entitySet->setEntityType($NewEntity->getName());
225
        $this->assertTrue($entitySet->isOK($msg), $msg);
226
        $this->assertNull($msg);
227
        $edmx = new Edmx();
228
        $edmx->getDataServiceType()->getSchema()[0]->addToEntityType($NewEntity);
229
        $edmx->getDataServiceType()->getSchema()[0]->getEntityContainer()[0]->addToEntitySet($entitySet);
230
        $this->assertTrue($edmx->isOK($msg), $msg);
231
        $this->assertNull($msg);
232
233
234
        $ymlDir = dirname(__DIR__) . $ds . "src" . $ds . "MetadataV3" . $ds . "JMSmetadata";
235
        $serializer =
236
            \JMS\Serializer\SerializerBuilder::create()
237
                ->addMetadataDir($ymlDir)
238
                ->build();
239
        $d = $serializer->serialize($edmx, "xml");
240
        $this->v3MetadataAgainstXSD($d);
241
    }
242
243
    public function testWithSingleEntityWithPropertiesSerializeDeserializeRoundTrip()
244
    {
245
        $ds = DIRECTORY_SEPARATOR;
246
        $msg = null;
247
        $NewProperty = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityPropertyType();
248
        $NewProperty->setName("TheFirstProperty");
249
        $NewProperty->setType("String");
250
        $this->assertTrue($NewProperty->isOK($msg), $msg);
251
        $this->assertNull($msg);
252
253
        $NewEntity = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityTypeType();
254
        $NewEntity->setName("simpleEntityType");
255
        $NewEntity->addToProperty($NewProperty);
256
        $this->assertTrue($NewEntity->isOK($msg), $msg);
257
        $this->assertNull($msg);
258
259
        $entitySet = new \AlgoWeb\ODataMetadata\MetadataV3\edm\EntityContainer\EntitySetAnonymousType();
260
        $entitySet->setName(Str::plural($NewEntity->getName(), 2));
261
        $entitySet->setEntityType($NewEntity->getName());
262
        $this->assertTrue($entitySet->isOK($msg), $msg);
263
        $this->assertNull($msg);
264
        $edmx = new Edmx();
265
        $edmx->getDataServiceType()->getSchema()[0]->addToEntityType($NewEntity);
266
        $edmx->getDataServiceType()->getSchema()[0]->getEntityContainer()[0]->addToEntitySet($entitySet);
267
        $this->assertTrue($edmx->isOK($msg), $msg);
268
        $this->assertNull($msg);
269
270
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg);
271
    }
272
273
    public function testWithSingleEntityWithoutPropertiesSerializeDeserializeRoundTrip()
274
    {
275
        $ds = DIRECTORY_SEPARATOR;
276
        $msg = null;
277
278
        $NewEntity = new \AlgoWeb\ODataMetadata\MetadataV3\edm\TEntityTypeType();
279
        $NewEntity->setName("simpleEntityType");
280
        $this->assertTrue($NewEntity->isOK($msg), $msg);
281
        $this->assertNull($msg);
282
283
        $entitySet = new \AlgoWeb\ODataMetadata\MetadataV3\edm\EntityContainer\EntitySetAnonymousType();
284
        $entitySet->setName(Str::plural($NewEntity->getName(), 2));
285
        $entitySet->setEntityType($NewEntity->getName());
286
        $this->assertTrue($entitySet->isOK($msg), $msg);
287
        $this->assertNull($msg);
288
        $edmx = new Edmx();
289
        $edmx->getDataServiceType()->getSchema()[0]->addToEntityType($NewEntity);
290
        $edmx->getDataServiceType()->getSchema()[0]->getEntityContainer()[0]->addToEntitySet($entitySet);
291
        $this->assertTrue($edmx->isOK($msg), $msg);
292
        $this->assertNull($msg);
293
294
        $this->checkEdmxSerialiseDeserialiseRoundTrip($ds, $edmx, $msg);
295
    }
296
}
297