Fix FilterEvent type consistency and remove redundant callable check

This commit is contained in:
Younes ENNAJI
2026-03-02 03:42:27 +00:00
parent 76d63c03ce
commit d39159cf90
5 changed files with 77 additions and 3 deletions
@@ -71,4 +71,49 @@ final class FlasherContainerTest extends TestCase
FlasherContainer::create('flasher');
}
public function testFromWithClosureResolvesContainer(): void
{
$flasher = $this->createMock(FlasherInterface::class);
$container = $this->createMock(ContainerInterface::class);
$container->method('has')->willReturn(true);
$container->method('get')->willReturn($flasher);
// Pass a closure that returns the container
FlasherContainer::from(fn () => $container);
$this->assertInstanceOf(FlasherInterface::class, FlasherContainer::create('flasher'));
}
public function testFromWithClosureReturningInvalidTypeThrowsException(): void
{
// Pass a closure that returns something other than ContainerInterface
FlasherContainer::from(fn () => 'not a container');
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Expected an instance of "Psr\Container\ContainerInterface"');
FlasherContainer::getContainer();
}
public function testHasReturnsTrueForExistingService(): void
{
$container = $this->createMock(ContainerInterface::class);
$container->method('has')->with('flasher')->willReturn(true);
FlasherContainer::from($container);
$this->assertTrue(FlasherContainer::has('flasher'));
}
public function testHasReturnsFalseForNonExistingService(): void
{
$container = $this->createMock(ContainerInterface::class);
$container->method('has')->with('nonexistent')->willReturn(false);
FlasherContainer::from($container);
$this->assertFalse(FlasherContainer::has('nonexistent'));
}
}
@@ -8,6 +8,7 @@ use Flasher\Prime\EventDispatcher\Event\FilterEvent;
use Flasher\Prime\Notification\Envelope;
use Flasher\Prime\Notification\Notification;
use Flasher\Prime\Storage\Filter\Filter;
use Flasher\Prime\Storage\Filter\FilterInterface;
use PHPUnit\Framework\TestCase;
final class FilterEventTest extends TestCase
@@ -141,4 +142,31 @@ final class FilterEventTest extends TestCase
$this->assertSame('Second', $retrievedEnvelopes[1]->getMessage());
$this->assertSame('Third', $retrievedEnvelopes[2]->getMessage());
}
public function testSetFilterAcceptsFilterInterface(): void
{
$originalFilter = new Filter();
$event = new FilterEvent($originalFilter, [], []);
// Create a mock that implements FilterInterface
$mockFilter = $this->createMock(FilterInterface::class);
// setFilter should accept any FilterInterface implementation
$event->setFilter($mockFilter);
$this->assertSame($mockFilter, $event->getFilter());
}
public function testConstructorAcceptsFilterInterface(): void
{
$mockFilter = $this->createMock(FilterInterface::class);
$envelopes = [new Envelope(new Notification())];
$criteria = ['limit' => 5];
$event = new FilterEvent($mockFilter, $envelopes, $criteria);
$this->assertSame($mockFilter, $event->getFilter());
$this->assertSame($envelopes, $event->getEnvelopes());
$this->assertSame($criteria, $event->getCriteria());
}
}