]> BookStack Code Mirror - bookstack/blob - tests/Auth/UserInviteTest.php
Update passwords.php
[bookstack] / tests / Auth / UserInviteTest.php
1 <?php namespace Tests;
2
3
4 use BookStack\Auth\Access\UserInviteService;
5 use BookStack\Auth\User;
6 use BookStack\Notifications\UserInvite;
7 use Carbon\Carbon;
8 use DB;
9 use Notification;
10
11 class UserInviteTest extends TestCase
12 {
13
14     public function test_user_creation_creates_invite()
15     {
16         Notification::fake();
17         $admin = $this->getAdmin();
18
19         $this->actingAs($admin)->post('/settings/users/create', [
20             'name' => 'Barry',
21             'email' => 'tester@example.com',
22             'send_invite' => 'true',
23         ]);
24
25         $newUser = User::query()->where('email', '=', 'tester@example.com')->orderBy('id', 'desc')->first();
26
27         Notification::assertSentTo($newUser, UserInvite::class);
28         $this->assertDatabaseHas('user_invites', [
29             'user_id' => $newUser->id
30         ]);
31     }
32
33     public function test_invite_set_password()
34     {
35         Notification::fake();
36         $user = $this->getViewer();
37         $inviteService = app(UserInviteService::class);
38
39         $inviteService->sendInvitation($user);
40         $token = DB::table('user_invites')->where('user_id', '=', $user->id)->first()->token;
41
42         $setPasswordPageResp = $this->get('/register/invite/' . $token);
43         $setPasswordPageResp->assertSuccessful();
44         $setPasswordPageResp->assertSee('Welcome to BookStack!');
45         $setPasswordPageResp->assertSee('Password');
46         $setPasswordPageResp->assertSee('Confirm Password');
47
48         $setPasswordResp = $this->followingRedirects()->post('/register/invite/' . $token, [
49             'password' => 'my test password',
50         ]);
51         $setPasswordResp->assertSee('Password set, you now have access to BookStack!');
52         $newPasswordValid = auth()->validate([
53             'email' => $user->email,
54             'password' => 'my test password'
55         ]);
56         $this->assertTrue($newPasswordValid);
57         $this->assertDatabaseMissing('user_invites', [
58             'user_id' => $user->id
59         ]);
60     }
61
62     public function test_invite_set_has_password_validation()
63     {
64         Notification::fake();
65         $user = $this->getViewer();
66         $inviteService = app(UserInviteService::class);
67
68         $inviteService->sendInvitation($user);
69         $token = DB::table('user_invites')->where('user_id', '=', $user->id)->first()->token;
70
71         $shortPassword = $this->followingRedirects()->post('/register/invite/' . $token, [
72             'password' => 'mypas',
73         ]);
74         $shortPassword->assertSee('The password must be at least 6 characters.');
75
76         $noPassword = $this->followingRedirects()->post('/register/invite/' . $token, [
77             'password' => '',
78         ]);
79         $noPassword->assertSee('The password field is required.');
80
81         $this->assertDatabaseHas('user_invites', [
82             'user_id' => $user->id
83         ]);
84     }
85
86     public function test_non_existent_invite_token_redirects_to_home()
87     {
88         $setPasswordPageResp = $this->get('/register/invite/' . str_random(12));
89         $setPasswordPageResp->assertRedirect('/');
90
91         $setPasswordResp = $this->post('/register/invite/' . str_random(12), ['password' => 'Password Test']);
92         $setPasswordResp->assertRedirect('/');
93     }
94
95     public function test_token_expires_after_two_weeks()
96     {
97         Notification::fake();
98         $user = $this->getViewer();
99         $inviteService = app(UserInviteService::class);
100
101         $inviteService->sendInvitation($user);
102         $tokenEntry = DB::table('user_invites')->where('user_id', '=', $user->id)->first();
103         DB::table('user_invites')->update(['created_at' => Carbon::now()->subDays(14)->subHour(1)]);
104
105         $setPasswordPageResp = $this->get('/register/invite/' . $tokenEntry->token);
106         $setPasswordPageResp->assertRedirect('/password/email');
107         $setPasswordPageResp->assertSessionHas('error', 'This invitation link has expired. You can instead try to reset your account password.');
108     }
109
110
111 }
Morty Proxy This is a proxified and sanitized view of the page, visit original site.