Passed
Push — master ( 759e39...9ea72e )
by Simon
02:00
created

testUpdateValidatePasswordDeny()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 10
nc 1
nop 0
dl 0
loc 22
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
namespace Firesphere\HaveIBeenPwnd\Tests;
4
5
use Firesphere\HaveIBeenPwnd\Extensions\PasswordValidatorExtension;
6
use GuzzleHttp\Handler\MockHandler;
7
use GuzzleHttp\Psr7\Response;
8
use SilverStripe\Core\Config\Config;
9
use SilverStripe\Core\Injector\Injector;
10
use SilverStripe\Dev\Debug;
11
use SilverStripe\Dev\SapphireTest;
12
use SilverStripe\ORM\ValidationResult;
13
use SilverStripe\Security\Member;
14
15
class PasswordValidatorExtensionTest extends SapphireTest
16
{
17
    public function testUpdateValidatePasswordAllowAll()
18
    {
19
        /** @var PasswordValidatorExtension $extension */
20
        $extension = Injector::inst()->get(PasswordValidatorExtension::class);
21
22
        /** @var Member $member */
23
        $member = Member::create();
24
        /** @var ValidationResult $valid */
25
        $valid = ValidationResult::create();
26
        $extension->updateValidatePassword('donotcare', $member, $valid);
27
28
        $this->assertTrue($valid->isValid());
29
        $this->assertEquals(0, $member->PasswordIsPwnd);
30
        $this->assertEquals('', $member->BreachedSites);
31
    }
32
33
    public function testUpdateValidatePasswordDeny()
34
    {
35
        Config::modify()->set(PasswordValidatorExtension::class, 'allow_pwnd', false);
36
        Config::modify()->set(PasswordValidatorExtension::class, 'pwn_treshold', 1);
37
        /** @var PasswordValidatorExtension $extension */
38
        $extension = Injector::inst()->get(PasswordValidatorExtension::class);
39
40
        /** @var Member $member */
41
        $member = Member::create();
42
        /** @var ValidationResult $valid */
43
        $valid = ValidationResult::create();
44
45
        $body = file_get_contents(__DIR__ . '/../fixtures/pwnd123.txt');
46
        // This sets up the mock client to respond to the request it gets
47
        // with an HTTP 200 containing your mock body.
48
        $mock = new MockHandler([
49
            new Response(123, [], $body),
50
        ]);
51
52
        $extension->updateValidatePassword('123', $member, $valid, ['handler' => $mock]);
53
54
        $this->assertFalse($valid->isValid());
55
    }
56
57
    public function testUpdateValidatePasswordDenyAtTen()
58
    {
59
        Config::modify()->set(PasswordValidatorExtension::class, 'pwn_treshold', 10);
60
61
        /** @var PasswordValidatorExtension $extension */
62
        $extension = Injector::inst()->get(PasswordValidatorExtension::class);
63
64
        /** @var Member $member */
65
        $member = Member::create();
66
        /** @var ValidationResult $valid */
67
        $valid = ValidationResult::create();
68
69
        $body = file_get_contents(__DIR__ . '/../fixtures/pwnd1234.txt');
70
        // This sets up the mock client to respond to the request it gets
71
        // with an HTTP 200 containing your mock body.
72
        $mock = new MockHandler([
73
            new Response(123, [], $body),
74
            new Response(123, [], $body),
75
        ]);
76
77
        $extension->updateValidatePassword('1234', $member, $valid, ['handler' => $mock]);
78
79
        $this->assertTrue($valid->isValid());
80
        $this->assertEquals(3, $member->PasswordIsPwnd);
81
        $extension->updateValidatePassword('12345', $member, $valid, ['handler' => $mock]);
82
83
        $this->assertFalse($valid->isValid());
84
        $this->assertEquals(11, $member->PasswordIsPwnd);
85
    }
86
87
    protected function setUp()
88
    {
89
        Config::modify()->set(PasswordValidatorExtension::class, 'allow_pwnd', true);
90
        Config::modify()->set(PasswordValidatorExtension::class, 'pwn_treshold', 0);
91
        Config::modify()->set(PasswordValidatorExtension::class, 'save_pwnd', false);
92
93
        return parent::setUp();
94
    }
95
}
96