Skip to content

Commit 7088e37

Browse files
committed
Add unittest templates everywhere and fix issue #13
1 parent 2d43667 commit 7088e37

18 files changed

+4530
-11
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
/**
3+
* This file contains the ApibFileParserTest.php
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\In\Tests;
10+
11+
12+
use PHPDraft\Core\TestBase;
13+
14+
class ApibFileParserTest extends TestBase
15+
{
16+
17+
}

src/PHPDraft/Model/DataStructureElement.php

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,9 @@
1010

1111
use PHPDraft\Model\Elements\ArrayStructureElement;
1212

13-
class DataStructureElement
13+
class DataStructureElement implements StructureElement
1414
{
15-
/**
16-
* Default datatypes
17-
* @var array
18-
*/
19-
const DEFAULTS = ['boolean', 'string', 'number', 'object', 'array'];
15+
2016
/**
2117
* Object key
2218
* @var string
@@ -68,17 +64,26 @@ public function parse($object, &$dependencies)
6864
return $this;
6965
}
7066
$this->element = $object->element;
67+
7168
if (isset($object->content) && is_array($object->content))
7269
{
7370
foreach ($object->content as $value)
7471
{
75-
$struct = new DataStructureElement();
72+
if (in_array($this->element, ['object', 'dataStructure']))
73+
{
74+
$struct = new DataStructureElement();
75+
}
76+
else
77+
{
78+
$struct = new EnumStructureElement();
79+
}
7680
$this->value[] = $struct->parse($value, $dependencies);
7781
}
7882

7983
return $this;
8084
}
8185

86+
8287
$this->key = $object->content->key->content;
8388
$this->type = $object->content->value->element;
8489
$this->description = isset($object->meta->description) ? $object->meta->description : NULL;
@@ -90,13 +95,17 @@ public function parse($object, &$dependencies)
9095
$dependencies[] = $this->type;
9196
}
9297

93-
if ($this->type === 'object' || $this->type === 'array')
98+
if ($this->type === 'object' || $this->type === 'array' || $this->type === 'enum' || !in_array($this->type, self::DEFAULTS))
9499
{
95100
$value = isset($object->content->value->content) ? $object->content->value : NULL;
96101
if ($this->type === 'array')
97102
{
98103
$this->value = new ArrayStructureElement();
99104
}
105+
elseif ($this->type === 'enum')
106+
{
107+
$this->value = new EnumStructureElement();
108+
}
100109
else
101110
{
102111
$this->value = new DataStructureElement();
@@ -128,7 +137,15 @@ function __toString()
128137
$return = '<table class="table table-striped">';
129138
foreach ($this->value as $object)
130139
{
131-
if (is_string($object) || get_class($object) === self::class || get_class($object) === ArrayStructureElement::class)
140+
if (get_class($object) === \stdClass::class)
141+
{
142+
return json_encode($object);
143+
}
144+
if (is_string($object)
145+
|| get_class($object) === self::class
146+
|| get_class($object) === ArrayStructureElement::class
147+
|| get_class($object) === EnumStructureElement::class
148+
)
132149
{
133150
$return .= $object;
134151
}
@@ -156,6 +173,10 @@ function __toString()
156173
{
157174
$value = '<div class="array-struct">' . $this->value . '</div>';
158175
}
176+
elseif (is_array($this->value) && (EnumStructureElement::class === get_class($this->value[0])))
177+
{
178+
$value = '<div class="enum-struct">' . $this->value . '</div>';
179+
}
159180
else
160181
{
161182
$value = '<span class="example-value pull-right">' . $this->value . '</span>';

src/PHPDraft/Model/Elements/ArrayStructureElement.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010

1111

1212
use PHPDraft\Model\DataStructureElement;
13+
use PHPDraft\Model\EnumStructureElement;
14+
use PHPDraft\Model\StructureElement;
1315

14-
class ArrayStructureElement extends DataStructureElement
16+
class ArrayStructureElement extends DataStructureElement implements StructureElement
1517
{
1618

1719
public function parse($item, &$dependencies)
1820
{
1921
$this->element = (isset($item->element)) ? $item->element : 'array';
20-
$this->element = (isset($item->element)) ? $item->element : NULL;
2122
$this->value = (isset($item->content)) ? $item->content : NULL;
2223

2324
if (isset($item->content))
@@ -35,6 +36,10 @@ public function parse($item, &$dependencies)
3536
$value = new DataStructureElement();
3637
$this->value[$key] = $value->parse($sub_item, $dependencies);
3738
break;
39+
case 'enum':
40+
$value = new EnumStructureElement();
41+
$this->value[$key] = $value->parse($sub_item, $dependencies);
42+
break;
3843
default:
3944
$this->value[$key] = (isset($sub_item->content)) ? $sub_item->content : NULL;
4045
break;
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
/**
3+
* This file contains the ArrayStructureTest.php
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\Model\Elements\Tests;
10+
11+
12+
use PHPDraft\Core\TestBase;
13+
use PHPDraft\Model\Elements\ArrayStructureElement;
14+
15+
class ArrayStructureTest extends TestBase
16+
{
17+
public function setUp()
18+
{
19+
$this->class = new ArrayStructureElement();
20+
$this->reflection = new ArrayStructureElement('PHPDraft\Model\DataStructureElement');
21+
}
22+
23+
public function tearDown()
24+
{
25+
unset($this->class);
26+
unset($this->reflection);
27+
}
28+
29+
//
30+
/**
31+
// * Parse different objects
32+
// *
33+
// * @dataProvider parseObjectProvider
34+
// *
35+
// * @param string $object JSON Object
36+
// * @param ArrayStructureElement $expected Expected Object output
37+
// */
38+
// public function testSuccesfulParse($object, $expected)
39+
// {
40+
// $dep = [];
41+
// $this->class->parse(json_decode($object), $dep);
42+
// $this->assertSame($this->class->key, $expected->key);
43+
// $this->assertSame($this->class->value, $expected->value);
44+
// $this->assertSame($this->class->element, $expected->element);
45+
// $this->assertSame($this->class->type, $expected->type);
46+
// }
47+
/**
48+
* Provide objects to parse including expected outcome
49+
*
50+
* @return array
51+
*/
52+
public function parseObjectProvider()
53+
{
54+
$return = [];
55+
$base1 = new ArrayStructureElement();
56+
$base1->key = 'Content-Type';
57+
$base1->value = 'application/json';
58+
$base1->element = 'member';
59+
$base1->type = 'Struct2';
60+
61+
$base2 = new ArrayStructureElement();
62+
$base2->key = 'Auth2';
63+
$base2->value = 'something';
64+
$base2->element = 'member';
65+
$base2->type = 'Struct1';
66+
67+
// $return[] = [
68+
// '{"element": "member", "meta": { "description": "Files to be added. Need to be downloaded from the server. Contains relative paths"},
69+
// "attributes": { "typeAttributes": ["required"]},"content": {"key": {"element": "string","content": "add"},"value": {"element": "array"}}}',
70+
// $base1,
71+
// ];
72+
// $return[] = [
73+
// '{"element":"member","meta":{"description":"A json array of categories associated with the item"},"attributes":{"typeAttributes":["required"]},
74+
// "content":{"key":{"element":"string","content":"categoryIds"},"value":{"element":"array","content":[{"element":"string",
75+
// "content":"\"[\"111\",\"222\",\"333\"]\""}]}}}',
76+
// $base2,
77+
// ];
78+
79+
return $return;
80+
}
81+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
/**
3+
* This file contains the RequestBodyElementTest.php
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\Model\Elements\Tests;
10+
11+
12+
use PHPDraft\Core\TestBase;
13+
14+
class RequestBodyElementTest extends TestBase
15+
{
16+
17+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
/**
3+
* This file contains the ${FILE_NAME}
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\Model;
10+
11+
12+
use PHPDraft\Model\Elements\ArrayStructureElement;
13+
14+
class EnumStructureElement implements StructureElement
15+
{
16+
/**
17+
* Object description
18+
* @var string
19+
*/
20+
public $description;
21+
/**
22+
* Type of element
23+
* @var string
24+
*/
25+
public $element = NULL;
26+
/**
27+
* Object value
28+
* @var mixed
29+
*/
30+
public $value = NULL;
31+
/**
32+
* Object status (required|optional)
33+
* @var string
34+
*/
35+
public $status = '';
36+
/**
37+
* List of object dependencies
38+
* @var string[]
39+
*/
40+
public $deps;
41+
42+
/**
43+
* Parse a JSON object to a structure
44+
*
45+
* @param \stdClass $item An object to parse
46+
* @param array $dependencies Dependencies of this object
47+
*
48+
* @return EnumStructureElement self reference
49+
*/
50+
function parse($item, &$dependencies)
51+
{
52+
$this->element = (isset($item->element)) ? $item->element : NULL;
53+
$this->description = (isset($item->meta->description)) ? $item->meta->description : NULL;
54+
$this->value = (isset($item->content)) ? $item->content : NULL;
55+
56+
if (!in_array($this->element, self::DEFAULTS))
57+
{
58+
$dependencies[] = $this->element;
59+
}
60+
61+
return $this;
62+
}
63+
64+
/**
65+
* Print a string representation
66+
*
67+
* @return string
68+
*/
69+
function __toString()
70+
{
71+
$type = (!in_array($this->element, self::DEFAULTS)) ?
72+
'<a class="code" href="#object-' . $this->element . '">' . $this->element . '</a>' : '<code>' . $this->element . '</code>';
73+
$return = '<tr>' .
74+
'<td><span>' . $this->value . '</span></td>' .
75+
'<td>'.$type.'</td>' .
76+
'<td><span>' . $this->description . '</span></td>' .
77+
'</tr>';
78+
return $return;
79+
}
80+
81+
82+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
/**
3+
* This file contains the StructureElement.php
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\Model;
10+
11+
12+
interface StructureElement
13+
{
14+
/**
15+
* Default datatypes
16+
* @var array
17+
*/
18+
const DEFAULTS = ['boolean', 'string', 'number', 'object', 'array'];
19+
20+
/**
21+
* Parse a JSON object to a structure
22+
*
23+
* @param \stdClass $object An object to parse
24+
* @param array $dependencies Dependencies of this object
25+
*
26+
* @return StructureElement self reference
27+
*/
28+
function parse($object, &$dependencies);
29+
30+
/**
31+
* Print a string representation
32+
*
33+
* @return string
34+
*/
35+
function __toString();
36+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
/**
3+
* This file contains the CategoryTest.php
4+
*
5+
* @package php-drafter\SOMETHING
6+
* @author Sean Molenaar<[email protected]>
7+
*/
8+
9+
namespace PHPDraft\Model\Tests;
10+
11+
12+
use PHPDraft\Core\TestBase;
13+
14+
class CategoryTest extends TestBase
15+
{
16+
17+
}

0 commit comments

Comments
 (0)