1
1
import pytest
2
+ from botocore .config import Config
2
3
3
4
from aws_lambda_powertools .utilities .batch import PartialSQSProcessor
4
5
5
6
6
- @pytest .fixture (scope = "module " )
7
+ @pytest .fixture (scope = "function " )
7
8
def sqs_event ():
8
9
return {
9
10
"messageId" : "059f36b4-87a3-44ab-83d2-661975830a7d" ,
@@ -18,47 +19,57 @@ def sqs_event():
18
19
}
19
20
20
21
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 ):
22
33
expected_url = "https://queue.amazonaws.com/123456789012/my-queue"
23
34
24
35
records_mock = mocker .patch .object (PartialSQSProcessor , "records" , create = True , new_callable = mocker .PropertyMock )
25
36
records_mock .return_value = [sqs_event ]
26
37
27
- result = PartialSQSProcessor () .get_queue_url ()
38
+ result = partial_sqs_processor .get_queue_url ()
28
39
assert result == expected_url
29
40
30
41
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
33
44
34
45
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 ):
36
47
expected_entries = [{"Id" : sqs_event ["messageId" ], "ReceiptHandle" : sqs_event ["receiptHandle" ]}]
37
48
38
49
success_messages_mock = mocker .patch .object (
39
50
PartialSQSProcessor , "success_messages" , new_callable = mocker .PropertyMock
40
51
)
41
52
success_messages_mock .return_value = [sqs_event ]
42
53
43
- result = PartialSQSProcessor () .get_entries_to_clean ()
54
+ result = partial_sqs_processor .get_entries_to_clean ()
44
55
45
56
assert result == expected_entries
46
57
47
58
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 ):
49
60
expected_entries = []
50
61
51
62
success_messages_mock = mocker .patch .object (
52
63
PartialSQSProcessor , "success_messages" , new_callable = mocker .PropertyMock
53
64
)
54
65
success_messages_mock .return_value = []
55
66
56
- result = PartialSQSProcessor () .get_entries_to_clean ()
67
+ result = partial_sqs_processor .get_entries_to_clean ()
57
68
58
69
assert result == expected_entries
59
70
60
71
61
- def test_partial_sqs_process_record_success (mocker ):
72
+ def test_partial_sqs_process_record_success (mocker , partial_sqs_processor ):
62
73
expected_value = mocker .sentinel .expected_value
63
74
64
75
success_result = mocker .sentinel .success_result
@@ -67,15 +78,15 @@ def test_partial_sqs_process_record_success(mocker):
67
78
handler_mock = mocker .patch .object (PartialSQSProcessor , "handler" , create = True , return_value = success_result )
68
79
success_handler_mock = mocker .patch .object (PartialSQSProcessor , "success_handler" , return_value = expected_value )
69
80
70
- result = PartialSQSProcessor () ._process_record (record )
81
+ result = partial_sqs_processor ._process_record (record )
71
82
72
83
handler_mock .assert_called_once_with (record )
73
84
success_handler_mock .assert_called_once_with (record , success_result )
74
85
75
86
assert result == expected_value
76
87
77
88
78
- def test_partial_sqs_process_record_failure (mocker ):
89
+ def test_partial_sqs_process_record_failure (mocker , partial_sqs_processor ):
79
90
expected_value = mocker .sentinel .expected_value
80
91
81
92
failure_result = Exception ()
@@ -84,42 +95,39 @@ def test_partial_sqs_process_record_failure(mocker):
84
95
handler_mock = mocker .patch .object (PartialSQSProcessor , "handler" , create = True , side_effect = failure_result )
85
96
failure_handler_mock = mocker .patch .object (PartialSQSProcessor , "failure_handler" , return_value = expected_value )
86
97
87
- result = PartialSQSProcessor () ._process_record (record )
98
+ result = partial_sqs_processor ._process_record (record )
88
99
89
100
handler_mock .assert_called_once_with (record )
90
101
failure_handler_mock .assert_called_once_with (record , failure_result )
91
102
92
103
assert result == expected_value
93
104
94
105
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 )
100
109
101
- processor ._prepare ()
110
+ partial_sqs_processor ._prepare ()
102
111
103
112
success_messages_mock .clear .assert_called_once ()
104
113
failed_messages_mock .clear .assert_called_once ()
105
114
106
115
107
- def test_partial_sqs_clean (monkeypatch , mocker ):
108
- processor = PartialSQSProcessor ()
116
+ def test_partial_sqs_clean (monkeypatch , mocker , partial_sqs_processor ):
109
117
records = [mocker .sentinel .record ]
110
118
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 )
113
121
114
122
queue_url_mock = mocker .patch .object (PartialSQSProcessor , "get_queue_url" )
115
123
entries_to_clean_mock = mocker .patch .object (PartialSQSProcessor , "get_entries_to_clean" )
116
124
117
125
queue_url_mock .return_value = mocker .sentinel .queue_url
118
126
entries_to_clean_mock .return_value = mocker .sentinel .entries_to_clean
119
127
120
- client_mock = mocker .patch .object (processor , "client" , autospec = True )
128
+ client_mock = mocker .patch .object (partial_sqs_processor , "client" , autospec = True )
121
129
122
- processor ._clean ()
130
+ partial_sqs_processor ._clean ()
123
131
124
132
client_mock .delete_message_batch .assert_called_once_with (
125
133
QueueUrl = mocker .sentinel .queue_url , Entries = mocker .sentinel .entries_to_clean
0 commit comments