Skip to content

Commit 04594ee

Browse files
committed
Full code coverage for the ParametersExtractorTrait class
1 parent 56a479c commit 04594ee

File tree

2 files changed

+122
-3
lines changed

2 files changed

+122
-3
lines changed

Controller/ParametersExtractorTrait.php

+11-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
trait ParametersExtractorTrait
2323
{
2424
/**
25+
* Executes the extraction from the given Request instance.
26+
*
27+
* The source can be `null` or one of the following:
28+
*
29+
* - "query": to extract from the GET parameters
30+
* - "request": to extract from the POST parameters
31+
* - "content": to extract from a JSON payload
32+
*
2533
* @param \Symfony\Component\HttpFoundation\Request $request
2634
* @param string|null $prefix
2735
* @param string|null $source
@@ -30,13 +38,13 @@ trait ParametersExtractorTrait
3038
protected function extractParameters(Request $request, $prefix = null, $source = null)
3139
{
3240
switch ($source) {
33-
case 'get':
41+
case 'query':
3442
$parameters = $request->query->all();
3543
break;
36-
case 'post':
44+
case 'request':
3745
$parameters = $request->request->all();
3846
break;
39-
case 'body':
47+
case 'content':
4048
$parameters = (array)json_decode($request->getContent(), true);
4149
break;
4250
default:
+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the GiBilogic Elements package.
5+
*
6+
* (c) GiBilogic Srl <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Gibilogic\Elements\Tests;
13+
14+
use Symfony\Component\HttpFoundation\Request;
15+
use Gibilogic\Elements\Controller\ParametersExtractorTrait;
16+
17+
/**
18+
* Unit tests for the ParametersExtractorTrait.
19+
*
20+
* @author Matteo Guindani https://github.com/Ingannatore
21+
* @see ParametersExtractorTrait
22+
* @see \PHPUnit_Framework_TestCase
23+
*/
24+
class ParametersExtractorTraitTest extends \PHPUnit_Framework_TestCase
25+
{
26+
use ParametersExtractorTrait;
27+
28+
/**
29+
* Test for a simple extraction (ie, without prefix) from "query" (GET) source.
30+
*/
31+
public function testSimpleExtractionFromQuery()
32+
{
33+
$queryData = ['a' => 1, 'b' => 2];
34+
$requestData = ['a' => 2, 'b' => 4, 'c' => 8];
35+
$contentData = ['b' => 3, 'c' => 6, 'd' => 9];
36+
$request = $this->createRequest($queryData, $requestData, $contentData);
37+
38+
$this->assertEquals($queryData, $this->extractParameters($request, null, 'query'));
39+
}
40+
41+
/**
42+
* Test for a simple extraction (ie, without prefix) from "request" (POST) source.
43+
*/
44+
public function testSimpleExtractionFromRequest()
45+
{
46+
$queryData = ['a' => 1, 'b' => 2];
47+
$requestData = ['a' => 2, 'b' => 4, 'c' => 8];
48+
$contentData = ['b' => 3, 'c' => 6, 'd' => 9];
49+
$request = $this->createRequest($queryData, $requestData, $contentData);
50+
51+
$this->assertEquals($requestData, $this->extractParameters($request, null, 'request'));
52+
}
53+
54+
/**
55+
* Test for a simple extraction (ie, without prefix) from "request" (POST) source.
56+
*/
57+
public function testSimpleExtractionFromContent()
58+
{
59+
$queryData = ['a' => 1, 'b' => 2];
60+
$requestData = ['a' => 2, 'b' => 4, 'c' => 8];
61+
$contentData = ['b' => 3, 'c' => 6, 'd' => 9];
62+
$request = $this->createRequest($queryData, $requestData, $contentData);
63+
64+
$this->assertEquals($contentData, $this->extractParameters($request, null, 'content'));
65+
}
66+
67+
/**
68+
* Test for a simple extraction (ie, without prefix) from all sources.
69+
*/
70+
public function testSimpleExtractionFromAllSources()
71+
{
72+
$queryData = ['a' => 1, 'b' => 2];
73+
$requestData = ['a' => 2, 'b' => 4, 'c' => 8];
74+
$contentData = ['b' => 3, 'c' => 6, 'd' => 9];
75+
$request = $this->createRequest($queryData, $requestData, $contentData);
76+
77+
$this->assertEquals(
78+
['a' => 2, 'b' => 3, 'c' => 6, 'd' => 9],
79+
$this->extractParameters($request)
80+
);
81+
}
82+
83+
/**
84+
* Test a prefixed extraction from all sources.
85+
*/
86+
public function testPrefixedExtraction()
87+
{
88+
$queryData = ['prefix_a' => 1, 'b' => 2];
89+
$requestData = ['a' => 2, 'prefix_b' => 4, 'c' => 8];
90+
$contentData = ['b' => 3, 'prefix_c' => 6, 'prefix_d' => 9];
91+
$request = $this->createRequest($queryData, $requestData, $contentData);
92+
93+
$this->assertEquals(
94+
['a' => 1, 'b' => 4, 'c' => 6, 'd' => 9],
95+
$this->extractParameters($request, 'prefix_')
96+
);
97+
}
98+
99+
/**
100+
* Creates a mock-up request instance.
101+
*
102+
* @param array $query
103+
* @param array $request
104+
* @param array $content
105+
* @return Request
106+
*/
107+
protected function createRequest(array $query, array $request, array $content)
108+
{
109+
return new Request($query, $request, [], [], [], [], json_encode($content));
110+
}
111+
}

0 commit comments

Comments
 (0)