Completed
Push — master ( 0e58f5...d2de37 )
by
unknown
13s
created

MemberExtensionTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 140
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 69
dl 0
loc 140
rs 10
c 0
b 0
f 0
wmc 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A testOnBeforeWriteNoForce() 0 15 1
A testUpdateCMSFieldsNoTokens() 0 9 1
A testOnBeforeWrite() 0 16 1
A testMemberCodesExpired() 0 18 2
A testOnAfterWrite() 0 15 1
A testUpdateCMSFields() 0 12 1
A testMemberCodesNotExpired() 0 17 2
A testIsInGracePeriod() 0 18 1
1
<?php
2
3
namespace Firesphere\BootstrapMFA\Tests;
4
5
use Firesphere\BootstrapMFA\Extensions\MemberExtension;
6
use Firesphere\BootstrapMFA\Extensions\SiteConfigExtension;
7
use Firesphere\BootstrapMFA\Models\BackupCode;
8
use Firesphere\BootstrapMFA\Tests\Helpers\CodeHelper;
9
use SilverStripe\Control\Controller;
10
use SilverStripe\Core\Injector\Injector;
11
use SilverStripe\Dev\SapphireTest;
12
use SilverStripe\Forms\FieldList;
13
use SilverStripe\Forms\TabSet;
14
use SilverStripe\ORM\DataList;
15
use SilverStripe\Security\Member;
16
use SilverStripe\Security\Security;
17
use SilverStripe\SiteConfig\SiteConfig;
18
19
class MemberExtensionTest extends SapphireTest
20
{
21
    protected static $fixture_file = '../fixtures/member.yml';
22
23
    public function testMemberCodesExpired()
24
    {
25
        /** @var Member|MemberExtension $member */
26
        $member = $this->objFromFixture(Member::class, 'member1');
27
28
        $member->updateMFA = true;
29
        $member->write();
30
31
        /** @var DataList|BackupCode $codes */
32
        $codes = $member->BackupCodes();
33
34
        $member->updateMFA = true;
35
        $member->write();
36
37
        foreach ($codes as $code) {
38
            /** @var BackupCode $backup */
39
            $backup = BackupCode::get()->byID($code->ID);
40
            $this->assertNull($backup);
41
        }
42
    }
43
44
    public function testMemberCodesNotExpired()
45
    {
46
        /** @var Member|MemberExtension $member */
47
        $member = $this->objFromFixture(Member::class, 'member1');
48
49
        $member->updateMFA = true;
50
        $member->write();
51
52
        /** @var DataList|BackupCode $codes */
53
        $codes = $member->BackupCodes();
54
55
        $member->write();
56
57
        foreach ($codes as $code) {
58
            /** @var BackupCode $backup */
59
            $backup = BackupCode::get()->byID($code->ID);
60
            $this->assertNotNull($backup);
61
        }
62
    }
63
64
    public function testUpdateCMSFields()
65
    {
66
        $fields = FieldList::create([TabSet::create('Root')]);
67
68
        /** @var MemberExtension $extension */
69
        $extension = Injector::inst()->get(MemberExtension::class);
70
71
        // Something something in session
72
        Controller::curr()->getRequest()->getSession()->set('tokens', '123456');
73
        $extension->updateCMSFields($fields);
74
75
        $this->assertNull(Controller::curr()->getRequest()->getSession()->get('tokens'));
76
    }
77
78
    public function testUpdateCMSFieldsNoTokens()
79
    {
80
        $fields = FieldList::create([TabSet::create('Root')]);
81
82
        $extension = Injector::inst()->get(MemberExtension::class);
83
84
        $extension->updateCMSFields($fields);
85
86
        $this->assertFalse($fields->hasField('BackupTokens'));
87
    }
88
89
    public function testOnAfterWrite()
90
    {
91
        /** @var MemberExtension $extension */
92
        $extension = Injector::inst()->get(MemberExtension::class);
93
        /** @var Member $member */
94
        $member = $this->objFromFixture(Member::class, 'member1');
95
        $member->updateMFA = true;
96
97
        Security::setCurrentUser($member);
98
        $extension->setOwner($member);
99
100
        $extension->onAfterWrite();
101
102
        $this->assertCount(15, CodeHelper::getCodesFromSession());
103
        $this->assertCount(15, $member->BackupCodes());
104
    }
105
106
    public function testOnBeforeWrite()
107
    {
108
        /** @var MemberExtension $extension */
109
        $extension = Injector::inst()->get(MemberExtension::class);
110
        /** @var Member|MemberExtension $member */
111
        $member = $this->objFromFixture(Member::class, 'member1');
112
        $member->MFAEnabled = false;
113
        $member->write();
114
        $config = SiteConfig::current_site_config();
115
        $config->ForceMFA = true;
116
        $config->write;
117
        $extension->setOwner($member);
118
119
        $extension->onBeforeWrite();
120
121
        $this->assertTrue($member->MFAEnabled);
122
    }
123
124
    public function testOnBeforeWriteNoForce()
125
    {
126
        /** @var MemberExtension $extension */
127
        $extension = Injector::inst()->get(MemberExtension::class);
128
        /** @var Member $member */
129
        $member = $this->objFromFixture(Member::class, 'member1');
130
        $member->MFAEnabled = false;
131
        $config = SiteConfig::current_site_config();
132
        $config->ForceMFA = false;
133
        $config->write;
134
        $extension->setOwner($member);
135
136
        $extension->onBeforeWrite();
137
138
        $this->assertFalse($member->MFAEnabled);
139
    }
140
141
    public function testIsInGracePeriod()
142
    {
143
        /** @var Member|MemberExtension $member */
144
        $member = $this->objFromFixture(Member::class, 'member2');
145
        Security::setCurrentUser($member);
146
        $this->assertTrue($member->isInGracePeriod());
147
        /** @var SiteConfig|SiteConfigExtension $config */
148
        $config = SiteConfig::current_site_config();
149
        $config->EnforceMFA = true;
150
        $config->write();
151
        $this->assertTrue($member->isInGracePeriod());
152
        $member->Created = '1970-01-01 00:00:00';
153
        $member->write();
154
        $this->assertFalse($member->isInGracePeriod());
155
        $member->Created = date('Y-m-d 00:00:00');
156
        $member->MFAEnabled = true;
157
        $member->write();
158
        $this->assertFalse($member->isInGracePeriod());
159
    }
160
}
161