|
3 | 3 |
|
4 | 4 | import pytest |
5 | 5 |
|
6 | | -from faststream import AckPolicy, BaseMiddleware |
| 6 | +from faststream import AckPolicy, BaseMiddleware, Context |
| 7 | +from faststream.exceptions import SetupError |
7 | 8 | from faststream.kafka import TopicPartition |
8 | 9 | from faststream.kafka.annotations import KafkaMessage |
9 | 10 | from faststream.kafka.message import FAKE_CONSUMER |
10 | 11 | from faststream.kafka.testing import FakeProducer |
| 12 | +from faststream.message import TOMBSTONE |
11 | 13 | from tests.brokers.base.testclient import BrokerTestclientTestcase |
12 | 14 | from tests.tools import spy_decorator |
13 | 15 |
|
@@ -350,3 +352,40 @@ async def test_publisher_without_destination(self) -> None: |
350 | 352 |
|
351 | 353 | await another_publisher.publish(None, topic="new-key") |
352 | 354 | another_publisher.mock.assert_called_once() |
| 355 | + |
| 356 | + async def test_publish_none_encodes_normally(self, queue: str) -> None: |
| 357 | + broker = self.get_broker(apply_types=True) |
| 358 | + |
| 359 | + values: asyncio.Queue[bytes | None] = asyncio.Queue() |
| 360 | + |
| 361 | + @broker.subscriber(queue) |
| 362 | + async def handler(msg=Context("message")) -> None: |
| 363 | + await values.put(msg.raw_message.value) |
| 364 | + |
| 365 | + async with self.patch_broker(broker) as br: |
| 366 | + await br.publish(None, queue) |
| 367 | + value = await asyncio.wait_for(values.get(), timeout=3) |
| 368 | + |
| 369 | + assert value == b"" |
| 370 | + |
| 371 | + async def test_publish_tombstone_sends_a_real_tombstone(self, queue: str) -> None: |
| 372 | + broker = self.get_broker(apply_types=True) |
| 373 | + |
| 374 | + values: asyncio.Queue[bytes | None] = asyncio.Queue() |
| 375 | + |
| 376 | + @broker.subscriber(queue) |
| 377 | + async def handler(msg=Context("message")) -> None: |
| 378 | + await values.put(msg.raw_message.value) |
| 379 | + |
| 380 | + async with self.patch_broker(broker) as br: |
| 381 | + await br.publish(TOMBSTONE, queue, key=b"tombstone-key") |
| 382 | + value = await asyncio.wait_for(values.get(), timeout=3) |
| 383 | + |
| 384 | + assert value is None |
| 385 | + |
| 386 | + async def test_publish_tombstone_without_key_raises(self, queue: str) -> None: |
| 387 | + broker = self.get_broker(apply_types=True) |
| 388 | + |
| 389 | + async with self.patch_broker(broker) as br: |
| 390 | + with pytest.raises(SetupError): |
| 391 | + await br.publish(TOMBSTONE, queue) |
0 commit comments