Completed
Push — develop ( 391d43...2463ed )
by Bastian
10s
created

Client::put()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 23
Code Lines 17

Duplication

Lines 23
Ratio 100 %

Code Coverage

Tests 0
CRAP Score 6
Metric Value
dl 23
loc 23
ccs 0
cts 0
cp 0
rs 9.0856
cc 2
eloc 17
nc 2
nop 6
crap 6
1
<?php
2
/**
3
 * Client helper for RESTful tests.
4
 */
5
6
namespace Graviton\TestBundle;
7
8
use Symfony\Bundle\FrameworkBundle\Client as FrameworkClient;
9
10
/**
11
 * Client containing some helper methods to be RESTful.
12
 *
13
 * This is mainly used during acceptance testing.
14
 *
15
 * @author   List of contributors <https://github.com/libgraviton/graviton/graphs/contributors>
16
 * @license  http://opensource.org/licenses/gpl-license.php GNU Public License
17
 * @link     http://swisscom.ch
18
 */
19
class Client extends FrameworkClient
20
{
21
    /**
22
     * @var mixed
23
     */
24
    private $results;
25
26
    /**
27
     * @var boolean
28
     */
29
    private $jsonRequest = true;
30
31
    /**
32
     * return decoded results from a request
33
     *
34
     * @return mixed
35
     */
36 5
    public function getResults()
37
    {
38 5
        return $this->results;
39
    }
40
41
    /**
42
     * POSTs to an URI.
43
     *
44
     * @param string  $uri        The URI to fetch
45
     * @param mixed   $content    The raw body data
46
     * @param array   $parameters The Request parameters
47
     * @param array   $files      The files
48
     * @param array   $server     The server parameters (HTTP headers are referenced with a HTTP_ prefix as PHP does)
49
     * @param boolean $jsonEncode If $content should be json encoded or not
50
     *
51
     * @return \Symfony\Component\DomCrawler\Crawler|null
52
     *
53
     * @api
54
     */
55 View Code Duplication
    public function post(
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...
56
        $uri,
57
        $content,
58
        array $parameters = array(),
59
        array $files = array(),
60
        array $server = array(),
61
        $jsonEncode = true
62
    ) {
63
        $this->jsonRequest = $jsonEncode;
64
65
        if ($jsonEncode) {
66
            $content = json_encode($content);
67
        }
68
69
        return $this->request(
70
            'POST',
71
            $uri,
72
            $parameters,
73
            $files,
74
            $server,
75
            $content
76
        );
77
    }
78
79
    /**
80
     * PUTs to an URI.
81
     *
82
     * @param string  $uri        The URI to fetch
83
     * @param mixed   $content    The raw body data
84
     * @param array   $parameters The Request parameters
85
     * @param array   $files      The files
86
     * @param array   $server     The server parameters (HTTP headers are referenced with a HTTP_ prefix as PHP does)
87
     * @param boolean $jsonEncode If $content should be json encoded or not
88
     *
89
     * @return \Symfony\Component\DomCrawler\Crawler|null
90
     *
91
     * @api
92
     */
93 View Code Duplication
    public function put(
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...
94
        $uri,
95
        $content,
96
        array $parameters = array(),
97
        array $files = array(),
98
        array $server = array(),
99
        $jsonEncode = true
100
    ) {
101
        $this->jsonRequest = $jsonEncode;
102
103
        if ($jsonEncode) {
104
            $content = json_encode($content);
105
        }
106
107
        return $this->request(
108
            'PUT',
109
            $uri,
110
            $parameters,
111
            $files,
112
            $server,
113
            $content
114
        );
115
    }
116
117
    /**
118
     * prepare a deserialized copy of a json response
119
     *
120
     * @param object $response Response containing our return value as raw json
121
     *
122
     * @return \Symfony\Component\BrowserKit\Response response
123
     *
124
     * @todo use JMSSerializer for additional JSON validation
125
     */
126 5
    protected function filterResponse($response)
127
    {
128 5
        $this->results = json_decode($response->getContent());
129
130 5
        return parent::filterResponse($response);
131
    }
132
133
    /**
134
     * force all requests to be json like.
135
     *
136
     * Do JSON/RESTful requests using this client if the caller has not specified something else.
137
     *
138
     * @param object $request Request object
139
     *
140
     * @return \Symfony\Component\HttpFoundation\Response request
141
     */
142 5
    protected function doRequest($request)
143
    {
144 5
        if ($this->jsonRequest) {
145 5
            $request->headers->set('Content-Type', 'application/json; charset=UTF-8');
146
        }
147 5
        $request->headers->set('Accept', 'application/json');
148
149 5
        return parent::doRequest($request);
150
    }
151
}
152