Skip to content

Commit fefb5cb

Browse files
committed
Add tests for the new code
1 parent d0deac6 commit fefb5cb

File tree

2 files changed

+197
-0
lines changed

2 files changed

+197
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Yiisoft\Queue\Tests\Unit\Message;
6+
7+
use InvalidArgumentException;
8+
use PHPUnit\Framework\TestCase;
9+
use Yiisoft\Queue\Message\IdEnvelope;
10+
use Yiisoft\Queue\Message\Message;
11+
use Yiisoft\Queue\Message\MessageInterface;
12+
13+
final class IdEnvelopeTest extends TestCase
14+
{
15+
public function testConstructor(): void
16+
{
17+
$message = $this->createMessage();
18+
$id = 'test-id';
19+
20+
$envelope = new IdEnvelope($message, $id);
21+
22+
$this->assertSame($message, $envelope->getMessage());
23+
$this->assertSame($id, $envelope->getId());
24+
}
25+
26+
public function testFromMessageWithStringId(): void
27+
{
28+
$id = 'test-id';
29+
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $id]);
30+
31+
$envelope = IdEnvelope::fromMessage($message);
32+
33+
$this->assertSame($id, $envelope->getId());
34+
}
35+
36+
public function testFromMessageWithIntId(): void
37+
{
38+
$id = 123;
39+
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $id]);
40+
41+
$envelope = IdEnvelope::fromMessage($message);
42+
43+
$this->assertSame($id, $envelope->getId());
44+
}
45+
46+
public function testFromMessageWithNullId(): void
47+
{
48+
$message = $this->createMessage();
49+
50+
$envelope = IdEnvelope::fromMessage($message);
51+
52+
$this->assertNull($envelope->getId());
53+
}
54+
55+
public function testFromMessageWithObjectHavingToString(): void
56+
{
57+
$stringableObject = new class() {
58+
public function __toString(): string
59+
{
60+
return 'object-id';
61+
}
62+
};
63+
64+
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $stringableObject]);
65+
66+
$envelope = IdEnvelope::fromMessage($message);
67+
68+
$this->assertSame('object-id', $envelope->getId());
69+
}
70+
71+
public function testFromMessageWithInvalidIdType(): void
72+
{
73+
$invalidId = ['array-cannot-be-id'];
74+
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $invalidId]);
75+
76+
$this->expectException(InvalidArgumentException::class);
77+
$this->expectExceptionMessage('Message ID must be string|int|null, array given.');
78+
79+
IdEnvelope::fromMessage($message);
80+
}
81+
82+
public function testGetEnvelopeMetadata(): void
83+
{
84+
$id = 'test-id';
85+
$message = $this->createMessage();
86+
$envelope = new IdEnvelope($message, $id);
87+
88+
$metadata = $envelope->getMetadata();
89+
90+
$this->assertArrayHasKey(IdEnvelope::MESSAGE_ID_KEY, $metadata);
91+
$this->assertSame($id, $metadata[IdEnvelope::MESSAGE_ID_KEY]);
92+
}
93+
94+
public function testFromData(): void
95+
{
96+
$handlerName = 'test-handler';
97+
$data = ['key' => 'value'];
98+
$metadata = ['meta' => 'data', IdEnvelope::MESSAGE_ID_KEY => 'test-id'];
99+
100+
$envelope = IdEnvelope::fromData($handlerName, $data, $metadata);
101+
102+
$this->assertInstanceOf(IdEnvelope::class, $envelope);
103+
$this->assertSame($handlerName, $envelope->getHandlerName());
104+
$this->assertSame($data, $envelope->getData());
105+
$this->assertArrayHasKey('meta', $envelope->getMetadata());
106+
$this->assertSame('data', $envelope->getMetadata()['meta']);
107+
$this->assertSame('test-id', $envelope->getId());
108+
}
109+
110+
private function createMessage(array $metadata = []): MessageInterface
111+
{
112+
return new Message('test-handler', ['test-data'], $metadata);
113+
}
114+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Yiisoft\Queue\Message\Message;
9+
use Yiisoft\Queue\Message\MessageInterface;
10+
use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope;
11+
12+
final class FailureEnvelopeTest extends TestCase
13+
{
14+
public function testConstructor(): void
15+
{
16+
$message = $this->createMessage();
17+
$metadata = ['attempt' => 1, 'error' => 'Test error'];
18+
19+
$envelope = new FailureEnvelope($message, $metadata);
20+
21+
$this->assertSame($message, $envelope->getMessage());
22+
$this->assertArrayHasKey(FailureEnvelope::FAILURE_META_KEY, $envelope->getMetadata());
23+
$this->assertSame($metadata, $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]);
24+
}
25+
26+
public function testFromMessageWithExistingMetadata(): void
27+
{
28+
$existingMetadata = ['attempt' => 1];
29+
$message = $this->createMessage([FailureEnvelope::FAILURE_META_KEY => $existingMetadata]);
30+
31+
$envelope = FailureEnvelope::fromMessage($message);
32+
33+
$this->assertSame($existingMetadata, $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]);
34+
}
35+
36+
public function testFromMessageWithoutMetadata(): void
37+
{
38+
$message = $this->createMessage();
39+
40+
$envelope = FailureEnvelope::fromMessage($message);
41+
42+
$this->assertArrayHasKey(FailureEnvelope::FAILURE_META_KEY, $envelope->getMetadata());
43+
$this->assertSame([], $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]);
44+
}
45+
46+
public function testMetadataMerging(): void
47+
{
48+
$existingMetadata = ['attempt' => 1, 'firstError' => 'First error'];
49+
$message = $this->createMessage([FailureEnvelope::FAILURE_META_KEY => $existingMetadata]);
50+
$newMetadata = ['attempt' => 2, 'lastError' => 'Last error'];
51+
52+
$envelope = new FailureEnvelope($message, $newMetadata);
53+
54+
$mergedMetadata = $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY];
55+
$this->assertSame(2, $mergedMetadata['attempt']);
56+
$this->assertSame('First error', $mergedMetadata['firstError']);
57+
$this->assertSame('Last error', $mergedMetadata['lastError']);
58+
}
59+
60+
public function testFromData(): void
61+
{
62+
$handlerName = 'test-handler';
63+
$data = ['key' => 'value'];
64+
$metadata = [
65+
'meta' => 'data',
66+
FailureEnvelope::FAILURE_META_KEY => ['attempt' => 1],
67+
];
68+
69+
$envelope = FailureEnvelope::fromData($handlerName, $data, $metadata);
70+
71+
$this->assertInstanceOf(FailureEnvelope::class, $envelope);
72+
$this->assertSame($handlerName, $envelope->getHandlerName());
73+
$this->assertSame($data, $envelope->getData());
74+
$this->assertArrayHasKey('meta', $envelope->getMetadata());
75+
$this->assertSame('data', $envelope->getMetadata()['meta']);
76+
$this->assertSame(['attempt' => 1], $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]);
77+
}
78+
79+
private function createMessage(array $metadata = []): MessageInterface
80+
{
81+
return new Message('test-handler', ['test-data'], $metadata);
82+
}
83+
}

0 commit comments

Comments
 (0)