Passed
Push — master ( e2e498...121175 )
by Simon
03:29
created

RefreshTokenMutationCreatorTest::buildRequest()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 13
rs 9.4285
c 2
b 0
f 0
cc 2
eloc 8
nc 2
nop 1
1
<?php
2
3
namespace Firesphere\GraphQLJWT\Tests;
4
5
use Firesphere\GraphQLJWT\CreateTokenMutationCreator;
6
use Firesphere\GraphQLJWT\JWTAuthenticator;
7
use Firesphere\GraphQLJWT\RefreshTokenMutationCreator;
8
use GraphQL\Type\Definition\ResolveInfo;
0 ignored issues
show
Bug introduced by
The type GraphQL\Type\Definition\ResolveInfo was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use SilverStripe\Control\Controller;
10
use SilverStripe\Control\Director;
11
use SilverStripe\Control\HTTPRequest;
12
use SilverStripe\Control\Session;
13
use SilverStripe\Core\Config\Config;
14
use SilverStripe\Core\Injector\Injector;
15
use SilverStripe\Dev\SapphireTest;
16
use SilverStripe\Security\Member;
17
18
class RefreshTokenMutationCreatorTest extends SapphireTest
19
{
20
    protected static $fixture_file = '../fixtures/JWTAuthenticatorTest.yml';
21
22
    protected $member;
23
24
    protected $token;
25
26
    protected $anonymousToken;
27
28
    public function setUp()
29
    {
30
        putenv('JWT_SIGNER_KEY=test_signer');
31
32
        parent::setUp();
33
        $this->member = $this->objFromFixture(Member::class, 'admin');
34
        $createToken = Injector::inst()->get(CreateTokenMutationCreator::class);
35
        // Requires to be an expired token
36
        Config::modify()->set(JWTAuthenticator::class, 'nbf_expiration', -5);
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
        $response = $createToken->resolve(
47
            null,
48
            ['Email' => '[email protected]', 'Password' => 'notCorrect'],
49
            [],
50
            new ResolveInfo([])
51
        );
52
53
        $this->anonymousToken = $response->Token;
54
    }
55
56
    public function tearDown()
57
    {
58
        parent::tearDown();
59
    }
60
61
    private function buildRequest($anonymous = false)
62
    {
63
        $token = $this->token;
64
        if ($anonymous) {
65
            $token = $this->anonymousToken;
66
        }
67
        $request = new HTTPRequest('POST', Director::absoluteBaseURL() . '/graphql');
68
        $request->addHeader('Authorization', 'Bearer ' . $token);
69
70
        $request->setSession(new Session(['hello' => 'bye'])); // We need a session
71
        Controller::curr()->setRequest($request);
72
73
        return $request;
74
    }
75
76
    public function testRefreshToken()
77
    {
78
        $this->buildRequest();
79
80
        $queryCreator = Injector::inst()->get(RefreshTokenMutationCreator::class);
81
        $response = $queryCreator->resolve(null, [], [], new ResolveInfo([]));
82
83
        $this->assertNotNull($response->Token);
84
        $this->assertInstanceOf(Member::class, $response);
85
    }
86
87
    public function testAnonRefreshToken()
88
    {
89
        $this->buildRequest(true);
90
        Config::modify()->set(JWTAuthenticator::class, 'anonymous_allowed', true);
91
92
        $queryCreator = Injector::inst()->get(RefreshTokenMutationCreator::class);
93
        $response = $queryCreator->resolve(null, [], [], new ResolveInfo([]));
94
95
        $this->assertNotNull($response->Token);
96
        $this->assertInstanceOf(Member::class, $response);
97
    }
98
}
99