Passed
Pull Request — master (#53)
by Simon
01:49
created

BootstrapMFAProviderTest::testResultFound()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 0
dl 0
loc 22
rs 9.8666
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\Control\Session;
10
use SilverStripe\Core\Injector\Injector;
11
use SilverStripe\Dev\SapphireTest;
12
use SilverStripe\Security\Member;
13
use SilverStripe\Security\Security;
14
15
class BootstrapMFAProviderTest extends SapphireTest
16
{
17
    protected static $fixture_file = '../fixtures/member.yml';
18
19
    public function testUpdateTokens()
20
    {
21
        $member = $this->objFromFixture(Member::class, 'member1');
22
        Security::setCurrentUser($member);
23
        /** @var BootstrapMFAProvider $provider */
24
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
25
        $provider->setMember($member);
26
        $provider->updateTokens();
27
28
        $this->assertCount(15, CodeHelper::getCodesFromSession());
29
    }
30
31
    public function testUpdateTokensWithoutMember()
32
    {
33
        Controller::curr()->getRequest()->getSession()->clear('tokens');
34
        /** @var BootstrapMFAProvider $provider */
35
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
36
        $provider->updateTokens();
37
38
        $this->assertCount(0, CodeHelper::getCodesFromSession());
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
        // Generation here is kinda pointless, but Interface
50
        $result = $provider->fetchToken();
51
52
        $this->assertCount(15, $result, 'By default, when a member is created, tokens are generated');
53
54
        Security::setCurrentUser($member);
55
        $provider->updateTokens();
56
57
        $result = $provider->fetchToken();
58
59
        $this->assertCount(15, $result, 'New backup codes are created and old ones thrown out');
60
        // New backupcodes
61
        $this->assertInstanceOf(BackupCode::class, $result->first());
62
    }
63
}
64