Completed
Push — ezp26179-rest_session_refresh_... ( 1fdd78...72494a )
by
unknown
25:45
created

SessionTest::createDeleteRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 6
c 1
b 0
f 1
nc 1
nop 1
dl 0
loc 9
rs 9.6666
1
<?php
2
/**
3
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
4
 * @license For full copyright and license information view LICENSE file distributed with this source code.
5
 */
6
namespace eZ\Bundle\EzPublishRestBundle\Tests\Functional;
7
8
use Buzz\Message\Response;
9
use stdClass;
10
11
class SessionTest extends TestCase
12
{
13
    public function setUp()
14
    {
15
        $this->autoLogin = false;
16
        parent::setUp();
17
    }
18
19
    public function testCreateSessionBadCredentials()
20
    {
21
        $request = $this->createHttpRequest('POST', '/api/ezp/v2/user/sessions', 'SessionInput+json', 'Session+json');
22
        $request->setContent('{"SessionInput": {"login": "admin", "password": "nopublish"}}');
23
        $response = $this->sendHttpRequest($request);
24
        self::assertHttpResponseCodeEquals($response, 401);
25
    }
26
27
    /**
28
     * @return \stdClass The login request's response
29
     */
30
    public function testCreateSession()
31
    {
32
        return $this->login();
33
    }
34
35
    /**
36
     * @depends testCreateSession
37
     */
38
    public function testRefreshSession(stdClass $session)
39
    {
40
        $response = $this->sendHttpRequest($this->createRefreshRequest($session));
41
        self::assertHttpResponseCodeEquals($response, 200);
42
    }
43
44
    public function testRefreshSessionExpired()
45
    {
46
        $session = $this->login();
47
48
        $response = $this->sendHttpRequest($this->createDeleteRequest($session));
49
        self::assertHttpResponseCodeEquals($response, 204);
50
51
        $response = $this->sendHttpRequest($this->createRefreshRequest($session));
52
        self::assertHttpResponseCodeEquals($response, 404);
53
54
        self::assertHttpResponseDeletesSessionCookie($session, $response);
55
    }
56
57
    public function testDeleteSession()
58
    {
59
        $session = $this->login();
60
        $response = $this->sendHttpRequest($this->createDeleteRequest($session));
61
        self::assertHttpResponseCodeEquals($response, 204);
62
        self::assertHttpResponseDeletesSessionCookie($session, $response);
63
64
        return $session;
65
    }
66
67
    /**
68
     * @depends testDeleteSession
69
     */
70
    public function testDeleteSessionExpired($session)
71
    {
72
        $response = $this->sendHttpRequest($this->createDeleteRequest($session));
73
        self::assertHttpResponseCodeEquals($response, 404);
74
        self::assertHttpResponseDeletesSessionCookie($session, $response);
75
    }
76
77
    /**
78
     * @param stdClass $session
79
     * @return \Buzz\Message\Request
80
     */
81
    protected function createRefreshRequest(stdClass $session)
82
    {
83
        $request = $this->createHttpRequest('POST',
84
            sprintf('/api/ezp/v2/user/sessions/%s/refresh', $session->identifier), '', 'Session+json');
85
        $request->addHeaders([
86
            sprintf('Cookie: %s=%s', $session->name, $session->identifier),
87
            sprintf('X-CSRF-Token: %s', $session->csrfToken)
88
        ]);
89
        return $request;
90
    }
91
92
    /**
93
     * @param $session
94
     * @return \Buzz\Message\Request
95
     */
96
    protected function createDeleteRequest($session)
97
    {
98
        $deleteRequest = $this->createHttpRequest('DELETE', $session->_href);
99
        $deleteRequest->addHeaders([
100
            sprintf('Cookie: %s=%s', $session->name, $session->identifier),
101
            sprintf('X-CSRF-Token: %s', $session->csrfToken)
102
        ]);
103
        return $deleteRequest;
104
    }
105
106
    private static function assertHttpResponseDeletesSessionCookie($session, Response $response)
107
    {
108
        self::assertStringStartsWith("{$session->name}=deleted;", $response->getHeader('set-cookie'));
109
    }
110
}
111