File: D:/HostingSpaces/SBogers10/werkenbij.komma.pro/tests/Browser/UserTest.php
<?php
namespace Tests\Browser;
use App\Komma\Users\Models\KmsUser;
use Illuminate\Foundation\Testing\DatabaseTransactions;
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')
->assertSee(__('validation.required', ['attribute' => __('kms/global.email')])) //gebruikersnaam is verplicht
->screenshot($this->getName());
});
}
/**
* @group UserTest
* @test
* @throws \Throwable
*/
public function testCreateUserWithEmailOnly()
{
$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 testCreateUserWithFirstNameEmailAndPasswordAndDeleteIt()
{
$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')
->screenshot($this->getName())
->click('@save_button');
//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)
->assertInputValue('@TextField-email', $randomUser->email)
->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 testCreateUserWithFirstNameEmailAndPasswordTestLogin()
{
$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
->click('#sidebar > form > input.log-out')
->assertSee(__('auth.log_in'))
->type('@email', $randomUser->email)
->type('@password', 'Admin123')
->click('@submit')
->assertSee(__('kms/SidebarMenu.dashboard'))
->assertSee(__('kms/sidebarMenu.pages'))
->assertSee(__('kms/sidebarMenu.services'));
});
}
}