Completed
Push — master ( e81144...a25954 )
by Robbie
15s queued 15s
created

BootstrapMFAProviderTest::testFetchToken()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 0
dl 0
loc 27
rs 9.7666
c 0
b 0
f 0
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\Control\Controller;
9
use SilverStripe\Core\Injector\Injector;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\Security\Member;
12
use SilverStripe\Security\Security;
13
14
class BootstrapMFAProviderTest extends SapphireTest
15
{
16
    protected static $fixture_file = '../fixtures/member.yml';
17
18
    public function testUpdateTokens()
19
    {
20
        $member = $this->objFromFixture(Member::class, 'member1');
21
        Security::setCurrentUser($member);
22
        /** @var BootstrapMFAProvider $provider */
23
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
24
        $provider->setMember($member);
25
        $provider->updateTokens();
26
27
        $this->assertCount(15, CodeHelper::getCodesFromSession());
28
    }
29
30
    public function testUpdateTokensWithoutMember()
31
    {
32
        Controller::curr()->getRequest()->getSession()->clear('tokens');
33
        /** @var BootstrapMFAProvider $provider */
34
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
35
        $provider->setMember(null);
36
        $provider->updateTokens();
37
38
        $this->assertCount(0, CodeHelper::getCodesFromSession(), 'No member, no codes');
39
    }
40
41
    public function testFetchToken()
42
    {
43
        Controller::curr()->getRequest()->getSession()->clear('tokens');
44
        /** @var Member $member */
45
        $member = $this->objFromFixture(Member::class, 'member1');
46
        /** @var BootstrapMFAProvider $provider */
47
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
48
        $provider->setMember($member);
49
        $result = $provider->fetchToken();
50
51
        $this->assertCount(0, $result, 'There should be no tokens set up for the member yet');
52
53
        Security::setCurrentUser($member);
54
        $provider->updateTokens();
55
56
        $result = $provider->fetchToken();
57
58
        $this->assertCount(15, $result, 'A new set of backup codes');
59
        // New backupcodes
60
        $this->assertInstanceOf(BackupCode::class, $result->first());
61
        $provider->updateTokens();
62
63
        $result = $provider->fetchToken();
64
65
        $this->assertCount(15, $result, 'New backup codes are created and old ones thrown out');
66
        // New backupcodes
67
        $this->assertInstanceOf(BackupCode::class, $result->first());
68
    }
69
}
70