Passed
Push — master ( 7a0915...70e153 )
by Simon
02:10
created

MemberExtensionTest::testOnBeforeWriteNoForce()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Firesphere\BootstrapMFA\Tests;
4
5
use Firesphere\BootstrapMFA\Extensions\MemberExtension;
6
use Firesphere\BootstrapMFA\Models\BackupCode;
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\Forms\FieldList;
12
use SilverStripe\Forms\TabSet;
13
use SilverStripe\Security\Member;
14
use SilverStripe\Security\Security;
15
use SilverStripe\SiteConfig\SiteConfig;
16
17
class MemberExtensionTest extends SapphireTest
18
{
19
    protected static $fixture_file = '../fixtures/member.yml';
20
21
    public function testMemberCodesExpired()
22
    {
23
        /** @var Member $member */
24
        $member = $this->objFromFixture(Member::class, 'member1');
25
26
        $member->updateMFA = true;
27
        $member->write();
28
29
        /** @var DataList|BackupCode $codes */
30
        $codes = $member->BackupCodes();
31
32
        $member->updateMFA = true;
33
        $member->write();
34
35
        foreach ($codes as $code) {
36
            /** @var BackupCode $backup */
37
            $backup = BackupCode::get()->byID($code->ID);
38
            $this->assertNull($backup);
39
        }
40
    }
41
42
    public function testMemberCodesNotExpired()
43
    {
44
        /** @var Member $member */
45
        $member = $this->objFromFixture(Member::class, 'member1');
46
47
        $member->updateMFA = true;
48
        $member->write();
49
50
        /** @var DataList|BackupCode $codes */
51
        $codes = $member->BackupCodes();
52
53
        $member->write();
54
55
        foreach ($codes as $code) {
56
            /** @var BackupCode $backup */
57
            $backup = BackupCode::get()->byID($code->ID);
58
            $this->assertNotNull($backup);
59
        }
60
    }
61
62
    public function testUpdateCMSFields()
63
    {
64
        $fields = FieldList::create([TabSet::create('Root')]);
65
66
        /** @var MemberExtension $extension */
67
        $extension = Injector::inst()->get(MemberExtension::class);
68
69
        // Something something in session
70
        Controller::curr()->getRequest()->getSession()->set('tokens', '123456');
71
        $extension->updateCMSFields($fields);
72
73
        $this->assertNull(Controller::curr()->getRequest()->getSession()->get('tokens'));
74
    }
75
76
    public function testUpdateCMSFieldsNoTokens()
77
    {
78
        $fields = FieldList::create([TabSet::create('Root')]);
79
80
        $extension = Injector::inst()->get(MemberExtension::class);
81
82
        $extension->updateCMSFields($fields);
83
84
        $this->assertFalse($fields->hasField('BackupTokens'));
85
    }
86
87
    public function testOnAfterWrite()
88
    {
89
        /** @var MemberExtension $extension */
90
        $extension = Injector::inst()->get(MemberExtension::class);
91
        /** @var Member $member */
92
        $member = $this->objFromFixture(Member::class, 'member1');
93
        $member->updateMFA = true;
94
95
        Security::setCurrentUser($member);
96
        $extension->setOwner($member);
97
98
        $extension->onAfterWrite();
99
100
        $this->assertEquals(15, count(CodeHelper::getCodesFromSession()));
101
    }
102
103
    public function testOnBeforeWrite()
104
    {
105
        /** @var MemberExtension $extension */
106
        $extension = Injector::inst()->get(MemberExtension::class);
107
        /** @var Member $member */
108
        $member = $this->objFromFixture(Member::class, 'member1');
109
        $member->MFAEnabled = false;
110
        $id = $member->write();
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
111
        $config = SiteConfig::current_site_config();
112
        $config->ForceMFA = true;
113
        $config->write;
114
        $extension->setOwner($member);
115
116
        $extension->onBeforeWrite();
117
118
        $this->assertTrue($member->MFAEnabled);
119
    }
120
121
    public function testOnBeforeWriteNoForce()
122
    {
123
        /** @var MemberExtension $extension */
124
        $extension = Injector::inst()->get(MemberExtension::class);
125
        /** @var Member $member */
126
        $member = $this->objFromFixture(Member::class, 'member1');
127
        $member->MFAEnabled = false;
128
        $config = SiteConfig::current_site_config();
129
        $config->ForceMFA = false;
130
        $config->write;
131
        $extension->setOwner($member);
132
133
        $extension->onBeforeWrite();
134
135
        $this->assertFalse($member->MFAEnabled);
136
    }
137
}
138