fix: DockerSecretsResolver - don't normalize absolute paths like /var/www/html/...
Some checks failed
Deploy Application / deploy (push) Has been cancelled
Some checks failed
Deploy Application / deploy (push) Has been cancelled
This commit is contained in:
311
tests/Unit/Framework/LiveComponents/UI/UIHelperTest.php
Normal file
311
tests/Unit/Framework/LiveComponents/UI/UIHelperTest.php
Normal file
@@ -0,0 +1,311 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Unit\Framework\LiveComponents\UI;
|
||||
|
||||
use App\Framework\LiveComponents\ComponentEventDispatcher;
|
||||
use App\Framework\LiveComponents\UI\UIHelper;
|
||||
use App\Framework\LiveComponents\ValueObjects\ComponentEvent;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for UIHelper
|
||||
*/
|
||||
final class UIHelperTest extends TestCase
|
||||
{
|
||||
public function testShowToastDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->toast('Test message', 'success', null);
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertInstanceOf(ComponentEvent::class, $event);
|
||||
$this->assertEquals('toast:show', $event->name);
|
||||
$this->assertTrue($event->isBroadcast());
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('Test message', $payload->getString('message'));
|
||||
$this->assertEquals('success', $payload->getString('type'));
|
||||
}
|
||||
|
||||
public function testShowToastWithDefaults(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->toast('Test message');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('info', $payload->getString('type'));
|
||||
$this->assertEquals(5000, $payload->getInt('duration'));
|
||||
$this->assertEquals('top-right', $payload->getString('position'));
|
||||
$this->assertEquals('global', $payload->getString('componentId'));
|
||||
}
|
||||
|
||||
public function testShowToastWithNullEvents(): void
|
||||
{
|
||||
$ui = new UIHelper(null);
|
||||
|
||||
// Should not throw error
|
||||
$ui->toast('Test message');
|
||||
|
||||
$this->assertTrue(true); // Test passes if no exception thrown
|
||||
}
|
||||
|
||||
public function testSuccessToast(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->successToast('Success message');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('success', $payload->getString('type'));
|
||||
$this->assertEquals('Success message', $payload->getString('message'));
|
||||
}
|
||||
|
||||
public function testErrorToast(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->errorToast('Error message');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('error', $payload->getString('type'));
|
||||
$this->assertEquals(0, $payload->getInt('duration')); // Persistent by default
|
||||
}
|
||||
|
||||
public function testHideToastDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->hideToast('test-component');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertEquals('toast:hide', $event->name);
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('test-component', $payload->getString('componentId'));
|
||||
}
|
||||
|
||||
public function testShowModalDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->modal(
|
||||
'test-component',
|
||||
'Test Title',
|
||||
'<p>Test content</p>',
|
||||
\App\Framework\LiveComponents\Events\UI\Options\ModalOptions::create()
|
||||
->withSize(\App\Framework\LiveComponents\Events\UI\Enums\ModalSize::Large)
|
||||
->withButtons([['text' => 'OK', 'class' => 'btn-primary']])
|
||||
->closeOnBackdrop(false)
|
||||
->closeOnEscape(false)
|
||||
);
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertEquals('modal:show', $event->name);
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('test-component', $payload->getString('componentId'));
|
||||
$this->assertEquals('Test Title', $payload->getString('title'));
|
||||
$this->assertEquals('<p>Test content</p>', $payload->getString('content'));
|
||||
$this->assertEquals('large', $payload->getString('size'));
|
||||
$this->assertFalse($payload->getBool('closeOnBackdrop'));
|
||||
$this->assertFalse($payload->getBool('closeOnEscape'));
|
||||
}
|
||||
|
||||
public function testShowModalWithDefaults(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->modal('test-component', 'Title', 'Content');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('medium', $payload->getString('size'));
|
||||
$this->assertTrue($payload->getBool('closeOnBackdrop'));
|
||||
$this->assertTrue($payload->getBool('closeOnEscape'));
|
||||
}
|
||||
|
||||
public function testCloseModalDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->closeModal('test-component');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertEquals('modal:close', $event->name);
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('test-component', $payload->getString('componentId'));
|
||||
}
|
||||
|
||||
public function testShowConfirmDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->confirm(
|
||||
'test-component',
|
||||
'Confirm Title',
|
||||
'Confirm message',
|
||||
\App\Framework\LiveComponents\Events\UI\Options\ConfirmOptions::create()
|
||||
->withButtons('Yes', 'No')
|
||||
->withClasses('btn-danger', 'btn-secondary')
|
||||
);
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertEquals('modal:confirm', $event->name);
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('test-component', $payload->getString('componentId'));
|
||||
$this->assertEquals('Confirm Title', $payload->getString('title'));
|
||||
$this->assertEquals('Confirm message', $payload->getString('message'));
|
||||
$this->assertEquals('Yes', $payload->getString('confirmText'));
|
||||
$this->assertEquals('No', $payload->getString('cancelText'));
|
||||
}
|
||||
|
||||
public function testShowConfirmWithDefaults(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->confirm('test-component', 'Title', 'Message');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('Confirm', $payload->getString('confirmText'));
|
||||
$this->assertEquals('Cancel', $payload->getString('cancelText'));
|
||||
$this->assertEquals('btn-primary', $payload->getString('confirmClass'));
|
||||
$this->assertEquals('btn-secondary', $payload->getString('cancelClass'));
|
||||
}
|
||||
|
||||
public function testConfirmDelete(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->confirmDelete('test-component', 'Item Name', 'deleteAction', ['id' => 123]);
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('Delete Item Name?', $payload->getString('title'));
|
||||
$this->assertEquals("Are you sure you want to delete 'Item Name'? This action cannot be undone.", $payload->getString('message'));
|
||||
$this->assertEquals('Delete', $payload->getString('confirmText'));
|
||||
$this->assertEquals('btn-danger', $payload->getString('confirmClass'));
|
||||
$this->assertEquals('deleteAction', $payload->getString('confirmAction'));
|
||||
$this->assertEquals(['id' => 123], $payload->getArray('confirmParams'));
|
||||
}
|
||||
|
||||
public function testShowAlertDispatchesEvent(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->alert('test-component', 'Alert Title', 'Alert message', 'error', 'OK');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$this->assertCount(1, $dispatchedEvents);
|
||||
|
||||
$event = $dispatchedEvents[0];
|
||||
$this->assertEquals('modal:alert', $event->name);
|
||||
|
||||
$payload = $event->payload;
|
||||
$this->assertEquals('test-component', $payload->getString('componentId'));
|
||||
$this->assertEquals('Alert Title', $payload->getString('title'));
|
||||
$this->assertEquals('Alert message', $payload->getString('message'));
|
||||
$this->assertEquals('error', $payload->getString('type'));
|
||||
$this->assertEquals('OK', $payload->getString('buttonText'));
|
||||
}
|
||||
|
||||
public function testShowAlertWithDefaults(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$ui->alert('test-component', 'Title', 'Message');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('info', $payload->getString('type'));
|
||||
$this->assertEquals('OK', $payload->getString('buttonText'));
|
||||
}
|
||||
|
||||
public function testFluentInterface(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
|
||||
$result = $ui->successToast('Saved!')
|
||||
->infoToast('Processing...')
|
||||
->modal('modal-1', 'Title', 'Content');
|
||||
|
||||
$this->assertSame($ui, $result);
|
||||
$this->assertCount(3, $events->getEvents());
|
||||
}
|
||||
|
||||
public function testComponentIdAsValueObject(): void
|
||||
{
|
||||
$events = new ComponentEventDispatcher();
|
||||
$ui = new UIHelper($events);
|
||||
$componentId = \App\Framework\LiveComponents\ValueObjects\ComponentId::fromString('test:component');
|
||||
|
||||
$ui->modal($componentId, 'Title', 'Content');
|
||||
|
||||
$dispatchedEvents = $events->getEvents();
|
||||
$event = $dispatchedEvents[0];
|
||||
$payload = $event->payload;
|
||||
|
||||
$this->assertEquals('test:component', $payload->getString('componentId'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user