eole-io /
eole-api
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | namespace Tests\Eole\RestApi; |
||
| 4 | |||
| 5 | use Symfony\Component\HttpFoundation\Response; |
||
| 6 | |||
| 7 | class UserApiTest extends AbstractApplicationTest |
||
| 8 | { |
||
| 9 | public function testRootPathIs404() |
||
| 10 | { |
||
| 11 | $client = $this->createClient(); |
||
| 12 | |||
| 13 | $client->request('GET', '/'); |
||
| 14 | $this->assertEquals(Response::HTTP_NOT_FOUND, $client->getResponse()->getStatusCode()); |
||
| 15 | } |
||
| 16 | |||
| 17 | public function testGetPlayersReturnsArrayOrStdClass() |
||
| 18 | { |
||
| 19 | $client = $this->createClient(); |
||
| 20 | |||
| 21 | $client->request('GET', '/api/players'); |
||
| 22 | $this->assertTrue($client->getResponse()->isSuccessful()); |
||
| 23 | |||
| 24 | $content = json_decode($client->getResponse()->getContent()); |
||
| 25 | |||
| 26 | $this->assertTrue(is_array($content) || is_object($content)); |
||
| 27 | } |
||
| 28 | |||
| 29 | public function testAuthMeIsForbiddenWithoutOAuthToken() |
||
| 30 | { |
||
| 31 | $client = $this->createClient(); |
||
| 32 | |||
| 33 | $client->request('GET', '/api/auth/me'); |
||
| 34 | |||
| 35 | $this->assertEquals(Response::HTTP_UNAUTHORIZED, $client->getResponse()->getStatusCode()); |
||
| 36 | } |
||
| 37 | |||
| 38 | public function testAuthMeReturnsExpectedPlayer() |
||
| 39 | { |
||
| 40 | $client = $this->createClient(); |
||
| 41 | |||
| 42 | $client->request('GET', '/api/auth/me', [], [], array( |
||
| 43 | 'HTTP_AUTHORIZATION' => self::createOAuth2Token('existing-player'), |
||
| 44 | )); |
||
| 45 | |||
| 46 | $this->assertTrue($client->getResponse()->isSuccessful()); |
||
| 47 | |||
| 48 | $player = json_decode($client->getResponse()->getContent()); |
||
| 49 | |||
| 50 | $this->assertObjectHasAttribute('id', $player); |
||
| 51 | $this->assertObjectHasAttribute('username', $player); |
||
| 52 | $this->assertEquals($player->username, 'existing-player'); |
||
| 53 | } |
||
| 54 | |||
| 55 | public function testAuthMeFailsOnInvalidCredentials() |
||
| 56 | { |
||
| 57 | $client = $this->createClient(); |
||
| 58 | |||
| 59 | $client->request('GET', '/api/auth/me', [], [], array( |
||
| 60 | 'HTTP_AUTHORIZATION' => self::createOAuth2Token('non-existing-player'), |
||
| 61 | )); |
||
| 62 | |||
| 63 | $this->assertEquals(Response::HTTP_UNAUTHORIZED, $client->getResponse()->getStatusCode()); |
||
| 64 | } |
||
| 65 | |||
| 66 | public function testCreatePlayerReturnsCreatedStatusCodeAndValidPlayer() |
||
| 67 | { |
||
| 68 | $client = $this->createClient(); |
||
| 69 | |||
| 70 | $client->request('POST', '/api/players', array( |
||
| 71 | 'username' => 'test-user', |
||
| 72 | 'password' => 'test-pass', |
||
| 73 | )); |
||
| 74 | |||
| 75 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode()); |
||
| 76 | |||
| 77 | $player = json_decode($client->getResponse()->getContent()); |
||
| 78 | |||
| 79 | $this->assertEquals('test-user', $player->username, 'Username is the one I defined.'); |
||
| 80 | } |
||
| 81 | |||
| 82 | View Code Duplication | public function testCreatePlayerWithMissingArgumentReturnsBadRequest() |
|
|
0 ignored issues
–
show
|
|||
| 83 | { |
||
| 84 | $client = $this->createClient(); |
||
| 85 | |||
| 86 | $client->request('POST', '/api/players', array( |
||
| 87 | 'username' => '', |
||
| 88 | 'password' => 'test-pass', |
||
| 89 | )); |
||
| 90 | |||
| 91 | $this->assertEquals(Response::HTTP_BAD_REQUEST, $client->getResponse()->getStatusCode()); |
||
| 92 | |||
| 93 | $client->request('POST', '/api/players', array( |
||
| 94 | 'username' => 'test-user', |
||
| 95 | 'password' => '', |
||
| 96 | )); |
||
| 97 | |||
| 98 | $this->assertEquals(Response::HTTP_BAD_REQUEST, $client->getResponse()->getStatusCode()); |
||
| 99 | } |
||
| 100 | |||
| 101 | View Code Duplication | public function testCreatePlayerTwiceReturnsConflictStatusCode() |
|
|
0 ignored issues
–
show
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...
|
|||
| 102 | { |
||
| 103 | $client = $this->createClient(); |
||
| 104 | |||
| 105 | $client->request('POST', '/api/players', array( |
||
| 106 | 'username' => 'test-user', |
||
| 107 | 'password' => 'test-pass', |
||
| 108 | )); |
||
| 109 | |||
| 110 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode()); |
||
| 111 | |||
| 112 | $client->request('POST', '/api/players', array( |
||
| 113 | 'username' => 'test-user', |
||
| 114 | 'password' => 'test-pass', |
||
| 115 | )); |
||
| 116 | |||
| 117 | $this->assertEquals(Response::HTTP_CONFLICT, $client->getResponse()->getStatusCode()); |
||
| 118 | } |
||
| 119 | |||
| 120 | View Code Duplication | public function testCreateGuestReturnsAGuest() |
|
|
0 ignored issues
–
show
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...
|
|||
| 121 | { |
||
| 122 | $client = $this->createClient(); |
||
| 123 | |||
| 124 | $client->request('POST', '/api/players/guest'); |
||
| 125 | |||
| 126 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode()); |
||
| 127 | |||
| 128 | $guest = json_decode($client->getResponse()->getContent()); |
||
| 129 | |||
| 130 | $this->assertObjectHasAttribute('id', $guest); |
||
| 131 | $this->assertObjectHasAttribute('username', $guest); |
||
| 132 | $this->assertObjectHasAttribute('guest', $guest); |
||
| 133 | |||
| 134 | $this->assertTrue($guest->guest, 'Guest field is set to true.'); |
||
| 135 | |||
| 136 | $client->request('GET', '/api/players/'.$guest->username); |
||
| 137 | |||
| 138 | $guestRetrieved = json_decode($client->getResponse()->getContent()); |
||
| 139 | |||
| 140 | $this->assertEquals($guestRetrieved, $guest); |
||
| 141 | } |
||
| 142 | |||
| 143 | public function testCreateGuestGenerateDifferentGuestWhenCalledMultipleTimes() |
||
| 144 | { |
||
| 145 | $client = $this->createClient(); |
||
| 146 | $guests = array(); |
||
| 147 | |||
| 148 | $client->request('POST', '/api/players/guest'); |
||
| 149 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode(), 'Creating first guest.'); |
||
| 150 | $guests []= json_decode($client->getResponse()->getContent()); |
||
| 151 | |||
| 152 | $client->request('POST', '/api/players/guest'); |
||
| 153 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode(), 'Creating second guest.'); |
||
| 154 | $guests []= json_decode($client->getResponse()->getContent()); |
||
| 155 | |||
| 156 | $this->assertNotEquals($guests[0]->id, $guests[1]->id, 'Comparing guests ids.'); |
||
| 157 | $this->assertNotEquals($guests[0]->username, $guests[1]->username, 'Comparing guests usernames.'); |
||
| 158 | } |
||
| 159 | |||
| 160 | View Code Duplication | public function testCreateGuestUseProvidedPasswordIfAny() |
|
|
0 ignored issues
–
show
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...
|
|||
| 161 | { |
||
| 162 | $client = $this->createClient(); |
||
| 163 | |||
| 164 | $client->request('POST', '/api/players/guest', array( |
||
| 165 | 'provided-password', |
||
| 166 | )); |
||
| 167 | |||
| 168 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode()); |
||
| 169 | |||
| 170 | $guest = json_decode($client->getResponse()->getContent()); |
||
| 171 | |||
| 172 | $this->assertObjectHasAttribute('id', $guest); |
||
| 173 | $this->assertObjectHasAttribute('username', $guest); |
||
| 174 | $this->assertObjectHasAttribute('guest', $guest); |
||
| 175 | |||
| 176 | $this->assertTrue($guest->guest, 'Guest field is set to true.'); |
||
| 177 | |||
| 178 | $client->request('GET', '/api/players/'.$guest->username); |
||
| 179 | |||
| 180 | $guestRetrieved = json_decode($client->getResponse()->getContent()); |
||
| 181 | |||
| 182 | $this->assertEquals($guestRetrieved, $guest); |
||
| 183 | |||
| 184 | // Todo check whether password is provided password |
||
| 185 | } |
||
| 186 | |||
| 187 | public function testAuthMeCanAuthenticateCreatedGuest() |
||
| 188 | { |
||
| 189 | $client = $this->createClient(); |
||
| 190 | |||
| 191 | $client->request('POST', '/api/players/guest'); |
||
| 192 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode(), 'Creating first guest.'); |
||
| 193 | $guest = json_decode($client->getResponse()->getContent()); |
||
| 194 | |||
| 195 | $client->request('GET', '/api/auth/me', [], [], array( |
||
| 196 | 'HTTP_AUTHORIZATION' => self::createOAuth2Token($guest->username), |
||
| 197 | )); |
||
| 198 | |||
| 199 | $this->assertTrue($client->getResponse()->isSuccessful()); |
||
| 200 | |||
| 201 | $authenticatedGuest = json_decode($client->getResponse()->getContent()); |
||
| 202 | |||
| 203 | $this->assertEquals($guest->username, $authenticatedGuest->username, 'Authenticated guest is the one I created.'); |
||
| 204 | } |
||
| 205 | |||
| 206 | public function testPlayersCountReturnsExpectedValues() |
||
| 207 | { |
||
| 208 | $client = $this->createClient(); |
||
| 209 | |||
| 210 | $client->request('GET', '/api/players-count'); |
||
| 211 | $this->assertTrue($client->getResponse()->isSuccessful(), 'Players count returns successful response.'); |
||
| 212 | |||
| 213 | $initialCount = json_decode($client->getResponse()->getContent()); |
||
| 214 | |||
| 215 | $client->request('POST', '/api/players/guest'); |
||
| 216 | $client->request('POST', '/api/players/guest'); |
||
| 217 | |||
| 218 | $client->request('GET', '/api/players-count'); |
||
| 219 | |||
| 220 | $reponse = json_decode($client->getResponse()->getContent()); |
||
| 221 | |||
| 222 | $this->assertTrue($client->getResponse()->isSuccessful(), 'Players count returns successful response.'); |
||
| 223 | $this->assertEquals($initialCount + 2, $reponse, 'When I create 2 new players, players count is incremented by 2.'); |
||
| 224 | } |
||
| 225 | |||
| 226 | public function testDeletePlayer() |
||
| 227 | { |
||
| 228 | $client = $this->createClient(); |
||
| 229 | |||
| 230 | $client->request('DELETE', '/api/players/existing-player'); |
||
| 231 | $this->assertTrue($client->getResponse()->isSuccessful(), 'Delete user returns successful response.'); |
||
| 232 | |||
| 233 | $client->request('GET', '/api/players/existing-player'); |
||
| 234 | $this->assertEquals(Response::HTTP_NOT_FOUND, $client->getResponse()->getStatusCode(), 'Retrieving a deleted user returns 404.'); |
||
| 235 | |||
| 236 | $client->request('DELETE', '/api/players/existing-player'); |
||
| 237 | $this->assertEquals(Response::HTTP_NOT_FOUND, $client->getResponse()->getStatusCode(), 'Delete an inexisting user returns 404.'); |
||
| 238 | } |
||
| 239 | |||
| 240 | public function testRegisterGuest() |
||
| 241 | { |
||
| 242 | $client = $this->createClient(); |
||
| 243 | |||
| 244 | $client->request('POST', '/api/players/guest'); |
||
| 245 | $this->assertEquals(Response::HTTP_CREATED, $client->getResponse()->getStatusCode()); |
||
| 246 | |||
| 247 | $guest = json_decode($client->getResponse()->getContent()); |
||
| 248 | |||
| 249 | $client->request('POST', '/api/players/register', array( |
||
| 250 | 'username' => 'Killer60', |
||
| 251 | 'password' => 'myPassword' |
||
| 252 | ), [], array( |
||
| 253 | 'HTTP_AUTHORIZATION' => self::createOAuth2Token($guest->username), |
||
| 254 | )); |
||
| 255 | $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); |
||
| 256 | |||
| 257 | $player = json_decode($client->getResponse()->getContent()); |
||
| 258 | |||
| 259 | $this->assertEquals($guest->id, $player->id, 'Registered player keep the same id of the guest.'); |
||
| 260 | $this->assertFalse($player->guest, 'Registered player is no longer a guest.'); |
||
| 261 | $this->assertEquals('Killer60', $player->username, 'Player username is updated to the one requested.'); |
||
| 262 | } |
||
| 263 | |||
| 264 | public function testRegisterGuestNeedsToBeLogged() |
||
| 265 | { |
||
| 266 | $client = $this->createClient(); |
||
| 267 | |||
| 268 | $client->request('POST', '/api/players/guest'); |
||
| 269 | |||
| 270 | $client->request('POST', '/api/players/register', array( |
||
| 271 | 'username' => 'Killer60', |
||
| 272 | )); |
||
| 273 | |||
| 274 | $this->assertEquals(Response::HTTP_UNAUTHORIZED, $client->getResponse()->getStatusCode()); |
||
| 275 | } |
||
| 276 | |||
| 277 | public function testRegisterGuestFailsOnAlreadyPlayer() |
||
| 278 | { |
||
| 279 | $client = $this->createClient(); |
||
| 280 | |||
| 281 | $client->request('POST', '/api/players/register', array( |
||
| 282 | 'username' => 'Killer60', |
||
| 283 | 'password' => 'myPassword' |
||
| 284 | ), [], array( |
||
| 285 | 'HTTP_AUTHORIZATION' => self::createOAuth2Token('existing-player'), |
||
| 286 | )); |
||
| 287 | |||
| 288 | $this->assertEquals(Response::HTTP_BAD_REQUEST, $client->getResponse()->getStatusCode()); |
||
| 289 | } |
||
| 290 | |||
| 291 | public function testGetGames() |
||
| 292 | { |
||
| 293 | $client = $this->createClient(); |
||
| 294 | |||
| 295 | $client->request('GET', '/api/games'); |
||
| 296 | |||
| 297 | $this->assertTrue($client->getResponse()->isSuccessful(), 'Response is successful'); |
||
| 298 | |||
| 299 | $games = json_decode($client->getResponse()->getContent()); |
||
| 300 | |||
| 301 | $this->assertCount(2, $games); |
||
| 302 | |||
| 303 | $this->assertObjectHasAttribute('id', $games[0]); |
||
| 304 | $this->assertObjectHasAttribute('name', $games[0]); |
||
| 305 | $this->assertObjectHasAttribute('id', $games[1]); |
||
| 306 | $this->assertObjectHasAttribute('name', $games[1]); |
||
| 307 | } |
||
| 308 | |||
| 309 | public function testGetGameByNameReturnsExpectedGame() |
||
| 310 | { |
||
| 311 | $client = $this->createClient(); |
||
| 312 | |||
| 313 | $client->request('GET', '/api/games/game-0'); |
||
| 314 | |||
| 315 | $this->assertTrue($client->getResponse()->isSuccessful(), 'Response is successful'); |
||
| 316 | |||
| 317 | $game = json_decode($client->getResponse()->getContent()); |
||
| 318 | |||
| 319 | $this->assertObjectHasAttribute('id', $game); |
||
| 320 | $this->assertObjectHasAttribute('name', $game); |
||
| 321 | $this->assertEquals('game-0', $game->name); |
||
| 322 | } |
||
| 323 | } |
||
| 324 |
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.