-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtest_available_action_validator.py
More file actions
55 lines (46 loc) · 2.24 KB
/
test_available_action_validator.py
File metadata and controls
55 lines (46 loc) · 2.24 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
import copy
import pytest
from pydantic import ValidationError
from rules_validation_api.validators.available_action_validator import AvailableActionValidation
# 🔍 Mandatory Fields
class TestMandatoryFieldsSchemaValidations:
def test_valid_minimal_input(self, valid_available_action):
data = copy.deepcopy(valid_available_action)
data.pop("ActionDescription")
data.pop("UrlLink")
data.pop("UrlLabel")
action = AvailableActionValidation(**data)
assert action.action_type == "ButtonWithAuthLink"
assert action.action_code == "BookNBS"
assert action.action_description is None
assert action.url_link is None
assert action.url_label is None
def test_missing_required_fields(self, valid_available_action):
data = copy.deepcopy(valid_available_action)
data.pop("ActionType")
data.pop("ExternalRoutingCode")
with pytest.raises(ValidationError) as exc_info:
AvailableActionValidation(**data)
error_msg = str(exc_info.value)
assert "ActionType" in error_msg
assert "ExternalRoutingCode" in error_msg
# 🔍 Optional Fields
class TestOptionalFieldsSchemaValidations:
def test_valid_full_input(self, valid_available_action):
action = AvailableActionValidation(**valid_available_action)
assert action.action_type == "ButtonWithAuthLink"
assert action.action_code == "BookNBS"
assert action.action_description == ""
assert str(action.url_link) == "http://www.nhs.uk/book-rsv"
assert action.url_label == "Continue to booking"
def test_empty_string_is_valid_for_optional_fields(self, valid_available_action):
action = AvailableActionValidation(**valid_available_action)
assert action.action_description == ""
assert action.url_label == "Continue to booking"
@pytest.mark.parametrize("bad_url", ["not-a-url", "ftp://bad", "123"])
def test_invalid_url_raises_validation_error(self, valid_available_action, bad_url):
data = copy.deepcopy(valid_available_action)
data["UrlLink"] = bad_url
with pytest.raises(ValidationError) as exc_info:
AvailableActionValidation(**data)
assert "UrlLink" in str(exc_info.value)