X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/05d99a312d29fdae6073c1205ffc2005db23f55b..refs/pull/5280/head:/tests/Auth/UserInviteTest.php diff --git a/tests/Auth/UserInviteTest.php b/tests/Auth/UserInviteTest.php index dcf9e23df..434de6aa6 100644 --- a/tests/Auth/UserInviteTest.php +++ b/tests/Auth/UserInviteTest.php @@ -2,10 +2,11 @@ namespace Tests\Auth; -use BookStack\Auth\Access\UserInviteService; -use BookStack\Auth\User; -use BookStack\Notifications\UserInvite; +use BookStack\Access\Notifications\UserInviteNotification; +use BookStack\Access\UserInviteService; +use BookStack\Users\Models\User; use Carbon\Carbon; +use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Notification; use Illuminate\Support\Str; @@ -16,7 +17,7 @@ class UserInviteTest extends TestCase public function test_user_creation_creates_invite() { Notification::fake(); - $admin = $this->getAdmin(); + $admin = $this->users->admin(); $email = Str::random(16) . '@example.com'; $resp = $this->actingAs($admin)->post('/settings/users/create', [ @@ -28,16 +29,40 @@ class UserInviteTest extends TestCase $newUser = User::query()->where('email', '=', $email)->orderBy('id', 'desc')->first(); - Notification::assertSentTo($newUser, UserInvite::class); + Notification::assertSentTo($newUser, UserInviteNotification::class); $this->assertDatabaseHas('user_invites', [ 'user_id' => $newUser->id, ]); } + public function test_user_invite_sent_in_selected_language() + { + Notification::fake(); + $admin = $this->users->admin(); + + $email = Str::random(16) . '@example.com'; + $resp = $this->actingAs($admin)->post('/settings/users/create', [ + 'name' => 'Barry', + 'email' => $email, + 'send_invite' => 'true', + 'language' => 'de', + ]); + $resp->assertRedirect('/settings/users'); + + $newUser = User::query()->where('email', '=', $email)->orderBy('id', 'desc')->first(); + Notification::assertSentTo($newUser, UserInviteNotification::class, function ($notification, $channels, $notifiable) { + /** @var MailMessage $mail */ + $mail = $notification->toMail($notifiable); + + return 'Sie wurden eingeladen, BookStack beizutreten!' === $mail->subject && + 'Ein Konto wurde für Sie auf BookStack erstellt.' === $mail->greeting; + }); + } + public function test_invite_set_password() { Notification::fake(); - $user = $this->getViewer(); + $user = $this->users->viewer(); $inviteService = app(UserInviteService::class); $inviteService->sendInvitation($user); @@ -52,7 +77,7 @@ class UserInviteTest extends TestCase $setPasswordResp = $this->followingRedirects()->post('/register/invite/' . $token, [ 'password' => 'my test password', ]); - $setPasswordResp->assertSee('Password set, you now have access to BookStack!'); + $setPasswordResp->assertSee('Password set, you should now be able to login using your set password to access BookStack!'); $newPasswordValid = auth()->validate([ 'email' => $user->email, 'password' => 'my test password', @@ -66,7 +91,7 @@ class UserInviteTest extends TestCase public function test_invite_set_has_password_validation() { Notification::fake(); - $user = $this->getViewer(); + $user = $this->users->viewer(); $inviteService = app(UserInviteService::class); $inviteService->sendInvitation($user); @@ -101,7 +126,7 @@ class UserInviteTest extends TestCase public function test_token_expires_after_two_weeks() { Notification::fake(); - $user = $this->getViewer(); + $user = $this->users->viewer(); $inviteService = app(UserInviteService::class); $inviteService->sendInvitation($user); @@ -112,4 +137,24 @@ class UserInviteTest extends TestCase $setPasswordPageResp->assertRedirect('/password/email'); $setPasswordPageResp->assertSessionHas('error', 'This invitation link has expired. You can instead try to reset your account password.'); } + + public function test_set_password_view_is_throttled() + { + for ($i = 0; $i < 11; $i++) { + $response = $this->get("/register/invite/tokenhere{$i}"); + } + + $response->assertStatus(429); + } + + public function test_set_password_post_is_throttled() + { + for ($i = 0; $i < 11; $i++) { + $response = $this->post("/register/invite/tokenhere{$i}", [ + 'password' => 'my test password', + ]); + } + + $response->assertStatus(429); + } }