RefreshTokenMutationCreatorTest::setUp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 31
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 16
c 2
b 0
f 0
nc 1
nop 0
dl 0
loc 31
rs 9.7333
1
<?php
2
3
namespace Firesphere\GraphQLJWT\Tests;
4
5
use Firesphere\GraphQLJWT\Authentication\AnonymousUserAuthenticator;
6
use Firesphere\GraphQLJWT\Authentication\JWTAuthenticator;
7
use Firesphere\GraphQLJWT\Mutations\CreateTokenMutationCreator;
8
use Firesphere\GraphQLJWT\Mutations\RefreshTokenMutationCreator;
9
use GraphQL\Type\Definition\ResolveInfo;
10
use SilverStripe\Control\Controller;
11
use SilverStripe\Control\Session;
12
use SilverStripe\Core\Config\Config;
13
use SilverStripe\Core\Environment;
14
use SilverStripe\Core\Injector\Injector;
15
use SilverStripe\Dev\SapphireTest;
16
use SilverStripe\ORM\ValidationException;
17
use SilverStripe\Security\Member;
18
19
class RefreshTokenMutationCreatorTest extends SapphireTest
20
{
21
    protected static $fixture_file = '../fixtures/JWTAuthenticatorTest.yml';
22
23
    protected $member;
24
25
    protected $token;
26
27
    protected $anonymousToken;
28
29
    /**
30
     * @throws ValidationException
31
     */
32
    public function setUp()
33
    {
34
        Environment::setENv('JWT_SIGNER_KEY', 'test_signer');
35
36
        parent::setUp();
37
        $this->member = $this->objFromFixture(Member::class, 'admin');
38
39
        // Enable anonymous authentication for this test
40
        $createToken = CreateTokenMutationCreator::singleton();
41
        $createToken->setCustomAuthenticators([AnonymousUserAuthenticator::singleton()]);
42
43
        // Requires to be an expired token
44
        Config::modify()->set(JWTAuthenticator::class, 'nbf_expiration', -5);
45
46
        // Normal token
47
        $response = $createToken->resolve(
48
            null,
49
            ['Email' => '[email protected]', 'Password' => 'error'],
50
            [],
51
            new ResolveInfo([])
52
        );
53
        $this->token = $response['Token'];
54
55
        // Anonymous token
56
        $response = $createToken->resolve(
57
            null,
58
            ['Email' => 'anonymous'],
59
            [],
60
            new ResolveInfo([])
61
        );
62
        $this->anonymousToken = $response['Token'];
63
    }
64
65
    public function tearDown()
66
    {
67
        parent::tearDown();
68
    }
69
70
    private function buildRequest($anonymous = false)
71
    {
72
        $token = $anonymous ? $this->anonymousToken : $this->token;
73
        $request = clone Controller::curr()->getRequest();
74
        $request->addHeader('Authorization', 'Bearer ' . $token);
75
76
        $request->setSession(new Session(['hello' => 'bye'])); // We need a session
77
        Controller::curr()->setRequest($request);
78
79
        return $request;
80
    }
81
82
    public function testRefreshToken()
83
    {
84
        $this->buildRequest();
85
86
        $queryCreator = Injector::inst()->get(RefreshTokenMutationCreator::class);
87
        $response = $queryCreator->resolve(null, [], [], new ResolveInfo([]));
88
89
        $this->assertNotNull($response['Token']);
90
        $this->assertInstanceOf(Member::class, $response['Member']);
91
    }
92
93
    public function testAnonRefreshToken()
94
    {
95
        $this->buildRequest(true);
96
97
        $queryCreator = Injector::inst()->get(RefreshTokenMutationCreator::class);
98
        $response = $queryCreator->resolve(null, [], [], new ResolveInfo([]));
99
100
        $this->assertNotNull($response['Token']);
101
        $this->assertInstanceOf(Member::class, $response['Member']);
102
    }
103
}
104