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

MemberExtensionTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 135
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 68
dl 0
loc 135
rs 10
c 0
b 0
f 0
wmc 9

7 Methods

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