|
8 | 8 |
|
9 | 9 | from taskiq_aio_kafka.broker import AioKafkaBroker |
10 | 10 | from taskiq_aio_kafka.constants import TASK_STREAM_LABEL |
| 11 | +from taskiq_aio_kafka.subscriber import StreamMessage |
11 | 12 | from taskiq_aio_kafka.topic import Topic |
12 | 13 |
|
13 | 14 |
|
@@ -357,6 +358,47 @@ async def test_task(message: bytes) -> None: |
357 | 358 | } |
358 | 359 |
|
359 | 360 |
|
| 361 | +async def test_subscribe_decoder_can_return_task_args_and_kwargs() -> None: |
| 362 | + """Test that stream messages can be mapped to task args and kwargs.""" |
| 363 | + broker = AioKafkaBroker( |
| 364 | + bootstrap_servers="localhost", |
| 365 | + kafka_topic="default-topic", |
| 366 | + kafka_admin_client=get_admin_client_mock(), |
| 367 | + ) |
| 368 | + |
| 369 | + @broker.task |
| 370 | + async def test_task(user_id: int, email: str, active: bool) -> None: |
| 371 | + assert user_id |
| 372 | + assert email |
| 373 | + assert active |
| 374 | + |
| 375 | + def decode_message(message: bytes) -> StreamMessage: |
| 376 | + user_id, email, active = message.decode().split(":") |
| 377 | + return StreamMessage( |
| 378 | + args=(int(user_id),), |
| 379 | + kwargs={ |
| 380 | + "email": email, |
| 381 | + "active": active == "true", |
| 382 | + }, |
| 383 | + ) |
| 384 | + |
| 385 | + broker.subscribe("stream-topic", test_task, decoder=decode_message) |
| 386 | + broker._aiokafka_consumer = _ConsumerMock( |
| 387 | + [build_consumer_record("stream-topic", b"1:user@example.com:true")], |
| 388 | + ) |
| 389 | + broker._is_consumer_started = True |
| 390 | + |
| 391 | + received_message = await get_first_task(broker) |
| 392 | + taskiq_message = broker.formatter.loads(received_message) |
| 393 | + |
| 394 | + assert taskiq_message.task_name == test_task.task_name |
| 395 | + assert taskiq_message.args == [1] |
| 396 | + assert taskiq_message.kwargs == { |
| 397 | + "email": "user@example.com", |
| 398 | + "active": True, |
| 399 | + } |
| 400 | + |
| 401 | + |
360 | 402 | def test_subscribe_adds_topic_to_broker_topics() -> None: |
361 | 403 | """Test that subscribed topic is included in listened topics.""" |
362 | 404 | broker = AioKafkaBroker( |
|
0 commit comments