Skip to content

Commit 13e3132

Browse files
committed
refactor(tests): processor using default config
1 parent 6cddf76 commit 13e3132

File tree

2 files changed

+60
-48
lines changed

2 files changed

+60
-48
lines changed

tests/functional/test_utilities_batch.py

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from typing import Callable
22

33
import pytest
4+
from botocore.config import Config
45
from botocore.stub import Stubber
56

67
from aws_lambda_powertools.utilities.batch import PartialSQSProcessor, partial_sqs_processor
78

89

9-
@pytest.fixture
10+
@pytest.fixture(scope="module")
1011
def sqs_event_factory() -> Callable:
1112
def factory(body: str):
1213
return {
@@ -24,7 +25,7 @@ def factory(body: str):
2425
return factory
2526

2627

27-
@pytest.fixture
28+
@pytest.fixture(scope="module")
2829
def record_handler() -> Callable:
2930
def handler(record):
3031
body = record["body"]
@@ -35,11 +36,20 @@ def handler(record):
3536
return handler
3637

3738

38-
def test_partial_sqs_processor_context_with_failure(sqs_event_factory, record_handler):
39+
@pytest.fixture(scope="module")
40+
def config() -> Config:
41+
return Config(region_name="us-east-1")
42+
43+
44+
@pytest.fixture(scope="function")
45+
def partial_processor(config) -> PartialSQSProcessor:
46+
return PartialSQSProcessor(config=config)
47+
48+
49+
def test_partial_sqs_processor_context_with_failure(sqs_event_factory, record_handler, partial_processor):
3950
"""
4051
Test processor with one failing record
4152
"""
42-
processor = PartialSQSProcessor()
4353

4454
fail_record = sqs_event_factory("fail")
4555
success_record = sqs_event_factory("success")
@@ -48,10 +58,10 @@ def test_partial_sqs_processor_context_with_failure(sqs_event_factory, record_ha
4858

4959
response = {"Successful": [{"Id": fail_record["messageId"]}], "Failed": []}
5060

51-
with Stubber(processor.client) as stubber:
61+
with Stubber(partial_processor.client) as stubber:
5262
stubber.add_response("delete_message_batch", response)
5363

54-
with processor(records, record_handler) as ctx:
64+
with partial_processor(records, record_handler) as ctx:
5565
result = ctx.process()
5666

5767
stubber.assert_no_pending_responses()
@@ -62,19 +72,17 @@ def test_partial_sqs_processor_context_with_failure(sqs_event_factory, record_ha
6272
]
6373

6474

65-
def test_partial_sqs_processor_context_only_success(sqs_event_factory, record_handler):
75+
def test_partial_sqs_processor_context_only_success(sqs_event_factory, record_handler, partial_processor):
6676
"""
6777
Test processor without failure
6878
"""
6979

70-
processor = PartialSQSProcessor()
71-
7280
first_record = sqs_event_factory("success")
7381
second_record = sqs_event_factory("success")
7482

7583
records = [first_record, second_record]
7684

77-
with processor(records, record_handler) as ctx:
85+
with partial_processor(records, record_handler) as ctx:
7886
result = ctx.process()
7987

8088
assert result == [
@@ -83,35 +91,31 @@ def test_partial_sqs_processor_context_only_success(sqs_event_factory, record_ha
8391
]
8492

8593

86-
def test_partial_sqs_processor_context_multiple_calls(sqs_event_factory, record_handler):
94+
def test_partial_sqs_processor_context_multiple_calls(sqs_event_factory, record_handler, partial_processor):
8795
"""
8896
Test processor without failure
8997
"""
9098

91-
processor = PartialSQSProcessor()
92-
9399
first_record = sqs_event_factory("success")
94100
second_record = sqs_event_factory("success")
95101

96102
records = [first_record, second_record]
97103

98-
with processor(records, record_handler) as ctx:
104+
with partial_processor(records, record_handler) as ctx:
99105
ctx.process()
100106

101-
with processor([first_record], record_handler) as ctx:
107+
with partial_processor([first_record], record_handler) as ctx:
102108
ctx.process()
103109

104-
assert processor.success_messages == [first_record]
110+
assert partial_processor.success_messages == [first_record]
105111

106112

107-
def test_partial_sqs_processor_middleware_with_default(sqs_event_factory, record_handler):
113+
def test_partial_sqs_processor_middleware_with_default(sqs_event_factory, record_handler, partial_processor):
108114
"""
109115
Test middleware with default partial processor
110116
"""
111117

112-
processor = PartialSQSProcessor()
113-
114-
@partial_sqs_processor(record_handler=record_handler, processor=processor)
118+
@partial_sqs_processor(record_handler=record_handler, processor=partial_processor)
115119
def lambda_handler(event, context):
116120
return True
117121

@@ -120,7 +124,7 @@ def lambda_handler(event, context):
120124
event = {"Records": [sqs_event_factory("fail"), sqs_event_factory("success")]}
121125
response = {"Successful": [{"Id": fail_record["messageId"]}], "Failed": []}
122126

123-
with Stubber(processor.client) as stubber:
127+
with Stubber(partial_processor.client) as stubber:
124128
stubber.add_response("delete_message_batch", response)
125129

126130
result = lambda_handler(event, {})
@@ -130,7 +134,7 @@ def lambda_handler(event, context):
130134
assert result is True
131135

132136

133-
def test_partial_sqs_processor_middleware_with_custom(capsys, sqs_event_factory, record_handler):
137+
def test_partial_sqs_processor_middleware_with_custom(capsys, sqs_event_factory, record_handler, config):
134138
"""
135139
Test middle with custom partial processor
136140
"""
@@ -140,7 +144,7 @@ def failure_handler(self, record, exception):
140144
print("Oh no ! It's a failure.")
141145
return super().failure_handler(record, exception)
142146

143-
processor = CustomProcessor()
147+
processor = CustomProcessor(config=config)
144148

145149
@partial_sqs_processor(record_handler=record_handler, processor=processor)
146150
def lambda_handler(event, context):

tests/unit/test_utilities_batch.py

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import pytest
2+
from botocore.config import Config
23

34
from aws_lambda_powertools.utilities.batch import PartialSQSProcessor
45

56

6-
@pytest.fixture(scope="module")
7+
@pytest.fixture(scope="function")
78
def sqs_event():
89
return {
910
"messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
@@ -18,47 +19,57 @@ def sqs_event():
1819
}
1920

2021

21-
def test_partial_sqs_get_queue_url_with_records(mocker, sqs_event):
22+
@pytest.fixture(scope="module")
23+
def config() -> Config:
24+
return Config(region_name="us-east-1")
25+
26+
27+
@pytest.fixture(scope="function")
28+
def partial_sqs_processor(config) -> PartialSQSProcessor:
29+
return PartialSQSProcessor(config=config)
30+
31+
32+
def test_partial_sqs_get_queue_url_with_records(mocker, sqs_event, partial_sqs_processor):
2233
expected_url = "https://queue.amazonaws.com/123456789012/my-queue"
2334

2435
records_mock = mocker.patch.object(PartialSQSProcessor, "records", create=True, new_callable=mocker.PropertyMock)
2536
records_mock.return_value = [sqs_event]
2637

27-
result = PartialSQSProcessor().get_queue_url()
38+
result = partial_sqs_processor.get_queue_url()
2839
assert result == expected_url
2940

3041

31-
def test_partial_sqs_get_queue_url_without_records():
32-
assert PartialSQSProcessor().get_queue_url() is None
42+
def test_partial_sqs_get_queue_url_without_records(partial_sqs_processor):
43+
assert partial_sqs_processor.get_queue_url() is None
3344

3445

35-
def test_partial_sqs_get_entries_to_clean_with_success(mocker, sqs_event):
46+
def test_partial_sqs_get_entries_to_clean_with_success(mocker, sqs_event, partial_sqs_processor):
3647
expected_entries = [{"Id": sqs_event["messageId"], "ReceiptHandle": sqs_event["receiptHandle"]}]
3748

3849
success_messages_mock = mocker.patch.object(
3950
PartialSQSProcessor, "success_messages", new_callable=mocker.PropertyMock
4051
)
4152
success_messages_mock.return_value = [sqs_event]
4253

43-
result = PartialSQSProcessor().get_entries_to_clean()
54+
result = partial_sqs_processor.get_entries_to_clean()
4455

4556
assert result == expected_entries
4657

4758

48-
def test_partial_sqs_get_entries_to_clean_without_success(mocker):
59+
def test_partial_sqs_get_entries_to_clean_without_success(mocker, partial_sqs_processor):
4960
expected_entries = []
5061

5162
success_messages_mock = mocker.patch.object(
5263
PartialSQSProcessor, "success_messages", new_callable=mocker.PropertyMock
5364
)
5465
success_messages_mock.return_value = []
5566

56-
result = PartialSQSProcessor().get_entries_to_clean()
67+
result = partial_sqs_processor.get_entries_to_clean()
5768

5869
assert result == expected_entries
5970

6071

61-
def test_partial_sqs_process_record_success(mocker):
72+
def test_partial_sqs_process_record_success(mocker, partial_sqs_processor):
6273
expected_value = mocker.sentinel.expected_value
6374

6475
success_result = mocker.sentinel.success_result
@@ -67,15 +78,15 @@ def test_partial_sqs_process_record_success(mocker):
6778
handler_mock = mocker.patch.object(PartialSQSProcessor, "handler", create=True, return_value=success_result)
6879
success_handler_mock = mocker.patch.object(PartialSQSProcessor, "success_handler", return_value=expected_value)
6980

70-
result = PartialSQSProcessor()._process_record(record)
81+
result = partial_sqs_processor._process_record(record)
7182

7283
handler_mock.assert_called_once_with(record)
7384
success_handler_mock.assert_called_once_with(record, success_result)
7485

7586
assert result == expected_value
7687

7788

78-
def test_partial_sqs_process_record_failure(mocker):
89+
def test_partial_sqs_process_record_failure(mocker, partial_sqs_processor):
7990
expected_value = mocker.sentinel.expected_value
8091

8192
failure_result = Exception()
@@ -84,42 +95,39 @@ def test_partial_sqs_process_record_failure(mocker):
8495
handler_mock = mocker.patch.object(PartialSQSProcessor, "handler", create=True, side_effect=failure_result)
8596
failure_handler_mock = mocker.patch.object(PartialSQSProcessor, "failure_handler", return_value=expected_value)
8697

87-
result = PartialSQSProcessor()._process_record(record)
98+
result = partial_sqs_processor._process_record(record)
8899

89100
handler_mock.assert_called_once_with(record)
90101
failure_handler_mock.assert_called_once_with(record, failure_result)
91102

92103
assert result == expected_value
93104

94105

95-
def test_partial_sqs_prepare(mocker):
96-
processor = PartialSQSProcessor()
97-
98-
success_messages_mock = mocker.patch.object(processor, "success_messages", spec=list)
99-
failed_messages_mock = mocker.patch.object(processor, "fail_messages", spec=list)
106+
def test_partial_sqs_prepare(mocker, partial_sqs_processor):
107+
success_messages_mock = mocker.patch.object(partial_sqs_processor, "success_messages", spec=list)
108+
failed_messages_mock = mocker.patch.object(partial_sqs_processor, "fail_messages", spec=list)
100109

101-
processor._prepare()
110+
partial_sqs_processor._prepare()
102111

103112
success_messages_mock.clear.assert_called_once()
104113
failed_messages_mock.clear.assert_called_once()
105114

106115

107-
def test_partial_sqs_clean(monkeypatch, mocker):
108-
processor = PartialSQSProcessor()
116+
def test_partial_sqs_clean(monkeypatch, mocker, partial_sqs_processor):
109117
records = [mocker.sentinel.record]
110118

111-
monkeypatch.setattr(processor, "fail_messages", records)
112-
monkeypatch.setattr(processor, "success_messages", records)
119+
monkeypatch.setattr(partial_sqs_processor, "fail_messages", records)
120+
monkeypatch.setattr(partial_sqs_processor, "success_messages", records)
113121

114122
queue_url_mock = mocker.patch.object(PartialSQSProcessor, "get_queue_url")
115123
entries_to_clean_mock = mocker.patch.object(PartialSQSProcessor, "get_entries_to_clean")
116124

117125
queue_url_mock.return_value = mocker.sentinel.queue_url
118126
entries_to_clean_mock.return_value = mocker.sentinel.entries_to_clean
119127

120-
client_mock = mocker.patch.object(processor, "client", autospec=True)
128+
client_mock = mocker.patch.object(partial_sqs_processor, "client", autospec=True)
121129

122-
processor._clean()
130+
partial_sqs_processor._clean()
123131

124132
client_mock.delete_message_batch.assert_called_once_with(
125133
QueueUrl=mocker.sentinel.queue_url, Entries=mocker.sentinel.entries_to_clean

0 commit comments

Comments
 (0)