Passed
Pull Request — master (#53)
by Simon
02:04
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->setMember(null);
37
        $provider->updateTokens();
38
39
        $this->assertCount(0, CodeHelper::getCodesFromSession(), 'No member, no codes');
40
    }
41
42
    public function testFetchToken()
43
    {
44
        Controller::curr()->getRequest()->getSession()->clear('tokens');
45
        /** @var Member $member */
46
        $member = $this->objFromFixture(Member::class, 'member1');
47
        /** @var BootstrapMFAProvider $provider */
48
        $provider = Injector::inst()->get(BootstrapMFAProvider::class);
49
        $provider->setMember($member);
50
        $result = $provider->fetchToken();
51
52
        $this->assertCount(0, $result, 'There should be no tokens set up for the member yet');
53
54
        Security::setCurrentUser($member);
55
        $provider->updateTokens();
56
57
        $result = $provider->fetchToken();
58
59
        $this->assertCount(15, $result, 'A new set of backup codes');
60
        // New backupcodes
61
        $this->assertInstanceOf(BackupCode::class, $result->first());
62
        $provider->updateTokens();
63
64
        $result = $provider->fetchToken();
65
66
        $this->assertCount(15, $result, 'New backup codes are created and old ones thrown out');
67
        // New backupcodes
68
        $this->assertInstanceOf(BackupCode::class, $result->first());
69
    }
70
}
71