Skip to content
This repository was archived by the owner on Sep 12, 2025. It is now read-only.

Commit 98fc6ba

Browse files
authored
added validate_message_status (#49)
1 parent f0074ce commit 98fc6ba

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import uuid
2+
3+
success_message = "Validation successful"
4+
5+
def invalid_type_message(field, expected_type):
6+
return f"Invalid type for field {field}. Expected {expected_type.__name__}"
7+
8+
def missing_field_message(field):
9+
return f"Missing required field: {field}"
10+
11+
def validate_message_status(request):
12+
required_fields = {
13+
"batch_id": uuid.UUID,
14+
"message_reference": uuid.UUID,
15+
"nhs_number": str,
16+
"recipient_id": str,
17+
}
18+
19+
for field, expected_type in required_fields.items():
20+
if field not in request:
21+
return False, missing_field_message(field)
22+
try:
23+
if expected_type == uuid.UUID:
24+
uuid.UUID(request[field])
25+
elif not isinstance(request[field], expected_type):
26+
raise ValueError()
27+
except ValueError:
28+
return False, invalid_type_message(field, expected_type)
29+
30+
optional_fields = {
31+
"current_state": str,
32+
"message_id": str,
33+
"full_payload_details": (dict, type(None)),
34+
}
35+
36+
for field, expected_type in optional_fields.items():
37+
if field in request:
38+
if isinstance(expected_type, tuple):
39+
if not isinstance(request[field], expected_type):
40+
return False, invalid_type_message(field, expected_type)
41+
elif not isinstance(request[field], expected_type):
42+
return False, invalid_type_message(field, expected_type)
43+
44+
return True, success_message
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import pytest
2+
import uuid
3+
import validate_message_status
4+
5+
def generate_uuid():
6+
return str(uuid.uuid4())
7+
8+
@pytest.mark.parametrize(
9+
"req, expected_result, expected_message",
10+
[
11+
# All required fields present/valid
12+
(
13+
{
14+
"batch_id": generate_uuid(),
15+
"message_reference": generate_uuid(),
16+
"nhs_number": "1234567890",
17+
"recipient_id": "recipient123",
18+
},
19+
True,
20+
validate_message_status.success_message,
21+
),
22+
# Missing required field (batch_id)
23+
(
24+
{
25+
"message_reference": generate_uuid(),
26+
"nhs_number": "1234567890",
27+
"recipient_id": "recipient123",
28+
},
29+
False,
30+
validate_message_status.missing_field_message("batch_id"),
31+
),
32+
# Invalid type for `batch_id`
33+
(
34+
{
35+
"batch_id": "invalid-uuid",
36+
"message_reference": generate_uuid(),
37+
"nhs_number": "1234567890",
38+
"recipient_id": "recipient123",
39+
},
40+
False,
41+
validate_message_status.invalid_type_message("batch_id", uuid.UUID),
42+
),
43+
# Invalid type for `nhs_number`
44+
(
45+
{
46+
"batch_id": generate_uuid(),
47+
"message_reference": generate_uuid(),
48+
"nhs_number": 1234567890,
49+
"recipient_id": "recipient123",
50+
},
51+
False,
52+
validate_message_status.invalid_type_message("nhs_number", str),
53+
),
54+
# All optional fields are valid
55+
(
56+
{
57+
"batch_id": generate_uuid(),
58+
"message_reference": generate_uuid(),
59+
"nhs_number": "1234567890",
60+
"recipient_id": "recipient123",
61+
"current_state": "SENT",
62+
"message_id": "msg123",
63+
"full_payload_details": {"key": "value"},
64+
},
65+
True,
66+
validate_message_status.success_message,
67+
),
68+
# Invalid optional field type (current_state)
69+
(
70+
{
71+
"batch_id": generate_uuid(),
72+
"message_reference": generate_uuid(),
73+
"nhs_number": "1234567890",
74+
"recipient_id": "recipient123",
75+
"current_state": 123,
76+
},
77+
False,
78+
validate_message_status.invalid_type_message("current_state", str),
79+
),
80+
],
81+
)
82+
def test_validate_message_status(req, expected_result, expected_message):
83+
result, message = validate_message_status.validate_message_status(req)
84+
assert result == expected_result
85+
assert message == expected_message

0 commit comments

Comments
 (0)