Open Journal Systems  3.3.0
ParameterTest.php
1 <?php
2 
4 
7 
12 {
13  protected $data = array(
14  'name' => 'foo',
15  'type' => 'bar',
16  'required' => true,
17  'default' => '123',
18  'description' => '456',
19  'minLength' => 2,
20  'maxLength' => 5,
21  'location' => 'body',
22  'static' => 'static!',
23  'filters' => array('trim', 'json_encode')
24  );
25 
26  public function testCreatesParamFromArray()
27  {
28  $p = new Parameter($this->data);
29  $this->assertEquals('foo', $p->getName());
30  $this->assertEquals('bar', $p->getType());
31  $this->assertEquals(true, $p->getRequired());
32  $this->assertEquals('123', $p->getDefault());
33  $this->assertEquals('456', $p->getDescription());
34  $this->assertEquals(2, $p->getMinLength());
35  $this->assertEquals(5, $p->getMaxLength());
36  $this->assertEquals('body', $p->getLocation());
37  $this->assertEquals('static!', $p->getStatic());
38  $this->assertEquals(array('trim', 'json_encode'), $p->getFilters());
39  }
40 
41  public function testCanConvertToArray()
42  {
43  $p = new Parameter($this->data);
44  unset($this->data['name']);
45  $this->assertEquals($this->data, $p->toArray());
46  }
47 
48  public function testUsesStatic()
49  {
50  $d = $this->data;
51  $d['default'] = 'booboo';
52  $d['static'] = true;
53  $p = new Parameter($d);
54  $this->assertEquals('booboo', $p->getValue('bar'));
55  }
56 
57  public function testUsesDefault()
58  {
59  $d = $this->data;
60  $d['default'] = 'foo';
61  $d['static'] = null;
62  $p = new Parameter($d);
63  $this->assertEquals('foo', $p->getValue(null));
64  }
65 
66  public function testReturnsYourValue()
67  {
68  $d = $this->data;
69  $d['static'] = null;
70  $p = new Parameter($d);
71  $this->assertEquals('foo', $p->getValue('foo'));
72  }
73 
75  {
76  $d = $this->data;
77  $d['default'] = '1';
78  $d['static'] = null;
79  $p = new Parameter($d);
80  $this->assertEquals('0', $p->getValue('0'));
81  }
82 
83  public function testFiltersValues()
84  {
85  $d = $this->data;
86  $d['static'] = null;
87  $d['filters'] = 'strtoupper';
88  $p = new Parameter($d);
89  $this->assertEquals('FOO', $p->filter('foo'));
90  }
91 
92  public function testConvertsBooleans()
93  {
94  $p = new Parameter(array('type' => 'boolean'));
95  $this->assertEquals(true, $p->filter('true'));
96  $this->assertEquals(false, $p->filter('false'));
97  }
98 
100  {
101  $d = $this->data;
102  $d['filters'] = null;
103  $p = new Parameter($d);
104  $this->assertEquals(array(), $p->getFilters());
105  }
106 
108  {
109  $p = new Parameter(array('name' => 'myname', 'location' => 'foo', 'sentAs' => 'Hello'));
110  $this->assertEquals('foo', $p->getLocation());
111  $this->assertEquals('Hello', $p->getSentAs());
112  }
113 
114  public function testParsesTypeValues()
115  {
116  $p = new Parameter(array('type' => 'foo'));
117  $this->assertEquals('foo', $p->getType());
118  }
119 
124  public function testValidatesComplexFilters()
125  {
126  $p = new Parameter(array('filters' => array(array('args' => 'foo'))));
127  }
128 
129  public function testCanBuildUpParams()
130  {
131  $p = new Parameter(array());
132  $p->setName('foo')
133  ->setDescription('c')
134  ->setFilters(array('d'))
135  ->setLocation('e')
136  ->setSentAs('f')
137  ->setMaxLength(1)
138  ->setMinLength(1)
139  ->setMinimum(2)
140  ->setMaximum(2)
141  ->setMinItems(3)
142  ->setMaxItems(3)
143  ->setRequired(true)
144  ->setStatic(true)
145  ->setDefault('h')
146  ->setType('i');
147 
148  $p->addFilter('foo');
149 
150  $this->assertEquals('foo', $p->getName());
151  $this->assertEquals('h', $p->getDefault());
152  $this->assertEquals('c', $p->getDescription());
153  $this->assertEquals(array('d', 'foo'), $p->getFilters());
154  $this->assertEquals('e', $p->getLocation());
155  $this->assertEquals('f', $p->getSentAs());
156  $this->assertEquals(1, $p->getMaxLength());
157  $this->assertEquals(1, $p->getMinLength());
158  $this->assertEquals(2, $p->getMaximum());
159  $this->assertEquals(2, $p->getMinimum());
160  $this->assertEquals(3, $p->getMaxItems());
161  $this->assertEquals(3, $p->getMinItems());
162  $this->assertEquals(true, $p->getRequired());
163  $this->assertEquals(true, $p->getStatic());
164  $this->assertEquals('i', $p->getType());
165  }
166 
167  public function testAllowsNestedShape()
168  {
169  $command = $this->getServiceBuilder()->get('mock')->getCommand('mock_command')->getOperation();
170  $param = new Parameter(array(
171  'parent' => $command,
172  'name' => 'foo',
173  'type' => 'object',
174  'location' => 'query',
175  'properties' => array(
176  'foo' => array(
177  'type' => 'object',
178  'required' => true,
179  'properties' => array(
180  'baz' => array(
181  'name' => 'baz',
182  'type' => 'bool',
183  )
184  )
185  ),
186  'bar' => array(
187  'name' => 'bar',
188  'default' => '123'
189  )
190  )
191  ));
192 
193  $this->assertSame($command, $param->getParent());
194  $this->assertNotEmpty($param->getProperties());
195  $this->assertInstanceOf('Guzzle\Service\Description\Parameter', $param->getProperty('foo'));
196  $this->assertSame($param, $param->getProperty('foo')->getParent());
197  $this->assertSame($param->getProperty('foo'), $param->getProperty('foo')->getProperty('baz')->getParent());
198  $this->assertInstanceOf('Guzzle\Service\Description\Parameter', $param->getProperty('bar'));
199  $this->assertSame($param, $param->getProperty('bar')->getParent());
200 
201  $array = $param->toArray();
202  $this->assertInternalType('array', $array['properties']);
203  $this->assertArrayHasKey('foo', $array['properties']);
204  $this->assertArrayHasKey('bar', $array['properties']);
205  }
206 
207  public function testAllowsComplexFilters()
208  {
209  $that = $this;
210  $param = new Parameter(array());
211  $param->setFilters(array(array('method' => function ($a, $b, $c, $d) use ($that, $param) {
212  $that->assertEquals('test', $a);
213  $that->assertEquals('my_value!', $b);
214  $that->assertEquals('bar', $c);
215  $that->assertSame($param, $d);
216  return 'abc' . $b;
217  }, 'args' => array('test', '@value', 'bar', '@api'))));
218  $this->assertEquals('abcmy_value!', $param->filter('my_value!'));
219  }
220 
222  {
223  $param1 = new Parameter(array('name' => 'parent'));
224  $param2 = new Parameter(array('name' => 'child'));
225  $param2->setParent($param1);
226  $this->assertSame($param1, $param2->getParent());
227  }
228 
230  {
231  $param1 = new Parameter(array('name' => 'parent'));
232  $param2 = new Parameter(array('name' => 'child'));
233  $param1->addProperty($param2);
234  $this->assertSame($param1, $param2->getParent());
235  $this->assertSame($param2, $param1->getProperty('child'));
236 
237  // Remove a single child from the structure
238  $param1->removeProperty('child');
239  $this->assertNull($param1->getProperty('child'));
240  // Remove the entire structure
241  $param1->addProperty($param2);
242  $param1->removeProperty('child');
243  $this->assertNull($param1->getProperty('child'));
244  }
245 
247  {
248  $p = new Parameter(array(
249  'type' => 'object',
250  'additionalProperties' => array('type' => 'string')
251  ));
252  $this->assertInstanceOf('Guzzle\Service\Description\Parameter', $p->getAdditionalProperties());
253  $this->assertNull($p->getAdditionalProperties()->getAdditionalProperties());
254  $p = new Parameter(array('type' => 'object'));
255  $this->assertTrue($p->getAdditionalProperties());
256  }
257 
258  public function testAddsItems()
259  {
260  $p = new Parameter(array(
261  'type' => 'array',
262  'items' => array('type' => 'string')
263  ));
264  $this->assertInstanceOf('Guzzle\Service\Description\Parameter', $p->getItems());
265  $out = $p->toArray();
266  $this->assertEquals('array', $out['type']);
267  $this->assertInternalType('array', $out['items']);
268  }
269 
270  public function testHasExtraProperties()
271  {
272  $p = new Parameter();
273  $this->assertEquals(array(), $p->getData());
274  $p->setData(array('foo' => 'bar'));
275  $this->assertEquals('bar', $p->getData('foo'));
276  $p->setData('baz', 'boo');
277  $this->assertEquals(array('foo' => 'bar', 'baz' => 'boo'), $p->getData());
278  }
279 
281  {
282  $p = new Parameter();
283  $this->assertEquals(null, $p->getData('foo'));
284  $p->setName('test');
285  $this->assertEquals('test', $p->getData('name'));
286  }
287 
288  public function testHasInstanceOf()
289  {
290  $p = new Parameter();
291  $this->assertNull($p->getInstanceOf());
292  $p->setInstanceOf('Foo');
293  $this->assertEquals('Foo', $p->getInstanceOf());
294  }
295 
296  public function testHasPattern()
297  {
298  $p = new Parameter();
299  $this->assertNull($p->getPattern());
300  $p->setPattern('/[0-9]+/');
301  $this->assertEquals('/[0-9]+/', $p->getPattern());
302  }
303 
304  public function testHasEnum()
305  {
306  $p = new Parameter();
307  $this->assertNull($p->getEnum());
308  $p->setEnum(array('foo', 'bar'));
309  $this->assertEquals(array('foo', 'bar'), $p->getEnum());
310  }
311 
312  public function testSerializesItems()
313  {
314  $p = new Parameter(array(
315  'type' => 'object',
316  'additionalProperties' => array('type' => 'string')
317  ));
318  $this->assertEquals(array(
319  'type' => 'object',
320  'additionalProperties' => array('type' => 'string')
321  ), $p->toArray());
322  }
323 
325  {
326  $description = new ServiceDescription(array(
327  'models' => array(
328  'JarJar' => array('type' => 'string', 'default' => 'Mesa address tha senate!'),
329  'Anakin' => array('type' => 'array', 'items' => array('$ref' => 'JarJar'))
330  )
331  ));
332  $p = new Parameter(array('$ref' => 'Anakin', 'description' => 'added'), $description);
333  $this->assertEquals(array(
334  'type' => 'array',
335  'items' => array('type' => 'string', 'default' => 'Mesa address tha senate!'),
336  'description' => 'added'
337  ), $p->toArray());
338  }
339 
341  {
342  $jarJar = array('type' => 'string', 'default' => 'Mesa address tha senate!', 'description' => 'a');
343  $anakin = array('type' => 'array', 'items' => array('extends' => 'JarJar', 'description' => 'b'));
344  $description = new ServiceDescription(array(
345  'models' => array('JarJar' => $jarJar, 'Anakin' => $anakin)
346  ));
347  // Description attribute will be updated, and format added
348  $p = new Parameter(array('extends' => 'Anakin', 'format' => 'date'), $description);
349  $this->assertEquals(array(
350  'type' => 'array',
351  'format' => 'date',
352  'items' => array(
353  'type' => 'string',
354  'default' => 'Mesa address tha senate!',
355  'description' => 'b'
356  )
357  ), $p->toArray());
358  }
359 
360  public function testHasKeyMethod()
361  {
362  $p = new Parameter(array('name' => 'foo', 'sentAs' => 'bar'));
363  $this->assertEquals('bar', $p->getWireName());
364  $p->setSentAs(null);
365  $this->assertEquals('foo', $p->getWireName());
366  }
367 
369  {
370  $p = new Parameter(array(
371  'type' => 'array',
372  'name' => 'Abc',
373  'items' => array(
374  'name' => 'Foo',
375  'type' => 'object'
376  )
377  ));
378  $result = $p->toArray();
379  $this->assertEquals(array(
380  'type' => 'array',
381  'items' => array(
382  'name' => 'Foo',
383  'type' => 'object',
384  'additionalProperties' => true
385  )
386  ), $result);
387  }
388 
389  public function dateTimeProvider()
390  {
391  $d = 'October 13, 2012 16:15:46 UTC';
392 
393  return array(
394  array($d, 'date-time', '2012-10-13T16:15:46Z'),
395  array($d, 'date', '2012-10-13'),
396  array($d, 'timestamp', strtotime($d)),
397  array(new \DateTime($d), 'timestamp', strtotime($d))
398  );
399  }
400 
404  public function testAppliesFormat($d, $format, $result)
405  {
406  $p = new Parameter();
407  $p->setFormat($format);
408  $this->assertEquals($format, $p->getFormat());
409  $this->assertEquals($result, $p->filter($d));
410  }
411 }
Guzzle\Tests\GuzzleTestCase\getServiceBuilder
static getServiceBuilder()
Definition: GuzzleTestCase.php:65
Guzzle\Tests\Service\Description\ParameterTest\testHasExtraProperties
testHasExtraProperties()
Definition: ParameterTest.php:270
Guzzle\Tests\Service\Description\ParameterTest\testAddsItems
testAddsItems()
Definition: ParameterTest.php:258
Guzzle\Tests\Service\Description\ParameterTest\testAppliesFormat
testAppliesFormat($d, $format, $result)
Definition: ParameterTest.php:404
Guzzle\Tests\Service\Description\ParameterTest\testValidatesComplexFilters
testValidatesComplexFilters()
Definition: ParameterTest.php:124
Guzzle\Tests\Service\Description\ParameterTest\testCanRemoveFromNestedStructure
testCanRemoveFromNestedStructure()
Definition: ParameterTest.php:229
Guzzle\Tests\Service\Description\ParameterTest\testZeroValueDoesNotCauseDefaultToBeReturned
testZeroValueDoesNotCauseDefaultToBeReturned()
Definition: ParameterTest.php:74
Guzzle\Tests\Service\Description\ParameterTest\$data
$data
Definition: ParameterTest.php:13
Guzzle\Tests\Service\Description\ParameterTest\testFiltersValues
testFiltersValues()
Definition: ParameterTest.php:83
Guzzle\Tests\Service\Description\ParameterTest\testHasKeyMethod
testHasKeyMethod()
Definition: ParameterTest.php:360
Guzzle\Tests\GuzzleTestCase
Definition: GuzzleTestCase.php:22
Guzzle\Tests\Service\Description\ParameterTest\testCanRetrieveKnownPropertiesUsingDataMethod
testCanRetrieveKnownPropertiesUsingDataMethod()
Definition: ParameterTest.php:280
Guzzle\Tests\Service\Description\ParameterTest\testHasInstanceOf
testHasInstanceOf()
Definition: ParameterTest.php:288
Guzzle\Tests\Service\Description\ParameterTest\testCreatesParamFromArray
testCreatesParamFromArray()
Definition: ParameterTest.php:26
Guzzle\Service\Description\Parameter
Definition: Parameter.php:10
Guzzle\Tests\Service\Description\ParameterTest\dateTimeProvider
dateTimeProvider()
Definition: ParameterTest.php:389
Guzzle\Tests\Service\Description\ParameterTest\testReturnsYourValue
testReturnsYourValue()
Definition: ParameterTest.php:66
Guzzle\Tests\Service\Description\ParameterTest\testParsesTypeValues
testParsesTypeValues()
Definition: ParameterTest.php:114
Guzzle\Tests\Service\Description\ParameterTest\testUsesStatic
testUsesStatic()
Definition: ParameterTest.php:48
Guzzle\Tests\Service\Description\ParameterTest\testHasEnum
testHasEnum()
Definition: ParameterTest.php:304
Guzzle\Service\Description\ServiceDescription
Definition: ServiceDescription.php:11
Guzzle\Tests\Service\Description
Definition: OperationTest.php:3
Guzzle\Tests\Service\Description\ParameterTest\testUsesDefault
testUsesDefault()
Definition: ParameterTest.php:57
Guzzle\Tests\Service\Description\ParameterTest\testResolvesExtendsRecursively
testResolvesExtendsRecursively()
Definition: ParameterTest.php:340
Guzzle\Tests\Service\Description\ParameterTest
Definition: ParameterTest.php:11
Guzzle\Tests\Service\Description\ParameterTest\testAllowsNestedShape
testAllowsNestedShape()
Definition: ParameterTest.php:167
Guzzle\Tests\Service\Description\ParameterTest\testConvertsBooleans
testConvertsBooleans()
Definition: ParameterTest.php:92
Guzzle\Tests\Service\Description\ParameterTest\testHasPattern
testHasPattern()
Definition: ParameterTest.php:296
Guzzle\Tests\Service\Description\ParameterTest\testAddsAdditionalProperties
testAddsAdditionalProperties()
Definition: ParameterTest.php:246
Guzzle\Tests\Service\Description\ParameterTest\testCanConvertToArray
testCanConvertToArray()
Definition: ParameterTest.php:41
Guzzle\Tests\Service\Description\ParameterTest\testCanBuildUpParams
testCanBuildUpParams()
Definition: ParameterTest.php:129
Guzzle\Tests\Service\Description\ParameterTest\testIncludesNameInToArrayWhenItemsAttributeHasName
testIncludesNameInToArrayWhenItemsAttributeHasName()
Definition: ParameterTest.php:368
Guzzle\Tests\Service\Description\ParameterTest\testAllowsSimpleLocationValue
testAllowsSimpleLocationValue()
Definition: ParameterTest.php:107
Guzzle\Tests\Service\Description\ParameterTest\testUsesArrayByDefaultForFilters
testUsesArrayByDefaultForFilters()
Definition: ParameterTest.php:99
Guzzle\Tests\Service\Description\ParameterTest\testSerializesItems
testSerializesItems()
Definition: ParameterTest.php:312
Guzzle\Tests\Service\Description\ParameterTest\testAllowsComplexFilters
testAllowsComplexFilters()
Definition: ParameterTest.php:207
Guzzle\Tests\Service\Description\ParameterTest\testResolvesRefKeysRecursively
testResolvesRefKeysRecursively()
Definition: ParameterTest.php:324
Guzzle\Tests\Service\Description\ParameterTest\testCanChangeParentOfNestedParameter
testCanChangeParentOfNestedParameter()
Definition: ParameterTest.php:221