- $this->visit('/login')
- ->see('Sign up');
- }
-
- public function test_confirmed_registration()
- {
- // Fake notifications
- Notification::fake();
-
- // Set settings and get user instance
- $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
- $user = factory(User::class)->make();
-
- // Go through registration process
- $this->visit('/register')
- ->see('Sign Up')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Create Account')
- ->seePageIs('/register/confirm')
- ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
-
- // Ensure notification sent
- $dbUser = User::where('email', '=', $user->email)->first();
- Notification::assertSentTo($dbUser, ConfirmEmail::class);
-
- // Test access and resend confirmation email
- $this->login($user->email, $user->password)
- ->seePageIs('/register/confirm/awaiting')
- ->see('Resend')
- ->visit('/books')
- ->seePageIs('/register/confirm/awaiting')
- ->press('Resend Confirmation Email');
-
- // Get confirmation and confirm notification matches
- $emailConfirmation = DB::table('email_confirmations')->where('user_id', '=', $dbUser->id)->first();
- Notification::assertSentTo($dbUser, ConfirmEmail::class, function($notification, $channels) use ($emailConfirmation) {
- return $notification->token === $emailConfirmation->token;
- });
-
- // Check confirmation email confirmation activation.
- $this->visit('/register/confirm/' . $emailConfirmation->token)
- ->seePageIs('/')
- ->see($user->name)
- ->notSeeInDatabase('email_confirmations', ['token' => $emailConfirmation->token])
- ->seeInDatabase('users', ['name' => $dbUser->name, 'email' => $dbUser->email, 'email_confirmed' => true]);
- }
-
- public function test_restricted_registration()
- {
- $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true', 'registration-restrict' => 'example.com']);
- $user = factory(User::class)->make();
- // Go through registration process
- $this->visit('/register')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Create Account')
- ->seePageIs('/register')
- ->dontSeeInDatabase('users', ['email' => $user->email])
- ->see('That email domain does not have access to this application');
-
-
- $this->visit('/register')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Create Account')
- ->seePageIs('/register/confirm')
- ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
-
- $this->visit('/')
- ->seePageIs('/register/confirm/awaiting');
-
- auth()->logout();
-
- $this->visit('/')->seePageIs('/login')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Log In')
- ->seePageIs('/register/confirm/awaiting')
- ->seeText('Email Address Not Confirmed');
- }
-
- public function test_restricted_registration_with_confirmation_disabled()
- {
- $this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'false', 'registration-restrict' => 'example.com']);
- $user = factory(User::class)->make();
- // Go through registration process
- $this->visit('/register')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Create Account')
- ->seePageIs('/register')
- ->dontSeeInDatabase('users', ['email' => $user->email])
- ->see('That email domain does not have access to this application');
-
-
- $this->visit('/register')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Create Account')
- ->seePageIs('/register/confirm')
- ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
-
- $this->visit('/')
- ->seePageIs('/register/confirm/awaiting');
-
- auth()->logout();
- $this->visit('/')->seePageIs('/login')
- ->type($user->email, '#email')
- ->type($user->password, '#password')
- ->press('Log In')
- ->seePageIs('/register/confirm/awaiting')
- ->seeText('Email Address Not Confirmed');
- }
-
- public function test_user_creation()
- {
- $user = factory(User::class)->make();
- $adminRole = Role::getRole('admin');
-
- $this->asAdmin()
- ->visit('/settings/users')
- ->click('Add New User')
- ->type($user->name, '#name')
- ->type($user->email, '#email')
- ->check("roles[{$adminRole->id}]")
- ->type($user->password, '#password')
- ->type($user->password, '#password-confirm')
- ->press('Save')
- ->seePageIs('/settings/users')
- ->seeInDatabase('users', $user->toArray())
- ->see($user->name);
- }
-
- public function test_user_updating()
- {
- $user = $this->getNormalUser();
- $password = $user->password;
- $this->asAdmin()
- ->visit('/settings/users')
- ->click($user->name)
- ->seePageIs('/settings/users/' . $user->id)
- ->see($user->email)
- ->type('Barry Scott', '#name')
- ->press('Save')
- ->seePageIs('/settings/users')
- ->seeInDatabase('users', ['id' => $user->id, 'name' => 'Barry Scott', 'password' => $password])
- ->notSeeInDatabase('users', ['name' => $user->name]);
- }
-
- public function test_user_password_update()
- {
- $user = $this->getNormalUser();
- $userProfilePage = '/settings/users/' . $user->id;
- $this->asAdmin()
- ->visit($userProfilePage)
- ->type('newpassword', '#password')
- ->press('Save')
- ->seePageIs($userProfilePage)
- ->see('Password confirmation required')
-
- ->type('newpassword', '#password')
- ->type('newpassword', '#password-confirm')
- ->press('Save')
- ->seePageIs('/settings/users');
-
- $userPassword = User::find($user->id)->password;
- $this->assertTrue(Hash::check('newpassword', $userPassword));
- }
-
- public function test_user_deletion()
- {
- $userDetails = factory(User::class)->make();
- $user = $this->getEditor($userDetails->toArray());
-
- $this->asAdmin()
- ->visit('/settings/users/' . $user->id)
- ->click('Delete User')
- ->see($user->name)
- ->press('Confirm')
- ->seePageIs('/settings/users')
- ->notSeeInDatabase('users', ['name' => $user->name]);
- }
-
- public function test_user_cannot_be_deleted_if_last_admin()
- {
- $adminRole = Role::getRole('admin');
-
- // Delete all but one admin user if there are more than one
- $adminUsers = $adminRole->users;
- if (count($adminUsers) > 1) {
- foreach ($adminUsers->splice(1) as $user) {
- $user->delete();
- }
- }
-
- // Ensure we currently only have 1 admin user
- $this->assertEquals(1, $adminRole->users()->count());
- $user = $adminRole->users->first();
-
- $this->asAdmin()->visit('/settings/users/' . $user->id)
- ->click('Delete User')
- ->press('Confirm')
- ->seePageIs('/settings/users/' . $user->id)
- ->see('You cannot delete the only admin');