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

RefreshTokenTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 14
c 0
b 0
f 0
dl 0
loc 27
rs 9.7998
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Firesphere\GraphQLJWT\Tests;
4
5
use Firesphere\GraphQLJWT\Authentication\AnonymousUserAuthenticator;
6
use Firesphere\GraphQLJWT\Authentication\CustomAuthenticatorRegistry;
7
use Firesphere\GraphQLJWT\Authentication\JWTAuthenticator;
8
use Firesphere\GraphQLJWT\Resolvers\Resolver;
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 RefreshTokenTest 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
    public function setUp()
30
    {
31
        Environment::setENv('JWT_SIGNER_KEY', 'test_signer');
32
33
        parent::setUp();
34
        $this->member = $this->objFromFixture(Member::class, 'admin');
35
36
        // Enable anonymous authentication for this test
37
        Injector::inst()->get(CustomAuthenticatorRegistry::class)
38
            ->setCustomAuthenticators([AnonymousUserAuthenticator::singleton()]);
39
40
        // Requires to be an expired token
41
        Config::modify()->set(JWTAuthenticator::class, 'nbf_expiration', -5);
42
43
        // Normal token
44
        $response = Resolver::resolveCreateToken(
45
            null,
46
            ['email' => '[email protected]', 'password' => 'error']
47
        );
48
        $this->token = $response['token'];
49
50
        // Anonymous token
51
        $response = Resolver::resolveCreateToken(
52
            null,
53
            ['email' => 'anonymous']
54
        );
55
        $this->anonymousToken = $response['token'];
56
    }
57
58
    public function tearDown()
59
    {
60
        parent::tearDown();
61
    }
62
63
    private function buildRequest($anonymous = false)
64
    {
65
        $token = $anonymous ? $this->anonymousToken : $this->token;
66
        $request = clone Controller::curr()->getRequest();
67
        $request->addHeader('Authorization', 'Bearer ' . $token);
68
69
        $request->setSession(new Session(['hello' => 'bye'])); // We need a session
70
        Controller::curr()->setRequest($request);
71
72
        return $request;
73
    }
74
75
    public function testRefreshToken()
76
    {
77
        $this->buildRequest();
78
79
        $response = Resolver::resolveRefreshToken();
80
81
        $this->assertNotNull($response['token']);
82
        $this->assertInstanceOf(Member::class, $response['member']);
83
    }
84
85
    public function testAnonRefreshToken()
86
    {
87
        $this->buildRequest(true);
88
89
        $response = Resolver::resolveRefreshToken();
90
91
        $this->assertNotNull($response['token']);
92
        $this->assertInstanceOf(Member::class, $response['member']);
93
    }
94
}
95