-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_handler.py
More file actions
75 lines (52 loc) · 2.08 KB
/
Copy pathtest_handler.py
File metadata and controls
75 lines (52 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from json import dumps
from aws_lambda_powertools.utilities.typing import LambdaContext
from pytest import fixture, main, raises
@fixture(autouse=True)
def env(monkeypatch, table_name):
monkeypatch.setenv("TABLE_NAME", table_name)
def test_handler_handle_record(repository, mocker):
from templates.sqs.handler import Handler
handler = Handler(repository)
record = mocker.MagicMock()
record.body = dumps({"id": "123", "content": "test content"})
handler.handle_record(record)
item = repository.get_item("123")
assert item is not None
assert item["id"] == "123"
assert item["content"] == "test content"
assert item["status"] == "PROCESSED"
def test_handler_handle_record_exception(repository, mocker):
from templates.sqs.handler import Handler
handler = Handler(repository)
record = mocker.MagicMock()
record.body = dumps({"id": "123", "content": "test content"})
mocker.patch.object(repository, "put_item", side_effect=Exception("DynamoDB error"))
with raises(Exception) as excinfo:
handler.handle_record(record)
assert "DynamoDB error" in str(excinfo.value)
def test_lambda_handler(mocker, monkeypatch, repository, table_name):
from templates.sqs.handler import main
monkeypatch.setenv("TABLE_NAME", table_name)
mocker.patch("templates.sqs.handler.Repository", return_value=repository)
event = {
"Records": [
{
"messageId": "1",
"receiptHandle": "abc",
"body": dumps({"id": "123", "content": "test 1"}),
"attributes": {},
"messageAttributes": {},
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:queue",
"awsRegion": "us-east-1",
}
]
}
context = mocker.MagicMock(spec=LambdaContext)
response = main(event, context)
assert response["batchItemFailures"] == []
item = repository.get_item("123")
assert item is not None
assert item["content"] == "test 1"
if __name__ == "__main__":
main()