Passed
Pull Request — master (#32)
by
unknown
02:19
created

ValidateTokenTest::testValidateToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Firesphere\GraphQLJWT\Tests;
4
5
use Exception;
6
use Firesphere\GraphQLJWT\Authentication\JWTAuthenticator;
7
use Firesphere\GraphQLJWT\Resolvers\Resolver;
8
use GraphQL\Type\Definition\ResolveInfo;
9
use SilverStripe\Control\Controller;
10
use SilverStripe\Control\Session;
11
use SilverStripe\Core\Config\Config;
12
use SilverStripe\Core\Environment;
13
use SilverStripe\Dev\SapphireTest;
14
use SilverStripe\ORM\ValidationException;
15
use SilverStripe\Security\Member;
16
17
class ValidateTokenTest extends SapphireTest
18
{
19
    protected static $fixture_file = '../fixtures/JWTAuthenticatorTest.yml';
20
21
    protected $member;
22
23
    protected $token;
24
25
    public function setUp()
26
    {
27
        Environment::putEnv('JWT_SIGNER_KEY=test_signer');
28
29
        parent::setUp();
30
        $this->member = $this->objFromFixture(Member::class, 'admin');
31
        $response = Resolver::resolveCreateToken(
32
            null,
33
            ['email' => '[email protected]', 'password' => 'error']
34
        );
35
36
        $this->token = $response['token'];
37
    }
38
39
    public function tearDown()
40
    {
41
        parent::tearDown();
42
    }
43
44
    private function buildRequest()
45
    {
46
        $request = clone Controller::curr()->getRequest();
47
        $request->addHeader('Authorization', 'Bearer ' . $this->token);
48
        $request->setSession(new Session(['hello' => 'bye'])); // We need a session
49
        Controller::curr()->setRequest($request);
50
51
        return $request;
52
    }
53
54
    /**
55
     * @throws Exception
56
     */
57
    public function testValidateToken()
58
    {
59
        $this->buildRequest();
60
61
        $response = Resolver::resolveValidateToken();
62
63
        $this->assertTrue($response['valid']);
64
    }
65
66
    /**
67
     * @throws Exception
68
     */
69
    public function testExpiredToken()
70
    {
71
        Config::modify()->set(JWTAuthenticator::class, 'nbf_expiration', -5);
72
73
        $response = Resolver::resolveCreateToken(
74
            null,
75
            ['email' => '[email protected]', 'password' => 'error']
76
        );
77
        $this->token = $response['token'];
78
79
        $this->buildRequest();
80
81
        $response = Resolver::resolveValidateToken();
82
83
        $this->assertFalse($response['valid']);
84
        $this->assertEquals(Resolver::STATUS_EXPIRED, $response['status']);
85
        $this->assertEquals(401, $response['code']);
86
        $this->assertEquals(
87
            'Token is expired, please renew your token with a refreshToken query',
88
            $response['message']
89
        );
90
    }
91
}
92