Passed
Pull Request — master (#118)
by Guy
02:37
created

testStartRegistrationAssertsValidMethod()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace SilverStripe\MFA\Tests\Controller;
4
5
use SilverStripe\Admin\AdminRootController;
6
use SilverStripe\Control\Controller;
7
use SilverStripe\Dev\FunctionalTest;
8
use SilverStripe\MFA\Service\MethodRegistry;
9
use SilverStripe\MFA\Store\SessionStore;
10
use SilverStripe\MFA\Tests\Stub\BasicMath\Method as BasicMathMethod;
11
use SilverStripe\Security\Member;
12
13
class AdminRegistrationControllerTest extends FunctionalTest
14
{
15
    protected static $fixture_file = 'AdminRegistrationControllerTest.yml';
16
17
    protected function setUp()
18
    {
19
        parent::setUp();
20
21
        MethodRegistry::config()->set('methods', [
22
            BasicMathMethod::class,
23
        ]);
24
    }
25
26
    public function testStartRegistrationAssertsValidMethod()
27
    {
28
        $this->logInAs($this->objFromFixture(Member::class, 'sally_smith'));
29
30
        $result = $this->get(Controller::join_links(AdminRootController::admin_url(), 'mfa', 'register/foo'));
31
32
        $this->assertSame(400, $result->getStatusCode());
33
        $this->assertContains('No such method is available', $result->getBody());
34
    }
35
36
    public function testStartRegistrationReturns200Response()
37
    {
38
        $this->logInAs($this->objFromFixture(Member::class, 'sally_smith'));
39
        $method = new BasicMathMethod();
40
41
        $result = $this->get(
42
            Controller::join_links(
43
                AdminRootController::admin_url(),
44
                'mfa',
45
                'register',
46
                $method->getURLSegment()
47
            )
48
        );
49
50
        $this->assertSame(200, $result->getStatusCode());
51
    }
52
53
    public function testFinishRegistrationGracefullyHandlesInvalidSessions()
54
    {
55
        $this->logInAs($this->objFromFixture(Member::class, 'sally_smith'));
56
        $method = new BasicMathMethod();
57
58
        $result = $this->post(
59
            Controller::join_links(
60
                AdminRootController::admin_url(),
61
                'mfa',
62
                'register',
63
                $method->getURLSegment()
64
            ),
65
            ['dummy' => 'data']
66
        );
67
68
        $this->assertSame(400, $result->getStatusCode());
69
        $this->assertContains('Invalid session', $result->getBody());
70
    }
71
72
    public function testFinishRegistrationAssertsValidMethod()
73
    {
74
        /** @var Member $member */
75
        $member = $this->objFromFixture(Member::class, 'sally_smith');
76
        $this->logInAs($member);
77
        $method = new BasicMathMethod();
78
79
        $store = new SessionStore($member);
80
        $store->setMethod($method->getURLSegment());
81
        $this->session()->set(SessionStore::SESSION_KEY, $store);
82
83
        $result = $this->post(
84
            Controller::join_links(
85
                AdminRootController::admin_url(),
86
                'mfa',
87
                'register',
88
                'foo'
89
            ),
90
            ['dummy' => 'data']
91
        );
92
93
        $this->assertSame(400, $result->getStatusCode());
94
        $this->assertContains('No such method is available', $result->getBody());
95
    }
96
97
    public function testFinishRegistrationCompletesWhenValid()
98
    {
99
        /** @var Member $member */
100
        $member = $this->objFromFixture(Member::class, 'sally_smith');
101
        $this->logInAs($member);
102
        $method = new BasicMathMethod();
103
104
        $store = new SessionStore($member);
105
        $store->setMethod($method->getURLSegment());
106
        $this->session()->set(SessionStore::SESSION_KEY, $store);
107
108
        $result = $this->post(
109
            Controller::join_links(
110
                AdminRootController::admin_url(),
111
                'mfa',
112
                'register',
113
                $method->getURLSegment()
114
            ),
115
            ['dummy' => 'data'],
116
            null,
117
            $this->session(),
118
            json_encode(['number' => 7])
119
        );
120
121
        $this->assertSame(201, $result->getStatusCode());
122
    }
123
}
124