-
Notifications
You must be signed in to change notification settings - Fork 145
Expand file tree
/
Copy pathForcePasswordResetTest.php
More file actions
115 lines (91 loc) · 3.32 KB
/
Copy pathForcePasswordResetTest.php
File metadata and controls
115 lines (91 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter Shield.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Tests\Authentication;
use CodeIgniter\Shield\Models\UserIdentityModel;
use CodeIgniter\Shield\Models\UserModel;
use CodeIgniter\Shield\Test\AuthenticationTesting;
use CodeIgniter\Test\DatabaseTestTrait;
use CodeIgniter\Test\FeatureTestTrait;
use Config\Services;
use Tests\Support\TestCase;
/**
* @internal
*/
final class ForcePasswordResetTest extends TestCase
{
use DatabaseTestTrait;
use FeatureTestTrait;
use AuthenticationTesting;
protected $refresh = true;
protected $namespace;
private string $routeFilter = 'force-reset';
protected function setUp(): void
{
parent::setUp();
// Load our Auth routes in the collection
$routeCollection = service('routes');
auth()->routes($routeCollection);
$routeCollection->get('profile', static function (): void {
echo 'Profile';
}, ['filter' => $this->routeFilter]);
Services::injectMock('routes', $routeCollection);
}
public function testUserRequiresPasswordReset(): void
{
$user = fake(UserModel::class);
$user->createEmailIdentity(['email' => 'foo@example.com', 'password' => 'secret123']);
$identity = model(UserIdentityModel::class);
$identity->set('force_reset', 1);
$identity->where('user_id', $user->id);
$identity->update();
$this->assertTrue($user->requiresPasswordReset());
}
public function testForcePasswordResetOnUser(): void
{
$user = fake(UserModel::class);
$user->createEmailIdentity(['email' => 'foo@example.com', 'password' => 'secret123']);
$user->forcePasswordReset();
$this->assertTrue($user->requiresPasswordReset());
}
public function testUndoForcePasswordResetOnUser(): void
{
$user = fake(UserModel::class);
$user->createEmailIdentity(['email' => 'foo@example.com', 'password' => 'secret123']);
$user->forcePasswordReset();
$user->undoForcePasswordReset();
$this->assertFalse($user->requiresPasswordReset());
}
public function testRequiresPasswordResetRedirect(): void
{
$user = fake(UserModel::class);
$user->createEmailIdentity(['email' => 'foo@example.com', 'password' => 'secret123']);
$user->forcePasswordReset();
$result = $this->actingAs($user)->get('profile');
// This should redirect to the stated url in Auth redirects
$result->assertStatus(302);
$result->assertRedirectTo(config('Auth')->forcePasswordResetRedirect());
}
public function testForceGlobalPasswordReset(): void
{
for ($i = 0; $i < 3; $i++) {
$user = fake(UserModel::class);
$user->createEmailIdentity([
'email' => 'foo' . $i . '@example.com', 'password' => $i . 'secret123',
]);
$users[$i] = $user;
}
$identities = model(UserIdentityModel::class);
$identities->forceGlobalPasswordReset();
for ($i = 0; $i < 3; $i++) {
$this->assertTrue($users[$i]->requiresPasswordReset());
}
}
}