Skip to content

Commit e910159

Browse files
committed
finish tests
1 parent a0f8c2d commit e910159

File tree

3 files changed

+49
-12
lines changed

3 files changed

+49
-12
lines changed

tests/test_consume.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,15 @@ def test_consume_but_exception_thrown_consumer_is_closed():
8282
c.return_value.consume.side_effect = Exception
8383
consume("somebroker", "sometopic", num_messages=1)
8484
c.return_value.close.assert_called_once()
85+
86+
@patch("saluki.consume.Consumer")
87+
def test_consume_with_timestamp(mock_consumer):
88+
expected_topic = "sometopic"
89+
partition = 0
90+
timestamp = 1234
91+
offset = 2345
92+
93+
mock_consumer.offsets_for_times.return_value = [TopicPartition(expected_topic, partition, offset)]
94+
consume("somebroker", topic=expected_topic, timestamp=timestamp, partition=partition)
95+
96+
mock_consumer.return_value.assign.assert_called_with([TopicPartition(expected_topic, partition, offset)])

tests/test_play.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ def test_play_with_offsets():
3737
consumer_obj.consume.assert_called_with(2) # stop - start + 1
3838

3939
p_obj = p()
40-
call_1 = p_obj.produce.call_args_list[0]
41-
assert call_1.args == (dest_topic, message_1_val, message_1_key)
42-
call_2 = p_obj.produce.call_args_list[1]
43-
assert call_2.args == (dest_topic, message_2_val, message_2_key)
40+
produce_batch_call = p_obj.produce_batch.call_args.args
41+
assert dest_topic == produce_batch_call[0]
42+
assert {'key': message_1_key, 'value': message_1_val} in produce_batch_call[1]
43+
assert {'key': message_2_key, 'value': message_2_val} in produce_batch_call[1]
4444

4545

4646
def test_play_with_timestamps():
@@ -64,9 +64,9 @@ def test_play_with_timestamps():
6464

6565
with patch("saluki.play.Consumer") as c, patch("saluki.play.Producer") as p:
6666
consumer_obj = c()
67-
consumer_obj.offsets_for_times.return_value = [
68-
TopicPartition(src_topic, partition=0, offset=2),
69-
TopicPartition(src_topic, partition=0, offset=3),
67+
consumer_obj.offsets_for_times.side_effect = [
68+
[TopicPartition(src_topic, partition=0, offset=2)],
69+
[TopicPartition(src_topic, partition=0, offset=3)]
7070
]
7171
consumer_obj.consume.return_value = [message_1, message_2]
7272

@@ -78,10 +78,10 @@ def test_play_with_timestamps():
7878
consumer_obj.consume.assert_called_with(2) # stop - start + 1
7979

8080
p_obj = p()
81-
call_1 = p_obj.produce.call_args_list[0]
82-
assert call_1.args == (dest_topic, message_1_val, message_1_key)
83-
call_2 = p_obj.produce.call_args_list[1]
84-
assert call_2.args == (dest_topic, message_2_val, message_2_key)
81+
produce_batch_call = p_obj.produce_batch.call_args.args
82+
assert dest_topic == produce_batch_call[0]
83+
assert {'key': message_1_key, 'value': message_1_val} in produce_batch_call[1]
84+
assert {'key': message_2_key, 'value': message_2_val} in produce_batch_call[1]
8585

8686

8787
def test_play_with_exception_when_consuming_consumer_still_closed():

tests/test_utils.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from argparse import ArgumentTypeError
12
from unittest.mock import Mock, patch
23

34
import pytest
@@ -13,7 +14,7 @@
1314
_parse_timestamp,
1415
_try_to_deserialise_message,
1516
deserialise_and_print_messages,
16-
parse_kafka_uri,
17+
parse_kafka_uri, dateutil_parsable_or_unix_timestamp,
1718
)
1819

1920

@@ -174,3 +175,27 @@ def test_uri_with_no_topic():
174175
test_broker = "some_broker"
175176
with pytest.raises(RuntimeError):
176177
parse_kafka_uri(test_broker)
178+
179+
@pytest.mark.parametrize("timestamp",
180+
["2025-11-19T15:27:11",
181+
"2025-11-19T15:27:11Z",
182+
"2025-11-19T15:27:11+00:00"
183+
]
184+
185+
)
186+
def test_parses_datetime_properly_with_string(timestamp):
187+
assert dateutil_parsable_or_unix_timestamp(timestamp) == 1763566031000
188+
189+
@pytest.mark.parametrize("timestamp",
190+
["1763566031000",
191+
"1763566031",
192+
"1763566031000000",
193+
]
194+
)
195+
def test_parses_datetime_properly_and_leaves_unix_timestamp_alone(timestamp):
196+
assert dateutil_parsable_or_unix_timestamp(timestamp) == int(timestamp)
197+
198+
199+
def test_invalid_timestamp_raises():
200+
with pytest.raises(ArgumentTypeError):
201+
dateutil_parsable_or_unix_timestamp("invalid")

0 commit comments

Comments
 (0)