File: D:/HostingSpaces/SBogers10/farmfun.komma.pro/tests/Browser/UserTest.php
<?php
namespace Tests\Browser;
use App\Komma\Users\Models\KmsUser;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Hash;
use Laravel\Dusk\Browser;
use Tests\Browser\Pages\KmsUsersSectionTestPage;
use Tests\DuskTestCase;
class UserTest extends DuskTestCase
{
use DatabaseTransactions; //Automatically rolls back database actions after tests
/**
* @group UserTest
* @test
* @throws \Throwable
*/
public function testCreateEmptyUser()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(KmsUser::find(1), 'kms')
->visit(new KmsUsersSectionTestPage())
->screenshot($this->getName())
->assertSee(__('kms/kms_users.section.title'))
->click('@add_button')
->screenshot($this->getName())
->click('@save_button')
->screenshot($this->getName());
});
}
/**
* @group UserTest
* @test
* @throws \Throwable
*/
public function testCreateUserWithUsernameAndEmailOnly()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(KmsUser::find(1), 'kms')
->visit(new KmsUsersSectionTestPage())
->screenshot($this->getName())
->assertSee(__('kms/kms_users.section.title'))
->click('@add_button')
->screenshot($this->getName())
->type('@TextField-email', 'support_'.str_random().'@komma.pro')
->screenshot($this->getName())
->click('@save_button')
->assertSee(__('kms/global.saved'))
->screenshot($this->getName());
});
}
/**
* @group UserTest
* @test
* @throws \Throwable
*/
public function testCreateUserWithUserNameFirstNameEmailAndPasswordAndDeleteIt()
{
$randomUser = factory(KmsUser::class, 1)->make()->first();
$this->browse(function (Browser $browser) use ($randomUser) {
$browser->loginAs(KmsUser::find(1), 'kms')
->visit(new KmsUsersSectionTestPage())
->screenshot($this->getName())
->assertSee(__('kms/kms_users.section.title'))
->click('@add_button')
->screenshot($this->getName())
->type('@TextField-first_name', $randomUser->first_name)
->type('@TextField-email', $randomUser->email)
->type('@Password-password-1', 'Admin123')
->type('@Password-password-2', 'Admin123')
->assertMissing('@send_password_set_mail_button')
->screenshot($this->getName())
->click('@save_button')
->assertVisible('@send_password_set_mail_button')
->click('@send_password_set_mail_button')
->waitForText(__('users.password_set_mail_sent'));
//Delete user
$counter = 0;
$browser->visit(new KmsUsersSectionTestPage())
->type('@entity_search_input', $randomUser->first_name)
->screenshot($this->getName(false).'-'.++$counter)
->assertSeeIn('@search-result-counter', '1')
->click('@found_search_item')
->screenshot($this->getName(false).'-'.++$counter)
->click('@delete_button')
->assertSee(__('kms/global.confirm_deletion'))
->click('@confirmation_confirm')
->assertSee(__('kms/global.removed'))
->screenshot($this->getName(false).'-'.++$counter);
});
}
/**
* @group UserTest
* @test
* @throws \Throwable
*/
public function testCreateUserWithUserNameFirstNameEmailAndPasswordTestLogin()
{
$randomUser = factory(KmsUser::class, 1)->make()->first();
$counter = 0;
$this->browse(function (Browser $browser) use ($randomUser, $counter) {
$browser->loginAs(KmsUser::find(1), 'kms')
->visit(new KmsUsersSectionTestPage)
->screenshot($this->getName().'_customers_screen_'.$counter++)
->assertSee(__('kms/kms_users.section.title'))
->click('@add_button')
->screenshot($this->getName().'_customers_screen_'.$counter++)
->type('@TextField-first_name', $randomUser->first_name)
->type('@TextField-last_name', $randomUser->last_name)
->type('@TextField-email', $randomUser->email)
->type('@Password-password-1', 'Admin123')
->type('@Password-password-2', 'Admin123')
->screenshot($this->getName())
->click('@save_button')
//Test login
->logout('kms') //It cannot press the logout button because the debug bar is overlapping
->visit('/kms/kms_users') //we need to do it like this because the KmsUsersSectionTestPage verfifies that it is hitting the given url. And in this case we are not hitting that, but the login page instead.
->assertSee(__('auth.log_in'))
->type('@email', $randomUser->email)
->type('@password', 'Admin123')
->click('@submit')
->assertSee(__('kms/kms_users.section.title'))
//Visit the users page again and save the user without making changes. This must not change the password and still enable the user to login
->visit(new KmsUsersSectionTestPage())
->screenshot($this->getName())
->assertSee(__('kms/kms_users.section.title'))
->type('@entity_search_input', $randomUser->first_name.' '.$randomUser->last_name)
->screenshot($this->getName(false) . '-' . ++$counter)
->assertSeeIn('@search-result-counter', '1')
->click('@found_search_item')
->screenshot($this->getName(false) . '-' . ++$counter)
->assertSeeIn('@entity_header', $randomUser->first_name.' '.$randomUser->last_name)
->screenshot($this->getName(false) . '-' . 'reopened')
->click('@save_button');
//Test login
$browser->click('#sidebar > form > input.log-out')
->pause(100)
->assertSee(__('auth.log_in'))
->type('@email', $randomUser->email)
->type('@password', 'Admin123')
->click('@submit')
->assertSee(__('kms/kms_users.section.title'));
});
}
}