Passed
Pull Request — master (#110)
by Robbie
02:24
created

testMFADoesNotLoadWhenAUserIsLoggedIn()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
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\Authenticator;
4
5
use SilverStripe\Control\HTTPResponse;
6
use SilverStripe\Core\Config\Config;
7
use SilverStripe\Dev\FunctionalTest;
8
use SilverStripe\MFA\Authenticator\MemberAuthenticator;
9
use SilverStripe\MFA\Extension\MemberExtension;
10
use SilverStripe\MFA\Service\MethodRegistry;
11
use SilverStripe\MFA\Tests\Stub\BasicMath\Method;
12
use SilverStripe\Security\Member;
13
use SilverStripe\SiteConfig\SiteConfig;
14
15
class ChangePasswordHandlerTest extends FunctionalTest
16
{
17
    protected static $fixture_file = 'ChangePasswordHandlerTest.yml';
18
19
    protected function setUp()
20
    {
21
        parent::setUp();
22
23
        Config::modify()
24
            ->set(MethodRegistry::class, 'methods', [Method::class])
25
            ->set(Member::class, 'auto_login_token_lifetime', 10);
26
27
        SiteConfig::current_site_config()->update(['MFAEnabled' => true])->write();
28
    }
29
30
    /**
31
     * @param Member $member
32
     * @param string $password
33
     * @return HTTPResponse
34
     */
35
    protected function doLogin(Member $member, $password)
36
    {
37
        $this->get('Security/changepassword');
38
39
        return $this->submitForm(
40
            'MemberLoginForm_LoginForm',
41
            null,
42
            [
43
                'Email' => $member->Email,
44
                'Password' => $password,
45
                'AuthenticationMethod' => MemberAuthenticator::class,
46
                'action_doLogin' => 1,
47
            ]
48
        );
49
    }
50
51
    public function testMFADoesNotLoadWhenAUserIsLoggedIn()
52
    {
53
        $this->logInAs('simon');
54
        $response = $this->get('Security/changepassword');
55
        $this->assertContains('OldPassword', $response->getBody());
56
    }
57
58
    public function testMFADoesNotLoadWhenAUserDoesNotHaveRegisteredMethods()
59
    {
60
        /** @var Member&MemberExtension $member */
61
        $member = $this->objFromFixture(Member::class, 'guy');
62
        $memberId = $member->ID;
63
        $token = $member->generateAutologinTokenAndStoreHash();
64
        $response = $this->get("Security/changepassword?m={$memberId}&t={$token}");
65
66
        $this->assertContains('NewPassword1', $response->getBody(), 'There should be a new password field');
67
        $this->assertContains('NewPassword2', $response->getBody(), 'There should be a confirm new password field');
68
    }
69
70
    public function testMFALoadsWhenAUserHasConfiguredMethods()
71
    {
72
        /** @var Member&MemberExtension $member */
73
        $member = $this->objFromFixture(Member::class, 'robbie');
74
        $memberId = $member->ID;
75
        $token = $member->generateAutologinTokenAndStoreHash();
76
        $response = $this->get("Security/changepassword?m={$memberId}&t={$token}");
77
78
        $this->assertNotContains('type="password"', $response->getBody(), 'Password form should be circumvented');
79
        $this->assertContains('id="mfa-app"', $response->getBody(), 'MFA screen should be displayed');
80
    }
81
}
82