Passed
Pull Request — master (#127)
by Garion
03:26
created

SecurityAdminAccountResetExtensionTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace SilverStripe\MFA\Tests\Extension;
4
5
use SilverStripe\Admin\SecurityAdmin;
6
use SilverStripe\Dev\FunctionalTest;
7
use SilverStripe\MFA\Extension\SecurityAdminAccountResetExtension;
8
use SilverStripe\Security\Member;
9
use SilverStripe\Security\SecurityToken;
10
11
class SecurityAdminAccountResetExtensionTest extends FunctionalTest
12
{
13
    protected static $fixture_file = 'SecurityAdminAccountResetExtensionTest.yml';
14
15
    protected function setUp()
16
    {
17
        parent::setUp();
18
19
        SecurityToken::enable();
20
    }
21
22
    protected function tearDown()
23
    {
24
        parent::tearDown();
25
26
        SecurityToken::disable();
27
    }
28
29
    public function testEndpointRequiresCSRF()
30
    {
31
        $this->logInAs('admin');
32
33
        /** @var Member $member */
34
        $member = $this->objFromFixture(Member::class, 'squib');
35
36
        $response = $this->post(SecurityAdmin::singleton()->Link("reset/{$member->ID}"), [true]);
37
38
        $this->assertEquals(400, $response->getStatusCode(), $response->getBody());
39
        $this->assertContains('Invalid or missing CSRF', $response->getBody());
40
    }
41
42
    public function testResetCanBeInitiatedByAdmin()
43
    {
44
        $this->logInAs('admin');
45
46
        /** @var Member $member */
47
        $member = $this->objFromFixture(Member::class, 'squib');
48
49
        $response = $this->post(
50
            SecurityAdmin::singleton()->Link("reset/{$member->ID}"),
51
            [true],
52
            null,
53
            null,
54
            json_encode(['csrf_token' => SecurityToken::inst()->getValue()])
55
        );
56
57
        $this->assertEquals(200, $response->getStatusCode(), $response->getBody());
58
        $this->assertEmailSent($member->Email);
59
    }
60
61
    public function testResetCannotBeInitiatedByStandardUser()
62
    {
63
        $this->logInAs('squib');
64
65
        /** @var Member $member */
66
        $member = $this->objFromFixture(Member::class, 'admin');
67
68
        $response = $this->post(
69
            SecurityAdmin::singleton()->Link("reset/{$member->ID}"),
70
            [true],
71
            null,
72
            null,
73
            json_encode(['csrf_token' => SecurityToken::inst()->getValue()])
74
        );
75
76
        $this->assertEquals(403, $response->getStatusCode(), $response->getBody());
77
        $this->assertContains('Insufficient permissions', $response->getBody());
78
    }
79
}
80