Passed
Push — master ( 74fcd0...29a100 )
by Simon
02:02
created

MemberExtensionTest::testOnAfterWrite()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 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\Debug;
11
use SilverStripe\Dev\SapphireTest;
12
use SilverStripe\Forms\FieldList;
13
use SilverStripe\Forms\Tab;
14
use SilverStripe\Forms\TabSet;
15
use SilverStripe\Security\Member;
16
use SilverStripe\Security\Security;
17
18
class MemberExtensionTest extends SapphireTest
19
{
20
    protected static $fixture_file = '../fixtures/member.yml';
21
22
    public function testMemberCodesExpired()
23
    {
24
        /** @var Member $member */
25
        $member = $this->objFromFixture(Member::class, 'member1');
26
27
        $member->updateMFA = true;
28
        $member->write();
29
30
        /** @var DataList|BackupCode $codes */
31
        $codes = $member->BackupCodes();
32
33
        $member->updateMFA = true;
34
        $member->write();
35
36
        foreach ($codes as $code) {
37
            /** @var BackupCode $backup */
38
            $backup = BackupCode::get()->byID($code->ID);
39
            $this->assertNull($backup);
40
        }
41
    }
42
43
    public function testMemberCodesNotExpired()
44
    {
45
        /** @var Member $member */
46
        $member = $this->objFromFixture(Member::class, 'member1');
47
48
        $member->updateMFA = true;
49
        $member->write();
50
51
        /** @var DataList|BackupCode $codes */
52
        $codes = $member->BackupCodes();
53
54
        $member->write();
55
56
        foreach ($codes as $code) {
57
            /** @var BackupCode $backup */
58
            $backup = BackupCode::get()->byID($code->ID);
59
            $this->assertNotNull($backup);
60
        }
61
    }
62
63
    public function testUpdateCMSFields()
64
    {
65
        $fields = FieldList::create([TabSet::create('Root')]);
0 ignored issues
show
Bug introduced by
'Root' of type string is incompatible with the type array expected by parameter $args of SilverStripe\View\ViewableData::create(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

65
        $fields = FieldList::create([TabSet::create(/** @scrutinizer ignore-type */ 'Root')]);
Loading history...
66
67
        /** @var MemberExtension $extension */
68
        $extension = Injector::inst()->get(MemberExtension::class);
69
70
        // Something something in session
71
        Controller::curr()->getRequest()->getSession()->set('tokens', '123456');
72
        $extension->updateCMSFields($fields);
73
74
        $this->assertNull(Controller::curr()->getRequest()->getSession()->get('tokens'));
75
    }
76
77
    public function testUpdateCMSFieldsNoTokens()
78
    {
79
        $fields = FieldList::create([TabSet::create('Root')]);
0 ignored issues
show
Bug introduced by
'Root' of type string is incompatible with the type array expected by parameter $args of SilverStripe\View\ViewableData::create(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

79
        $fields = FieldList::create([TabSet::create(/** @scrutinizer ignore-type */ 'Root')]);
Loading history...
80
81
        $extension = Injector::inst()->get(MemberExtension::class);
82
83
        $extension->updateCMSFields($fields);
84
85
        $this->assertFalse($fields->hasField('BackupTokens'));
86
    }
87
88
    public function testOnAfterWrite()
89
    {
90
        /** @var MemberExtension $extension */
91
        $extension = Injector::inst()->get(MemberExtension::class);
92
        /** @var Member $member */
93
        $member = $this->objFromFixture(Member::class, 'member1');
94
        $member->updateMFA = true;
95
96
        Security::setCurrentUser($member);
97
        $extension->setOwner($member);
98
99
        $extension->onAfterWrite();
100
101
        $session = Controller::curr()->getRequest()->getSession();
0 ignored issues
show
Unused Code introduced by
The assignment to $session is dead and can be removed.
Loading history...
102
103
        $this->assertEquals(15, count(CodeHelper::getCodesFromSession()));
104
    }
105
}
106