HaveIBeenPwnedPageControllerTest::testCheckEmail()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 36
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 15
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 36
rs 9.7666
1
<?php
2
3
namespace Firesphere\HaveIBeenPwned\Tests;
4
5
use Firesphere\HaveIBeenPwned\Controllers\HaveIBeenPwnedPageController;
6
use Firesphere\HaveIBeenPwned\Models\HaveIBeenPwnedPage;
7
use GuzzleHttp\Handler\MockHandler;
8
use GuzzleHttp\Psr7\Response;
9
use SilverStripe\Core\Injector\Injector;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\Security\IdentityStore;
12
use SilverStripe\Security\Member;
13
use SilverStripe\Security\Security;
14
15
class HaveIBeenPwnedPageControllerTest extends SapphireTest
16
{
17
    public function testClassExists()
18
    {
19
        /** @var HaveIBeenPwnedPage $page */
20
        $page = Injector::inst()->get(HaveIBeenPwnedPage::class);
21
22
        /** @var HaveIBeenPwnedPageController $controller */
23
        $controller = Injector::inst()->get(HaveIBeenPwnedPageController::class, false, [$page]);
24
25
        $this->assertInstanceOf(HaveIBeenPwnedPageController::class, $controller);
26
    }
27
28
    public function testCheckEmail()
29
    {
30
        /** @var HaveIBeenPwnedPage $page */
31
        $page = Injector::inst()->get(HaveIBeenPwnedPage::class);
32
33
        /** @var HaveIBeenPwnedPageController $controller */
34
        $controller = Injector::inst()->get(HaveIBeenPwnedPageController::class, false, [$page]);
35
36
        // Log out. Solidly I hope
37
        Security::setCurrentUser(null);
38
        Injector::inst()->get(IdentityStore::class)->logOut();
39
40
        $response = $controller->checkEmail();
41
42
        // If there's no user, it should just return itself
43
        $this->assertInstanceOf(HaveIBeenPwnedPageController::class, $response);
44
45
        $member = Member::create(['Email' => '[email protected]']);
46
        Security::setCurrentUser($member);
47
        $body = file_get_contents(__DIR__ . '/../fixtures/breachmails.json');
48
        // This sets up the mock client to respond to the request it gets
49
        // with an HTTP 200 containing your mock body.
50
        $mock = new MockHandler([
51
            new Response(200, [], $body),
52
        ]);
53
54
        /** @var HaveIBeenPwnedPageController $controller */
55
        $controller = Injector::inst()->get(HaveIBeenPwnedPageController::class, true, [$page]);
56
57
        /** @var HaveIBeenPwnedPageController $response */
58
        $response = $controller->checkEmail(null, ['handler' => $mock]);
59
60
        $this->assertContains('17Media', $response->Content);
61
62
        // We don't have a full set, so Yahoo shouldn't show
63
        $this->assertNotContains('Yahoo', $response->Content);
64
    }
65
}
66