89 lines
No EOL
2.2 KiB
PHP
89 lines
No EOL
2.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Browser\Components;
|
|
|
|
use Laravel\Dusk\Browser;
|
|
use Laravel\Dusk\Component as BaseComponent;
|
|
|
|
class LoginForm extends BaseComponent
|
|
{
|
|
/**
|
|
* Get the root selector for the component.
|
|
*/
|
|
public function selector(): string
|
|
{
|
|
return 'form[method="POST"][action*="login"]';
|
|
}
|
|
|
|
/**
|
|
* Assert that the browser page contains the component.
|
|
*/
|
|
public function assert(Browser $browser): void
|
|
{
|
|
$browser->assertVisible($this->selector())
|
|
->assertVisible('@email')
|
|
->assertVisible('@password')
|
|
->assertVisible('@submit');
|
|
}
|
|
|
|
/**
|
|
* Get the element shortcuts for the component.
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public function elements(): array
|
|
{
|
|
return [
|
|
'@email' => 'input[id="email"]',
|
|
'@password' => 'input[id="password"]',
|
|
'@submit' => 'button[type="submit"]',
|
|
'@remember' => 'input[name="remember"]',
|
|
'@error' => '.text-red-500',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Fill in the login form.
|
|
*/
|
|
public function fillForm(Browser $browser, string $email, string $password): void
|
|
{
|
|
$browser->type('@email', $email)
|
|
->type('@password', $password);
|
|
}
|
|
|
|
/**
|
|
* Submit the login form.
|
|
*/
|
|
public function submit(Browser $browser): void
|
|
{
|
|
$browser->press('@submit');
|
|
}
|
|
|
|
/**
|
|
* Login with the given credentials.
|
|
*/
|
|
public function loginWith(Browser $browser, string $email, string $password): void
|
|
{
|
|
$this->fillForm($browser, $email, $password);
|
|
$this->submit($browser);
|
|
}
|
|
|
|
/**
|
|
* Assert that the form fields are required.
|
|
*/
|
|
public function assertFieldsRequired(Browser $browser): void
|
|
{
|
|
$browser->assertAttribute('@email', 'required', 'true')
|
|
->assertAttribute('@password', 'required', 'true')
|
|
->assertAttribute('@email', 'type', 'email')
|
|
->assertAttribute('@password', 'type', 'password');
|
|
}
|
|
|
|
/**
|
|
* Assert that the form has validation errors.
|
|
*/
|
|
public function assertHasErrors(Browser $browser): void
|
|
{
|
|
$browser->assertPresent('@error');
|
|
}
|
|
} |