HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/boldt.komma.pro/tests/Browser/AuthFlowTest.php
<?php

namespace Tests\Browser;

use App\Komma\Users\Models\Role;
use App\Komma\Users\Models\User;
use Illuminate\Auth\Passwords\PasswordBroker;
use Illuminate\Support\Facades\Artisan;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class AuthFlowTest extends DuskTestCase
{
    /**
     * @test
     * @group AuthFlow
     */
    public function testRegistrationFail()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit(route('site.register'))
                ->assertSee(__('auth.first_name'))
                ->assertSee(__('auth.last_name'))
                ->assertSee(__('auth.email_address'));

            $browser->driver->executeScript('window.scrollTo(0,document.body.scrollHeight);'); //Scroll to bottom

            $browser->assertSeeIn('@register', strtoupper(__('auth.register')))
                ->click('@register')
                ->assertSee(__('validation.required', ['attribute' => ucfirst(__('validation.attributes.first_name'))]));
        });
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testRegistration()
    {
        $newUser = factory(User::class)->make();

        $this->browse(function (Browser $browser) use($newUser) {
            $browser->visit(route('site.register'))
                ->type('first_name', $newUser->first_name)
                ->type('last_name', $newUser->last_name)
                ->type('email', $newUser->email);

            $browser->driver->executeScript('window.scrollTo(0,document.body.scrollHeight);'); //Scroll to bottom

            $browser->check('@accept_legal')
                ->click('@register')
                ->assertSee(__('auth.registered'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testSetPasswordFailWithWrongPassword()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(route('site.password.request_set', ['token' => $token]))
                ->type('email', $newUser->email)
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test321')
                ->assertValue('@set_password', __('auth.update_password'))
                ->click('@set_password')
                ->assertSee(ucfirst(__('validation.confirmed', ['attribute' => __('validation.attributes.password')])));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testSetPasswordFailWithWrongEmail()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(route('site.password.request_set', ['token' => $token]))
                ->type('email', 'oops_'.$newUser->email)
                ->type('password', 'Test1234567845678')
                ->type('password_confirmation', 'Test1234567845678')
                ->assertValue('@set_password', __('auth.update_password'))
                ->click('@set_password')
                ->assertSee(ucfirst(__('passwords.user')));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testSetPasswordFailWithWrongToken()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        $this->browse(function (Browser $browser) use ($newUser) {
            $browser->visit(route('site.password.request_set', ['token' => 'randomfaketoken2124']))
                ->type('email', $newUser->email)
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test12345678')
                ->assertValue('@set_password', __('auth.update_password'))
                ->click('@set_password')
                ->assertSee(__('passwords.token'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testSetPassword()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        debug($newUser);

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(route('site.password.request_set', ['email' => $newUser->email, 'token' => $token]))
                ->type('@email', $newUser->email)
                ->type('@password', $newUser->password)
                ->type('@password_confirmation', $newUser->password)
                ->assertValue('@set_password', __('auth.update_password'))
                ->click('@set_password')
                ->assertSee(__('auth.password-reset'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testMailForgotPasswordFail()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit(route('site.password.request'))
                ->type('email', 'doesnotexist@komma.pro')
                ->assertValue('@send_email', __('auth.send_email'))
                ->click('@send_email')
                ->assertSee(__('passwords.user'));
        });
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testMailForgotPassword()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        $this->browse(function (Browser $browser) use ($newUser) {
            $browser->visit(route('site.password.request'))
                ->type('email', $newUser->email)
                ->assertValue('@send_email', __('auth.send_email'))
                ->click('@send_email')
                ->assertSee(__('passwords.sent'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testMailForgotPasswordFailKms()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit(route('kms.password.request'))
                ->type('email', 'doesnotexist@komma.pro')
                ->assertValue('@send_email', __('auth.send_email'))
                ->click('@send_email')
                ->assertSee(__('passwords.user'));
        });
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testMailForgotPasswordKms()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        $this->browse(function (Browser $browser) use ($newUser) {
            $browser->visit(route('kms.password.request'))
                ->type('email', $newUser->email)
                ->assertValue('@send_email', __('auth.send_email'))
                ->click('@send_email')
                ->assertSee(__('passwords.sent'));
        });

        $newUser->delete();
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithWrongPassword()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(route('site.password.reset', ['token' => $token]))
                ->type('email', $newUser->email)
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test321')
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(ucfirst(__('validation.confirmed', ['attribute' => __('validation.attributes.password')])));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithNonExistingEmail()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($token) {
            $browser->visit(route('site.password.reset', ['token' => $token]))
                ->type('email', 'fake@example.org')
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test12345678')
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(__('passwords.user'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithFakeToken()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        $this->browse(function (Browser $browser) use ($newUser) {
            $browser->visit(route('site.password.reset', ['token' => 'fakepassresettoken']))
                ->type('email', $newUser->email)
                ->type('password', $newUser->password)
                ->type('password_confirmation', $newUser->password)
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(__('passwords.token'));
        });

        $newUser->delete();
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPassword()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(localized_route('kms.password.reset', ['email' => $newUser->email, 'token' => $token]))
                ->type('password', $newUser->password)
                ->type('password_confirmation', $newUser->password)
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(__('auth.password-reset'));
        });

        $newUser->delete();
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithWrongPasswordKms()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(localized_route('kms.password.reset', ['token' => $token]))
                ->type('email', $newUser->email)
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test321')
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(__('validation.confirmed', ['attribute' => __('validation.attributes.password')]));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithNonExistingEmailKms()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($token) {
            $browser->visit(localized_route('kms.password.reset', ['token' => $token]))
                ->type('email', 'fake@example.org')
                ->type('password', 'Test12345678')
                ->type('password_confirmation', 'Test12345678')
                ->assertValue('@reset_password', __('auth.update_password'))
                ->click('@reset_password')
                ->assertSee(__('passwords.user'));
        });

        $newUser->delete();
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordFailWithFakeTokenKms()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        $this->browse(function (Browser $browser) use ($newUser) {
            $browser->visit(localized_route('kms.password.reset', ['token' => 'fakepassresettoken']))
                ->type('email', $newUser->email)
                ->type('password', $newUser->password)
                ->type('password_confirmation', $newUser->password)
                ->assertValue('input[type="submit"]', __('auth.update_password'))
                ->click('input[type="submit"]')
                ->assertSee(__('passwords.token'));
        });

        $newUser->delete();
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testResetPasswordKms()
    {
        /** @var User $newUser */
        $newUser = factory(User::class)->make();
        $newUser->role()->associate(Role::where('name', '=', 'customer')->first());
        $newUser->save();

        //Generate a password reset token manually here since we cannot intercept mails from dusk
        /** @var PasswordBroker $passwordBroker */
        $passwordBroker = app(PasswordBroker::class);
        $token = $passwordBroker->createToken($newUser);

        $this->browse(function (Browser $browser) use ($newUser, $token) {
            $browser->visit(localized_route('kms.password.reset', ['email' => $newUser->email, 'token' => $token]))
                ->type('password', $newUser->password)
                ->type('password_confirmation', $newUser->password)
                ->assertValue('input[type="submit"]', __('auth.update_password'))
                ->click('input[type="submit"]')
                ->assertSee(__('auth.password-reset'))
                ->screenshot('test');
        });

        $newUser->delete();
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testLoginFail()
    {
        Artisan::call('cache:clear'); //Clears auth throttling if active.

        $this->browse(function (Browser $browser) {
            $browser->visit(route('site.login'))
                ->type('email', 'info@komma.pro')
                ->type('password', \UserTableSeeder::getDefaultCredentials()['password'].'_dusk_test')
                ->click('@log_in')
                ->assertSee('Het opgeven e-mailadres en')
                ->screenshot($this->getName());
        });
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testSiteLogin()
    {
        Artisan::call('cache:clear'); //Clears auth throttling if active.

        $this->browse(function(Browser $browser) {
            $browser->logout(); //Make sure the user is logged out
        });

        $this->browse(function (Browser $browser) {
            $browser->visit(route('site.login'))
                ->type('email', \UserTableSeeder::getDefaultCredentials()['email'])
                ->type('password', \UserTableSeeder::getDefaultCredentials()['password'])
                ->click('@log_in')
                ->assertVisible('@site_logout');
        });
    }


    /**
     * @test
     * @group AuthFlow
     */
    public function testLoginFailKms()
    {
        Artisan::call('cache:clear'); //Clears auth throttling if active.

        $this->browse(function (Browser $browser) {
            $browser->logout();
            $browser->visit(route('kms.login'))
                ->type('email', 'info@komma.pro')
                ->type('password', \UserTableSeeder::getDefaultCredentials()['password'].'_dusk_test')
                ->press(__('auth.log_in'))
                ->assertSee('Het opgeven e-mailadres en')
                ->screenshot($this->getName());
        });
    }

    /**
     * @test
     * @group AuthFlow
     */
    public function testLoginKms()
    {
        Artisan::call('cache:clear'); //Clears auth throttling if active.

        $this->browse(function (Browser $browser) {
            $browser->logout();
            $browser->visit(route('kms.login'))
                ->type('email', 'info@komma.pro')
                ->type('password', \UserTableSeeder::getDefaultCredentials()['password'])
                ->press(__('auth.log_in'))
                ->assertSee(__('kms/users.section.title')) // If this crashes: have you runned php artisan shop:translations ?
                ->screenshot($this->getName());
        });
    }
}