Passed
Pull Request — master (#38)
by Simon
01:47
created

BootstrapMFAProviderTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 24
dl 0
loc 56
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testUpdateTokens() 0 10 1
A testUpdateTokensWithoutMember() 0 7 1
A testResultFound() 0 23 1
A setUp() 0 3 1
1
<?php
2
3
namespace Firesphere\BootstrapMFA\Tests;
4
5
use Firesphere\BootstrapMFA\Models\BackupCode;
6
use Firesphere\BootstrapMFA\Providers\BootstrapMFAProvider;
7
use Firesphere\BootstrapMFA\Tests\Helpers\CodeHelper;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\Security\Member;
11
use SilverStripe\Security\Security;
12
13
class BootstrapMFAProviderTest extends SapphireTest
14
{
15
    protected static $fixture_file = '../fixtures/member.yml';
16
17
    public function testUpdateTokens()
18
    {
19
        $member = $this->objFromFixture(Member::class, 'member1');
20
        Security::setCurrentUser($member);
21
        /** @var BootstrapMFAProvider $provider */
22
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
23
        $provider->setMember($member);
24
        $provider->updateTokens();
25
26
        $this->assertCount(15, CodeHelper::getCodesFromSession());
27
    }
28
29
    public function testUpdateTokensWithoutMember()
30
    {
31
        /** @var BootstrapMFAProvider $provider */
32
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
33
        $provider->updateTokens();
34
35
        $this->assertCount(0, CodeHelper::getCodesFromSession());
36
    }
37
38
    public function testResultFound()
39
    {
40
        /** @var Member $member */
41
        $member = $this->objFromFixture(Member::class, 'member1');
42
        /** @var BootstrapMFAProvider $provider */
43
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
44
        $provider->setMember($member);
45
        $token = $member->encryptWithUserSettings('123345');
46
        $result = $provider->fetchToken($token);
47
48
        // No backupcodes generated yet
49
        $this->assertNull($result);
50
51
        Security::setCurrentUser($member);
52
        $provider->updateTokens();
53
54
        $tokens = CodeHelper::getCodesFromSession();
55
56
        $token = $member->encryptWithUserSettings($tokens[0]);
57
        $result = $provider->fetchToken($token);
58
59
        // New backupcodes
60
        $this->assertInstanceOf(BackupCode::class, $result);
61
    }
62
63
    /**
64
     * Somehow, setUp is required otherwise the fixtures aren't loaded
65
     */
66
    public function setUp()
67
    {
68
        return parent::setUp();
69
    }
70
}
71