* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Messenger\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Stamp\DelayStamp; use Symfony\Component\Messenger\Stamp\ReceivedStamp; use Symfony\Component\Messenger\Stamp\ValidationStamp; use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; /** * @author Maxime Steinhausser */ class EnvelopeTest extends TestCase { public function testConstruct() { $receivedStamp = new ReceivedStamp('transport'); $envelope = new Envelope($dummy = new DummyMessage('dummy'), [$receivedStamp]); $this->assertSame($dummy, $envelope->getMessage()); $this->assertArrayHasKey(ReceivedStamp::class, $stamps = $envelope->all()); $this->assertSame($receivedStamp, $stamps[ReceivedStamp::class][0]); } public function testWithReturnsNewInstance() { $envelope = new Envelope(new DummyMessage('dummy')); $this->assertNotSame($envelope, $envelope->with(new ReceivedStamp('transport'))); } public function testWithoutAll() { $envelope = new Envelope(new DummyMessage('dummy'), [new ReceivedStamp('transport1'), new ReceivedStamp('transport2'), new DelayStamp(5000)]); $envelope = $envelope->withoutAll(ReceivedStamp::class); $this->assertEmpty($envelope->all(ReceivedStamp::class)); $this->assertCount(1, $envelope->all(DelayStamp::class)); } public function testLast() { $receivedStamp = new ReceivedStamp('transport'); $envelope = new Envelope($dummy = new DummyMessage('dummy'), [$receivedStamp]); $this->assertSame($receivedStamp, $envelope->last(ReceivedStamp::class)); $this->assertNull($envelope->last(ValidationStamp::class)); } public function testAll() { $envelope = (new Envelope($dummy = new DummyMessage('dummy'))) ->with($receivedStamp = new ReceivedStamp('transport')) ->with($validationStamp = new ValidationStamp(['foo'])) ; $stamps = $envelope->all(); $this->assertArrayHasKey(ReceivedStamp::class, $stamps); $this->assertSame($receivedStamp, $stamps[ReceivedStamp::class][0]); $this->assertArrayHasKey(ValidationStamp::class, $stamps); $this->assertSame($validationStamp, $stamps[ValidationStamp::class][0]); } public function testWrapWithMessage() { $message = new \stdClass(); $stamp = new ReceivedStamp('transport'); $envelope = Envelope::wrap($message, [$stamp]); $this->assertSame($message, $envelope->getMessage()); $this->assertSame([ReceivedStamp::class => [$stamp]], $envelope->all()); } public function testWrapWithEnvelope() { $envelope = new Envelope(new \stdClass(), [new DelayStamp(5)]); $envelope = Envelope::wrap($envelope, [new ReceivedStamp('transport')]); $this->assertCount(1, $envelope->all(DelayStamp::class)); $this->assertCount(1, $envelope->all(ReceivedStamp::class)); } }