ValidateTokenQueryCreatorTest::setUp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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