3 use BookStack\EmailConfirmation;
5 class AuthTest extends TestCase
8 public function testAuthWorking()
11 ->seePageIs('/login');
14 public function testLogin()
17 ->seePageIs('/login');
24 public function testPublicViewing()
26 $settings = app('BookStack\Services\SettingService');
27 $settings->put('app-public', 'true');
33 public function testRegistrationShowing()
35 // Ensure registration form is showing
36 $this->setSettings(['registration-enabled' => 'true']);
37 $this->visit('/login')
40 ->seePageIs('/register');
43 public function testNormalRegistration()
45 // Set settings and get user instance
46 $this->setSettings(['registration-enabled' => 'true']);
47 $user = factory(\BookStack\User::class)->make();
49 // Test form and ensure user is created
50 $this->visit('/register')
52 ->type($user->name, '#name')
53 ->type($user->email, '#email')
54 ->type($user->password, '#password')
55 ->press('Create Account')
58 ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email]);
61 public function testConfirmedRegistration()
63 // Set settings and get user instance
64 $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
65 $user = factory(\BookStack\User::class)->make();
67 // Mock Mailer to ensure mail is being sent
68 $mockMailer = Mockery::mock('Illuminate\Contracts\Mail\Mailer');
69 $mockMailer->shouldReceive('send')->with('emails/email-confirmation', Mockery::type('array'), Mockery::type('callable'))->twice();
70 $this->app->instance('mailer', $mockMailer);
72 // Go through registration process
73 $this->visit('/register')
75 ->type($user->name, '#name')
76 ->type($user->email, '#email')
77 ->type($user->password, '#password')
78 ->press('Create Account')
79 ->seePageIs('/register/confirm')
80 ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
82 // Test access and resend confirmation email
83 $this->login($user->email, $user->password)
84 ->seePageIs('/register/confirm/awaiting')
87 ->seePageIs('/register/confirm/awaiting')
88 ->press('Resend Confirmation Email');
91 $user = $user->where('email', '=', $user->email)->first();
92 $emailConfirmation = EmailConfirmation::where('user_id', '=', $user->id)->first();
95 // Check confirmation email button and confirmation activation.
96 $this->visit('/register/confirm/' . $emailConfirmation->token . '/email')
97 ->see('Email Confirmation')
98 ->click('Confirm Email')
101 ->notSeeInDatabase('email_confirmations', ['token' => $emailConfirmation->token])
102 ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => true]);
105 public function testUserCreation()
107 $user = factory(\BookStack\User::class)->make();
111 ->click('Add new user')
112 ->type($user->name, '#name')
113 ->type($user->email, '#email')
115 ->type($user->password, '#password')
116 ->type($user->password, '#password-confirm')
118 ->seeInDatabase('users', $user->toArray())
119 ->seePageIs('/users')
123 public function testUserUpdating()
125 $user = \BookStack\User::all()->last();
126 $password = $user->password;
130 ->seePageIs('/users/' . $user->id)
132 ->type('Barry Scott', '#name')
134 ->seePageIs('/users')
135 ->seeInDatabase('users', ['id' => $user->id, 'name' => 'Barry Scott', 'password' => $password])
136 ->notSeeInDatabase('users', ['name' => $user->name]);
139 public function testUserPasswordUpdate()
141 $user = \BookStack\User::all()->last();
142 $userProfilePage = '/users/' . $user->id;
144 ->visit($userProfilePage)
145 ->type('newpassword', '#password')
147 ->seePageIs($userProfilePage)
148 ->see('Password confirmation required')
150 ->type('newpassword', '#password')
151 ->type('newpassword', '#password-confirm')
153 ->seePageIs('/users');
155 $userPassword = \BookStack\User::find($user->id)->password;
156 $this->assertTrue(Hash::check('newpassword', $userPassword));
159 public function testUserDeletion()
161 $userDetails = factory(\BookStack\User::class)->make();
162 $user = $this->getNewUser($userDetails->toArray());
165 ->visit('/users/' . $user->id)
166 ->click('Delete User')
169 ->seePageIs('/users')
170 ->notSeeInDatabase('users', ['name' => $user->name]);
173 public function testUserCannotBeDeletedIfLastAdmin()
175 $adminRole = \BookStack\Role::getRole('admin');
176 // Ensure we currently only have 1 admin user
177 $this->assertEquals(1, $adminRole->users()->count());
178 $user = $adminRole->users->first();
180 $this->asAdmin()->visit('/users/' . $user->id)
181 ->click('Delete User')
183 ->seePageIs('/users/' . $user->id)
184 ->see('You cannot delete the only admin');
187 public function testLogout()
194 ->seePageIs('/login');
199 * @param string $email
200 * @param string $password
203 private function login($email, $password)
205 return $this->visit('/login')
206 ->type($email, '#email')
207 ->type($password, '#password')