Completed
Push — master ( d2c9b2...2cde9b )
by
unknown
08:05 queued 04:31
created

IntegrationTestCase::_userToken()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 8
nc 4
nop 1
dl 0
loc 13
ccs 9
cts 9
cp 1
crap 3
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Copyright 2016 - 2017, Cake Development Corporation (http://cakedc.com)
4
 *
5
 * Licensed under The MIT License
6
 * Redistributions of files must retain the above copyright notice.
7
 *
8
 * @copyright Copyright 2016 - 2017, Cake Development Corporation (http://cakedc.com)
9
 * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
10
 */
11
12
namespace CakeDC\Api\TestSuite;
13
14
use CakeDC\Api\Service\ServiceRegistry;
15
use Cake\Core\Configure;
16
use Cake\Datasource\EntityInterface;
17
use Cake\ORM\TableRegistry;
18
use Cake\TestSuite\IntegrationTestCase as BaseTestCase;
19
use Cake\Utility\Hash;
20
21
/**
22
 * Class IntegrationTestCase
23
 *
24
 * @package CakeDC\Api\TestSuite
25
 */
26
class IntegrationTestCase extends BaseTestCase
27
{
28
29
    /**
30
     * @var string|int Current logged in user
31
     */
32
    protected $_defaultUserId;
33
34
    /**
35
     * setUp
36
     *
37
     * @return void
38
     */
39 56
    public function setUp()
40
    {
41 56
        parent::setUp();
42 56
        Configure::write('Api', []);
43 56
    }
44
45
    /**
46
     * tearDown
47
     *
48
     * @return void
49
     */
50 56
    public function tearDown()
51
    {
52 56
        parent::tearDown();
53 56
        ServiceRegistry::clear();
54 56
    }
55
56
    /**
57
     * Default user api method.
58
     *
59
     * @param string $userId User id.
60
     * @return string
61
     */
62 56
    public function defaultUser($userId = null)
63
    {
64 56
        if ($userId === null) {
65 56
            $userId = $this->_defaultUserId;
66 56
        } else {
67 47
            $this->_defaultUserId = $userId;
68
        }
69
70 56
        return $userId;
71
    }
72
73
    /**
74
     * Returns user token.
75
     *
76
     * @param string $userId User id.
77
     * @return mixed|null
78
     */
79 56
    protected function _userToken($userId = null)
80
    {
81 56
        if ($userId === null) {
82 56
            $userId = $this->defaultUser();
83 56
        }
84 56
        $Users = TableRegistry::get('CakeDC/Users.Users');
85 56
        $user = $Users->find()->where(['id' => $userId])->first();
86 56
        if ($user instanceof EntityInterface) {
87 47
            return $user['api_token'];
88
        }
89
90 9
        return null;
91
    }
92
93
    /**
94
     * Send api request.
95
     *
96
     * @param string $url Url.
97
     * @param string $method HTTP method.
98
     * @param array $data Api parameters.
99
     * @param string $userId Current user id.
100
     * @return void
101
     */
102 56
    public function sendRequest($url, $method, $data = [], $userId = null)
103
    {
104 56
        ServiceRegistry::clear();
105 56
        $userToken = $this->_userToken($userId);
106
107 56
        Configure::load('api');
108
109 56
        if (!is_string($url)) {
110
            $this->_sendRequest($url, $method, $data);
111
112
            return;
113
        }
114 56
        $url = '/api' . $url;
115 56
        if (is_string($url)) {
116 56
            if ($userToken !== null) {
117 47
                $url = $this->_appendGetParam($url, 'token', $userToken);
118 47
            }
119 56
        }
120 56
        if ($method == 'GET' && is_string($url)) {
121 47
            if (!empty($data)) {
122 27
                foreach ($data as $key => $value) {
123 27
                    if (!is_array($value)) {
124 27
                        $url = $this->_appendGetParam($url, $key, $value);
125 27
                    }
126 27
                }
127 27
            }
128 47
        }
129 56
        $this->_sendRequest($url, $method, $data);
130 56
    }
131
132
    /**
133
     * Add param to request.
134
     *
135
     * @param string $url Url.
136
     * @param string $key Param name.
137
     * @param string $value Param value.
138
     * @return string
139
     */
140 48
    protected function _appendGetParam($url, $key, $value)
141
    {
142 48
        if (strpos($url, '?') !== false) {
143 26
            $appendChar = '&';
144 26
        } else {
145 48
            $appendChar = '?';
146
        }
147
148 48
        return $url . $appendChar . urlencode($key) . '=' . urlencode($value);
149
    }
150
151
    /**
152
     * Assert result is success.
153
     *
154
     * @param array $result Response.
155
     * @return void
156
     */
157 52
    public function assertSuccess($result)
158
    {
159 52
        $this->assertTrue(is_array($result));
160 52
        $this->assertEquals($result['status'], 'success');
161 52
        $this->assertEquals(200, $this->_response->getStatusCode());
162 52
    }
163
164
    /**
165
     * @return mixed
166
     */
167 55
    public function responseJson()
168
    {
169 55
        return json_decode((string)$this->_response->getBody(), true);
170
    }
171
172
    /**
173
     * Assert result is error.
174
     *
175
     * @param array $result Response.
176
     * @param int $code Result code.
177
     * @return void
178
     */
179 7
    public function assertError($result, $code = null)
180
    {
181 7
        $this->assertTrue(is_array($result));
182 7
        $this->assertEquals($result['status'], 'error');
183 7
        $this->assertEquals(200, $this->_response->getStatusCode());
184 7
        if (!empty($code)) {
185 7
            $this->assertEquals($code, $result['code']);
186 7
        }
187 7
    }
188
189
    /**
190
     * Helper method for status assertions.
191
     *
192
     * @param int $code Status code.
193
     * @param string $message The error message.
194
     * @return void
195
     */
196
    public function assertStatus($code, $message = null)
197
    {
198
        if ($message === null) {
199
            $message = "Status code $code does not match";
200
        }
201
        $this->_assertStatus($code, $code, $message);
202
    }
203
204
    /**
205
     * Assert error message.
206
     *
207
     * @param array $result Response.
208
     * @param string $expectedMessage Message.
209
     * @return void
210
     */
211 3
    public function assertErrorMessage($result, $expectedMessage)
212
    {
213 3
        $message = Hash::get($result, 'message');
214 3
        $this->assertTrue(is_string($message) && strpos($message, $expectedMessage) === 0);
215 3
    }
216
}
217