HaveIBeenPwnedServiceTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 32
c 1
b 0
f 1
dl 0
loc 72
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testGetSetArgs() 0 8 1
A setUp() 0 9 1
A testCheckPwndEmail() 0 24 1
A testCheckPwndPassword() 0 20 1
1
<?php
2
3
namespace Firesphere\HaveIBeenPwned\Tests;
4
5
use Firesphere\HaveIBeenPwned\Services\HaveIBeenPwnedService;
6
use GuzzleHttp\Handler\MockHandler;
7
use GuzzleHttp\Psr7\Response;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\Security\Member;
11
12
class HaveIBeenPwnedServiceTest extends SapphireTest
13
{
14
    protected $member;
15
16
    public function testGetSetArgs()
17
    {
18
        $args = ['test' => 'testing'];
19
        $service = Injector::inst()->create(HaveIBeenPwnedService::class);
20
21
        $service->setArgs($args);
22
23
        $this->assertEquals($args, $service->getArgs());
24
    }
25
26
    public function testCheckPwndPassword()
27
    {
28
        $body = file_get_contents(__DIR__ . '/../fixtures/pwnd123.txt');
29
        // This sets up the mock client to respond to the request it gets
30
        // with an HTTP 200 containing your mock body.
31
        $mock = new MockHandler([
32
            new Response(200, [], $body),
33
            new Response(200, [], $body),
34
        ]);
35
36
        /** @var HaveIBeenPwnedService $service */
37
        $service = Injector::inst()->createWithArgs(HaveIBeenPwnedService::class, [['handler' => $mock]]);
38
39
        $response = $service->checkPwnedPassword('123');
40
41
        $this->assertEquals(1014565, $response);
42
43
        $response = $service->checkPwnedPassword('abc');
44
45
        $this->assertEquals(0, $response);
46
    }
47
48
    public function testCheckPwndEmail()
49
    {
50
        $body = file_get_contents(__DIR__ . '/../fixtures/breachmails.json');
51
        // This sets up the mock client to respond to the request it gets
52
        // with an HTTP 200 containing your mock body.
53
        $mock = new MockHandler([
54
            new Response(200, [], $body),
55
            new Response(200, [], '[]'),
56
        ]);
57
58
        /** @var HaveIBeenPwnedService $service */
59
        $service = Injector::inst()->createWithArgs(HaveIBeenPwnedService::class, [['handler' => $mock]]);
60
61
        $response = $service->checkPwnedEmail($this->member);
62
63
        $this->assertContains(
64
            '000webhost',
65
            $response
66
        );
67
        $this->member->Email = '[email protected]';
68
69
        $response = $service->checkPwnedEmail($this->member);
70
71
        $this->assertEquals('', $response);
72
    }
73
74
75
    protected function setUp()
76
    {
77
        $this->member = Member::create([
78
            'Email'          => '[email protected]',
79
            'PasswordIsPwnd' => 0,
80
            'Password'       => '1234567890' // I is good password
81
        ]);
82
83
        return parent::setUp();
84
    }
85
}
86