105 lines
No EOL
2.8 KiB
PHP
105 lines
No EOL
2.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Browser\Components;
|
|
|
|
use Laravel\Dusk\Browser;
|
|
use Laravel\Dusk\Component as BaseComponent;
|
|
|
|
class DishModal extends BaseComponent
|
|
{
|
|
protected string $mode; // 'create' or 'edit'
|
|
|
|
public function __construct(string $mode = 'create')
|
|
{
|
|
$this->mode = $mode;
|
|
}
|
|
|
|
/**
|
|
* Get the root selector for the component.
|
|
*/
|
|
public function selector(): string
|
|
{
|
|
// Livewire modals typically have a specific structure
|
|
return '[role="dialog"], .fixed.inset-0';
|
|
}
|
|
|
|
/**
|
|
* Assert that the browser page contains the component.
|
|
*/
|
|
public function assert(Browser $browser): void
|
|
{
|
|
$browser->assertVisible($this->selector());
|
|
|
|
if ($this->mode === 'create') {
|
|
$browser->assertSee('Add New Dish');
|
|
} else {
|
|
$browser->assertSee('Edit Dish');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the element shortcuts for the component.
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public function elements(): array
|
|
{
|
|
return [
|
|
'@name-input' => 'input[wire\\:model="name"]',
|
|
'@description-input' => 'textarea[wire\\:model="description"]',
|
|
'@users-section' => 'div:contains("Assign to Users")',
|
|
'@submit-button' => $this->mode === 'create' ? 'button:contains("Create Dish")' : 'button:contains("Update Dish")',
|
|
'@cancel-button' => 'button:contains("Cancel")',
|
|
'@validation-error' => '.text-red-500',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Fill the dish form.
|
|
*/
|
|
public function fillForm(Browser $browser, string $name, ?string $description = null): void
|
|
{
|
|
$browser->waitFor('@name-input')
|
|
->clear('@name-input')
|
|
->type('@name-input', $name);
|
|
|
|
if ($description !== null && $browser->element('@description-input')) {
|
|
$browser->clear('@description-input')
|
|
->type('@description-input', $description);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Select users to assign the dish to.
|
|
*/
|
|
public function selectUsers(Browser $browser, array $userIds): void
|
|
{
|
|
foreach ($userIds as $userId) {
|
|
$browser->check("input[type='checkbox'][value='{$userId}']");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Submit the form.
|
|
*/
|
|
public function submit(Browser $browser): void
|
|
{
|
|
$browser->press($this->mode === 'create' ? 'Create Dish' : 'Update Dish');
|
|
}
|
|
|
|
/**
|
|
* Cancel the modal.
|
|
*/
|
|
public function cancel(Browser $browser): void
|
|
{
|
|
$browser->press('Cancel');
|
|
}
|
|
|
|
/**
|
|
* Assert validation error is shown.
|
|
*/
|
|
public function assertValidationError(Browser $browser, string $message = 'required'): void
|
|
{
|
|
$browser->assertSee($message);
|
|
}
|
|
} |