Skip to content

Commit ec2067f

Browse files
authored
Add ArrayAppendHelperTrait (#14)
1 parent 4b50903 commit ec2067f

File tree

3 files changed

+282
-0
lines changed

3 files changed

+282
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
namespace Yoanm\JsonRpcHttpServerSwaggerDoc\App\Helper;
3+
4+
/**
5+
* Class ArrayAppendHelperTrait
6+
*/
7+
trait ArrayAppendHelperTrait
8+
{
9+
/**
10+
* @param string $key
11+
* @param mixed $value
12+
* @param array $doc
13+
*
14+
* @return array
15+
*/
16+
protected function appendIfValueHaveSiblings(string $key, array $value, array $doc = [])
17+
{
18+
return $this->appendIf((count($value) > 0), $key, $value, $doc);
19+
}
20+
21+
/**
22+
* @param string $key
23+
* @param mixed $value
24+
* @param array $doc
25+
*
26+
* @return array
27+
*/
28+
protected function appendIfValueNotNull(string $key, $value, array $doc = [])
29+
{
30+
return $this->appendIf((null !== $value), $key, $value, $doc);
31+
}
32+
33+
/**
34+
* @param bool $doAppend
35+
* @param string $key
36+
* @param mixed $value
37+
* @param array $doc
38+
*
39+
* @return array
40+
*/
41+
protected function appendIf(bool $doAppend, string $key, $value, array $doc = [])
42+
{
43+
if (true === $doAppend) {
44+
$doc[$key] = $value;
45+
}
46+
47+
return $doc;
48+
}
49+
}
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
<?php
2+
namespace Tests\Functional\App\Helper;
3+
4+
use PHPUnit\Framework\TestCase;
5+
use Prophecy\Argument;
6+
use Yoanm\JsonRpcHttpServerSwaggerDoc\App\Helper\ArrayAppendHelperTrait;
7+
use Yoanm\JsonRpcServerDoc\Domain\Model\ErrorDoc;
8+
9+
/**
10+
* @covers \Yoanm\JsonRpcHttpServerSwaggerDoc\App\Helper\ArrayAppendHelperTrait
11+
*
12+
* @group ArrayAppendHelperTrait
13+
*/
14+
class ArrayAppendHelperTraitTest extends TestCase
15+
{
16+
/** @var ArrayAppendHelperTrait|ConcreteArrayAppendHelper */
17+
private $helper;
18+
19+
const DEFAULT_ERROR_SHAPE = ['default-error-shape'];
20+
const DEFAULT_DATA_DOC = ['default-data-doc'];
21+
22+
public function setUp()
23+
{
24+
$this->helper = new ConcreteArrayAppendHelper();
25+
}
26+
27+
/**
28+
* @dataProvider provideManagedAppendIfValueList
29+
*
30+
* @param ErrorDoc $errorDoc
31+
* @param array $expected
32+
*/
33+
public function testAppendIfShouldHandle($doAppend, $key, $value, array $previous, array $expected)
34+
{
35+
$this->assertSame(
36+
$expected,
37+
$this->helper->testAppendIf($doAppend, $key, $value, $previous)
38+
);
39+
}
40+
41+
/**
42+
* @dataProvider provideManagedAppendIfValueNotNullValueList
43+
*
44+
* @param ErrorDoc $errorDoc
45+
* @param array $expected
46+
*/
47+
public function testAppendIfValueNotNullShouldHandle($key, $value, array $previous, array $expected)
48+
{
49+
$this->assertSame(
50+
$expected,
51+
$this->helper->testAppendIfValueNotNull($key, $value, $previous)
52+
);
53+
}
54+
55+
/**
56+
* @dataProvider provideManagedAppendIfValueHaveSiblingsValueList
57+
*
58+
* @param ErrorDoc $errorDoc
59+
* @param array $expected
60+
*/
61+
public function testAppendIfValueHaveSiblingsShouldHandle($key, $value, array $previous, array $expected)
62+
{
63+
$this->assertSame(
64+
$expected,
65+
$this->helper->testAppendIfValueHaveSiblings($key, $value, $previous)
66+
);
67+
}
68+
69+
/**
70+
* @return array
71+
*/
72+
public function provideManagedAppendIfValueList()
73+
{
74+
return [
75+
'Do not append' => [
76+
'doAppend' => false,
77+
'key' => 'my-key',
78+
'value' => 'my-value',
79+
'previous' => [],
80+
'expected' => [],
81+
],
82+
'Do append' => [
83+
'doAppend' => true,
84+
'key' => 'my-key',
85+
'value' => 'my-value',
86+
'previous' => [],
87+
'expected' => ['my-key' => 'my-value'],
88+
],
89+
'Do not append with previous' => [
90+
'doAppend' => false,
91+
'key' => 'my-key',
92+
'value' => 'my-value',
93+
'previous' => ['my-previous-key' => 'my-previous-value'],
94+
'expected' => [
95+
'my-previous-key' => 'my-previous-value',
96+
],
97+
],
98+
'Do append with previous' => [
99+
'doAppend' => true,
100+
'key' => 'my-key',
101+
'value' => 'my-value',
102+
'previous' => ['my-previous-key' => 'my-previous-value'],
103+
'expected' => [
104+
'my-previous-key' => 'my-previous-value',
105+
'my-key' => 'my-value'
106+
],
107+
],
108+
];
109+
}
110+
111+
/**
112+
* @return array
113+
*/
114+
public function provideManagedAppendIfValueNotNullValueList()
115+
{
116+
return [
117+
'null value' => [
118+
'key' => 'my-key',
119+
'value' => null,
120+
'previous' => [],
121+
'expected' => [],
122+
],
123+
'Not null value' => [
124+
'key' => 'my-key',
125+
'value' => 'my-value',
126+
'previous' => [],
127+
'expected' => ['my-key' => 'my-value'],
128+
],
129+
'null value with previous' => [
130+
'key' => 'my-key',
131+
'value' => null,
132+
'previous' => ['my-previous-key' => 'my-previous-value'],
133+
'expected' => [
134+
'my-previous-key' => 'my-previous-value',
135+
],
136+
],
137+
'Not null value with previous' => [
138+
'key' => 'my-key',
139+
'value' => 'my-value',
140+
'previous' => ['my-previous-key' => 'my-previous-value'],
141+
'expected' => [
142+
'my-previous-key' => 'my-previous-value',
143+
'my-key' => 'my-value'
144+
],
145+
],
146+
];
147+
}
148+
149+
/**
150+
* @return array
151+
*/
152+
public function provideManagedAppendIfValueHaveSiblingsValueList()
153+
{
154+
return [
155+
'Without sibling' => [
156+
'key' => 'my-key',
157+
'value' => [],
158+
'previous' => [],
159+
'expected' => [],
160+
],
161+
'With siblings' => [
162+
'key' => 'my-key',
163+
'value' => ['my-value'],
164+
'previous' => [],
165+
'expected' => ['my-key' => ['my-value']],
166+
],
167+
'Without sibling and with previous' => [
168+
'key' => 'my-key',
169+
'value' => [],
170+
'previous' => ['my-previous-key' => 'my-previous-value'],
171+
'expected' => [
172+
'my-previous-key' => 'my-previous-value',
173+
],
174+
],
175+
'With siblings and previous' => [
176+
'key' => 'my-key',
177+
'value' => ['my-value'],
178+
'previous' => ['my-previous-key' => 'my-previous-value'],
179+
'expected' => [
180+
'my-previous-key' => 'my-previous-value',
181+
'my-key' => ['my-value']
182+
],
183+
],
184+
];
185+
}
186+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
namespace Tests\Functional\App\Helper;
3+
4+
use Prophecy\Argument;
5+
use Yoanm\JsonRpcHttpServerSwaggerDoc\App\Helper\ArrayAppendHelperTrait;
6+
7+
class ConcreteArrayAppendHelper
8+
{
9+
use ArrayAppendHelperTrait;
10+
11+
/**
12+
* @param string $key
13+
* @param mixed $value
14+
* @param array $doc
15+
*
16+
* @return array
17+
*/
18+
public function testAppendIfValueHaveSiblings(string $key, array $value, array $doc = [])
19+
{
20+
return $this->appendIfValueHaveSiblings($key, $value, $doc);
21+
}
22+
23+
/**
24+
* @param string $key
25+
* @param mixed $value
26+
* @param array $doc
27+
*
28+
* @return array
29+
*/
30+
public function testAppendIfValueNotNull(string $key, $value, array $doc = [])
31+
{
32+
return $this->appendIfValueNotNull($key, $value, $doc);
33+
}
34+
35+
/**
36+
* @param bool $doAppend
37+
* @param string $key
38+
* @param mixed $value
39+
* @param array $doc
40+
*
41+
* @return array
42+
*/
43+
public function testAppendIf(bool $doAppend, string $key, $value, array $doc = [])
44+
{
45+
return $this->appendIf($doAppend, $key, $value, $doc);
46+
}
47+
}

0 commit comments

Comments
 (0)