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

YubikeyAuthProviderTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
dl 0
loc 90
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A testCheckNoYubikeyDaysError() 0 10 1
A testCheckNoYubikeyDaysZero() 0 11 1
A testvalidateTokenDuplicate() 0 11 1
A testvalidateTokenNotMatchesMember() 0 9 1
A testvalidateTokenID() 0 11 1
A testvalidateTokenUnique() 0 12 1
A setUp() 0 5 1
1
<?php
2
3
namespace Firesphere\YubiAuth\Tests;
4
5
use Firesphere\YubiAuth\Providers\YubikeyAuthProvider;
6
use SilverStripe\Core\Config\Config;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Dev\Debug;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\ORM\ValidationResult;
11
use SilverStripe\Security\Member;
12
13
class YubikeyAuthProviderTest extends SapphireTest
14
{
15
    protected static $fixture_file = '../fixtures/Member.yml';
16
17
    /**
18
     * @var YubikeyAuthProvider
19
     */
20
    protected $provider;
21
22
    public function testCheckNoYubikeyDaysZero()
23
    {
24
        Config::modify()->set(YubikeyAuthProvider::class, 'MaxNoYubiLoginDays', 0);
25
        /** @var Member $member */
26
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
27
        $member->Created = date('Y-m-d', strtotime('-1 year'));
28
        $member->YubiAuthEnabled = false;
29
        $member->write();
30
31
        $result = $this->provider->checkNoYubiDays($member);
32
        $this->assertInstanceOf(Member::class, $result);
33
    }
34
35
    public function testCheckNoYubikeyDaysError()
36
    {
37
        /** @var Member $member */
38
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
39
        $member->Created = date('Y-m-d', strtotime('-1 year'));
40
        $member->YubiAuthEnabled = false;
41
        $member->write();
42
43
        $result = $this->provider->checkNoYubiDays($member);
44
        $this->assertInstanceOf(ValidationResult::class, $result);
45
    }
46
47
    public function testvalidateTokenDuplicate()
48
    {
49
        $member1 = Member::create(['Email' => '[email protected]', 'Yubikey' => '1234567890']);
50
        $member1->write();
51
        $member2 = Member::create(['Email' => '[email protected]', 'Yubikey' => '1234567890']);
52
        $member2->write();
53
54
        $result = $this->provider->validateToken($member1, '1234567890');
55
56
        $this->assertInstanceOf(ValidationResult::class, $result);
57
        $this->assertFalse($result->isValid());
58
    }
59
60
    public function testvalidateTokenID()
61
    {
62
        $member1 = Member::create(['Email' => '[email protected]', 'Yubikey' => '0987654321']);
63
        $member1->write();
64
        $member2 = Member::create(['Email' => '[email protected]', 'Yubikey' => '1234567890']);
65
        $member2->write();
66
67
        $result = $this->provider->validateToken($member1, '1234567890');
68
69
        $this->assertInstanceOf(ValidationResult::class, $result);
70
        $this->assertFalse($result->isValid());
71
    }
72
73
    public function testvalidateTokenNotMatchesMember()
74
    {
75
        $member1 = Member::create(['Email' => '[email protected]', 'Yubikey' => '0987654321']);
76
        $member1->write();
77
78
        $result = $this->provider->validateToken($member1, '12344567890');
79
80
        $this->assertInstanceOf(ValidationResult::class, $result);
81
        $this->assertFalse($result->isValid());
82
    }
83
84
    public function testvalidateTokenUnique()
85
    {
86
        $member1 = Member::create(['Email' => '[email protected]', 'Yubikey' => 'abcdefghij']);
87
        $member1->write();
88
        $member2 = Member::create(['Email' => '[email protected]', 'Yubikey' => '1234567890']);
89
        $member2->write();
90
91
        $result = $this->provider->validateToken($member1, 'abcdefghij');
92
93
        $this->assertInstanceOf(ValidationResult::class, $result);
94
        Debug::dump($result->getMessages());
95
        $this->assertTrue($result->isValid());
96
    }
97
98
    protected function setUp()
99
    {
100
        $this->provider = Injector::inst()->get(YubikeyAuthProvider::class);
101
102
        return parent::setUp();
103
    }
104
}
105