Passed
Pull Request — master (#53)
by Simon
02:04
created

BootstrapMFAProviderTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 54
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testUpdateTokens() 0 10 1
A testUpdateTokensWithoutMember() 0 9 1
A testFetchToken() 0 27 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\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