Skip to content

Commit 858faf0

Browse files
committed
Deny Envelope::fromData() usage
1 parent 1a8ba57 commit 858faf0

10 files changed

Lines changed: 5 additions & 226 deletions

File tree

src/Message/DelayEnvelope.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,6 @@ public function __construct(MessageInterface $message, float $delaySeconds)
1313
parent::__construct($message, [self::META_DELAY_SECONDS => $delaySeconds]);
1414
}
1515

16-
public static function fromMessage(MessageInterface $message): static
17-
{
18-
/** @var float|int|string $delaySeconds */
19-
$delaySeconds = $message->getMetadata()[self::META_DELAY_SECONDS] ?? 0.0;
20-
return new self($message, (float) $delaySeconds);
21-
}
22-
2316
public function getDelaySeconds(): float
2417
{
2518
return $this->metadata[self::META_DELAY_SECONDS];

src/Message/Envelope.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Yiisoft\Queue\Message;
66

7+
use LogicException;
8+
79
abstract class Envelope implements MessageInterface
810
{
911
/**
@@ -25,11 +27,11 @@ public function __construct(MessageInterface $message, array $metadata)
2527

2628
final public static function fromData(string $type, mixed $data, array $metadata = []): static
2729
{
28-
return static::fromMessage(Message::fromData($type, $data, $metadata));
30+
throw new LogicException(
31+
'Envelopes cannot be created via "fromData()". Wrap an existing "MessageInterface" instance instead.',
32+
);
2933
}
3034

31-
abstract public static function fromMessage(MessageInterface $message): static;
32-
3335
final public function getMessage(): MessageInterface
3436
{
3537
return $this->message;

src/Message/IdEnvelope.php

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
namespace Yiisoft\Queue\Message;
66

7-
use function is_int;
8-
use function is_object;
9-
use function is_string;
10-
117
/**
128
* ID envelope allows to identify a message.
139
*/
@@ -20,21 +16,6 @@ public function __construct(MessageInterface $message, string|int|null $id)
2016
parent::__construct($message, [self::MESSAGE_ID_KEY => $id]);
2117
}
2218

23-
public static function fromMessage(MessageInterface $message): static
24-
{
25-
$rawId = $message->getMetadata()[self::MESSAGE_ID_KEY] ?? null;
26-
27-
$id = match (true) {
28-
$rawId === null => null, // don't remove this branch: it's important for compute speed
29-
is_string($rawId),
30-
is_int($rawId) => $rawId,
31-
is_object($rawId) && method_exists($rawId, '__toString') => (string) $rawId,
32-
default => null,
33-
};
34-
35-
return new self($message, $id);
36-
}
37-
3819
public function getId(): string|int|null
3920
{
4021
return $this->metadata[self::MESSAGE_ID_KEY];

src/Middleware/FailureHandling/FailureEnvelope.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,4 @@ public function __construct(MessageInterface $message, array $metadata = [])
1818
self::FAILURE_META_KEY => ArrayHelper::merge($message->getMetadata()[self::FAILURE_META_KEY] ?? [], $metadata),
1919
]);
2020
}
21-
22-
public static function fromMessage(MessageInterface $message): static
23-
{
24-
/** @var array $metadata */
25-
$metadata = $message->getMetadata()[self::FAILURE_META_KEY] ?? [];
26-
27-
return new self($message, $metadata);
28-
}
2921
}

tests/App/DummyEnvelope.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,4 @@ public function __construct(MessageInterface $message)
1313
{
1414
parent::__construct($message, []);
1515
}
16-
17-
public static function fromMessage(MessageInterface $message): static
18-
{
19-
return new self($message);
20-
}
2116
}

tests/Benchmark/MetadataBench.php

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,6 @@ public function benchEnvelopeRead(): void
3131
$id = $message->getId();
3232
}
3333

34-
/**
35-
* Create metadata as an array and read its value from an envelope object.
36-
*/
37-
public function benchEnvelopeReadRestored(): void
38-
{
39-
$message = IdEnvelope::fromMessage(new Message('foo', 'bar', ['id' => 1]));
40-
$id = $message->getId();
41-
}
42-
43-
public function provideEnvelopeStack(): Generator
44-
{
45-
$config = [1 => 'one', 5 => 'five', 15 => 'fifteen'];
46-
$message = new IdEnvelope(new Message('foo', 'bar'), 1);
47-
48-
for ($i = 1; $i <= max(...array_keys($config)); $i++) {
49-
if (isset($config[$i])) {
50-
yield $config[$i] => ['message' => $message];
51-
}
52-
$message = new FailureEnvelope($message, ["fail$i" => "fail$i"]);
53-
}
54-
}
55-
56-
/**
57-
* Read metadata value from an envelope object restored from an envelope stacks of different depth
58-
*
59-
* @psalm-param array{message: MessageInterface} $params
60-
*/
61-
#[ParamProviders('provideEnvelopeStack')]
62-
public function benchEnvelopeReadFromStack(array $params): void
63-
{
64-
$id = IdEnvelope::fromMessage($params['message'])->getId();
65-
}
66-
6734
public function provideEnvelopeStackCounts(): Generator
6835
{
6936
yield 'one' => [1];

tests/Unit/Message/DelayEnvelopeTest.php

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,4 @@ public function testDelayEnvelope(): void
2424
self::assertArrayHasKey(DelayEnvelope::META_DELAY_SECONDS, $metadata);
2525
self::assertSame(300.5, $metadata[DelayEnvelope::META_DELAY_SECONDS]);
2626
}
27-
28-
public function testFromMessage(): void
29-
{
30-
$message = new Message('test', ['data' => 'value'], [DelayEnvelope::META_DELAY_SECONDS => 150]);
31-
$delayEnvelope = DelayEnvelope::fromMessage($message);
32-
33-
self::assertSame(150.0, $delayEnvelope->getDelaySeconds());
34-
self::assertSame('test', $delayEnvelope->getType());
35-
self::assertSame(['data' => 'value'], $delayEnvelope->getData());
36-
}
37-
38-
public function testFromMessageWithoutDelay(): void
39-
{
40-
$message = new Message('test', ['data' => 'value']);
41-
$delayEnvelope = DelayEnvelope::fromMessage($message);
42-
43-
self::assertSame(0.0, $delayEnvelope->getDelaySeconds());
44-
}
4527
}

tests/Unit/Message/EnvelopeTest.php

Lines changed: 0 additions & 26 deletions
This file was deleted.

tests/Unit/Message/IdEnvelopeTest.php

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,6 @@ public function testConstructor(): void
2222
$this->assertSame($id, $envelope->getId());
2323
}
2424

25-
public function testFromMessageWithStringId(): void
26-
{
27-
$id = 'test-id';
28-
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $id]);
29-
30-
$envelope = IdEnvelope::fromMessage($message);
31-
32-
$this->assertSame($id, $envelope->getId());
33-
}
34-
35-
public function testFromMessageWithIntId(): void
36-
{
37-
$id = 123;
38-
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $id]);
39-
40-
$envelope = IdEnvelope::fromMessage($message);
41-
42-
$this->assertSame($id, $envelope->getId());
43-
}
44-
45-
public function testFromMessageWithNullId(): void
46-
{
47-
$message = $this->createMessage();
48-
49-
$envelope = IdEnvelope::fromMessage($message);
50-
51-
$this->assertNull($envelope->getId());
52-
}
53-
54-
public function testFromMessageWithObjectHavingToString(): void
55-
{
56-
$stringableObject = new class {
57-
public function __toString(): string
58-
{
59-
return 'object-id';
60-
}
61-
};
62-
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $stringableObject]);
63-
$envelope = IdEnvelope::fromMessage($message);
64-
65-
$this->assertSame('object-id', $envelope->getId());
66-
}
67-
68-
public function testFromMessageWithInvalidIdType(): void
69-
{
70-
$invalidId = ['array-cannot-be-id'];
71-
$message = $this->createMessage([IdEnvelope::MESSAGE_ID_KEY => $invalidId]);
72-
$message = IdEnvelope::fromMessage($message);
73-
74-
$this->assertNull($message->getId());
75-
}
76-
7725
public function testGetEnvelopeMetadata(): void
7826
{
7927
$id = 'test-id';
@@ -86,22 +34,6 @@ public function testGetEnvelopeMetadata(): void
8634
$this->assertSame($id, $metadata[IdEnvelope::MESSAGE_ID_KEY]);
8735
}
8836

89-
public function testFromData(): void
90-
{
91-
$type = 'test-handler';
92-
$data = ['key' => 'value'];
93-
$metadata = ['meta' => 'data', IdEnvelope::MESSAGE_ID_KEY => 'test-id'];
94-
95-
$envelope = IdEnvelope::fromData($type, $data, $metadata);
96-
97-
$this->assertInstanceOf(IdEnvelope::class, $envelope);
98-
$this->assertSame($type, $envelope->getType());
99-
$this->assertSame($data, $envelope->getData());
100-
$this->assertArrayHasKey('meta', $envelope->getMetadata());
101-
$this->assertSame('data', $envelope->getMetadata()['meta']);
102-
$this->assertSame('test-id', $envelope->getId());
103-
}
104-
10537
private function createMessage(array $metadata = []): MessageInterface
10638
{
10739
return new Message('test-handler', ['test-data'], $metadata);

tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,6 @@ public function testConstructor(): void
2323
$this->assertSame($metadata, $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]);
2424
}
2525

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-
4626
public function testMetadataMerging(): void
4727
{
4828
$existingMetadata = ['attempt' => 1, 'firstError' => 'First error'];
@@ -57,25 +37,6 @@ public function testMetadataMerging(): void
5737
$this->assertSame('Last error', $mergedMetadata['lastError']);
5838
}
5939

60-
public function testFromData(): void
61-
{
62-
$type = 'test-handler';
63-
$data = ['key' => 'value'];
64-
$metadata = [
65-
'meta' => 'data',
66-
FailureEnvelope::FAILURE_META_KEY => ['attempt' => 1],
67-
];
68-
69-
$envelope = FailureEnvelope::fromData($type, $data, $metadata);
70-
71-
$this->assertInstanceOf(FailureEnvelope::class, $envelope);
72-
$this->assertSame($type, $envelope->getType());
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-
7940
private function createMessage(array $metadata = []): MessageInterface
8041
{
8142
return new Message('test-handler', ['test-data'], $metadata);

0 commit comments

Comments
 (0)