Skip to content

Commit b7fee17

Browse files
committed
Merge branch 'master' of github.com:ShipChain/python-common
2 parents 5235e0f + 85ed27c commit b7fee17

File tree

2 files changed

+134
-1
lines changed

2 files changed

+134
-1
lines changed

src/shipchain_common/test_utils/json_asserter.py

+26-1
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121

2222

2323
class EntityReferenceClass:
24-
def __init__(self, resource=None, pk=None, attributes=None, relationships=None):
24+
def __init__(self, resource=None, pk=None, attributes=None, relationships=None, meta=None):
2525
self.resource = resource
2626
self.pk = pk
2727
self.attributes = attributes
2828
self.relationships = relationships
29+
self.meta = meta
2930

3031
def __str__(self):
3132
return f'Type: {self.resource}; ID: {self.pk}; ' \
@@ -100,7 +101,10 @@ def _vnd_assert_entity_ref_in_list(response_list, entity_ref, skip_attributes_pr
100101
f'List Attribute key `{attr_key}` missing in {response_single}'
101102
assert response_single['attributes'][attr_key] == attr_value, \
102103
f'List Attribute Value incorrect `{attr_value}` in {response_single}'
104+
if entity_ref.meta:
105+
_vnd_assert_meta(response_single, entity_ref.meta)
103106
break
107+
104108
else:
105109
single_attribute_failed = False
106110

@@ -112,6 +116,9 @@ def _vnd_assert_entity_ref_in_list(response_list, entity_ref, skip_attributes_pr
112116
single_attribute_failed = True
113117
break
114118

119+
if entity_ref.meta:
120+
_vnd_assert_meta(response_single, entity_ref.meta)
121+
115122
if not single_attribute_failed:
116123
found_include = True
117124

@@ -158,6 +165,21 @@ def _vnd_assert_relationships(response_data, relationships):
158165
f'EntityRef ID `{relationship_ref.pk}` does not match {response_relationships}'
159166

160167

168+
def _vnd_assert_meta(response_data, meta_data):
169+
"""
170+
Scan response data for meta data
171+
"""
172+
assert 'meta' in response_data, f'Meta missing in {response_data}'
173+
assert isinstance(meta_data, dict), f'Invalid format for meta data {type(meta_data)}, must be dict'
174+
175+
response_meta = response_data['meta']
176+
177+
for key, value in meta_data.items():
178+
assert key in response_meta, f'Meta field `{key}` not found in {response_meta}'
179+
assert response_meta[key] == value,\
180+
f'Meta field `{key}` had value `{response_meta[key]}` not `{value}` as expected.'
181+
182+
161183
def _vnd_assert_include(response, included):
162184
"""
163185
Scan a response for all included resources
@@ -187,6 +209,9 @@ def _vnd_assertions(response_data, entity_ref):
187209
if entity_ref.relationships:
188210
_vnd_assert_relationships(response_data, entity_ref.relationships)
189211

212+
if entity_ref.meta:
213+
_vnd_assert_meta(response_data, entity_ref.meta)
214+
190215

191216
def _plain_assert_attributes_in_response(response, attributes):
192217
for key, value in attributes.items():

tests/test_json_asserter.py

+108
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ def vnd_single():
105105
}
106106
]
107107
}
108+
},
109+
'meta': {
110+
'key': 'value',
111+
'other_key': 'other_value',
108112
}
109113
},
110114
'included': [
@@ -141,6 +145,10 @@ def vnd_list():
141145
}
142146
]
143147
}
148+
},
149+
'meta': {
150+
'key': 'value',
151+
'other_key': 'other_value',
144152
}
145153
},
146154
{
@@ -1080,3 +1088,103 @@ def test_plain_json_single_count(self, vnd_single):
10801088
with pytest.raises(AssertionError) as err:
10811089
AssertionHelper.HTTP_200(response, count=1)
10821090
assert f'Count is only checked when response is list' in str(err.value)
1091+
1092+
def test_vnd_meta(self, vnd_single):
1093+
response = self.build_response(vnd_single)
1094+
AssertionHelper.HTTP_200(response, entity_refs=AssertionHelper.EntityRef(
1095+
resource=EXAMPLE_RESOURCE['type'],
1096+
meta={
1097+
'key': 'value',
1098+
'other_key': 'other_value'
1099+
},
1100+
))
1101+
1102+
def test_vnd_meta_mismatch(self, vnd_single):
1103+
response = self.build_response(vnd_single)
1104+
with pytest.raises(AssertionError) as err:
1105+
AssertionHelper.HTTP_200(response, entity_refs=AssertionHelper.EntityRef(
1106+
resource=EXAMPLE_RESOURCE['type'],
1107+
meta={
1108+
'key': 'different value'
1109+
},
1110+
))
1111+
assert f'Meta field `key` had value `value` not `different value` as expected.' in str(err.value)
1112+
1113+
def test_vnd_meta_invalid_key(self, vnd_single):
1114+
response = self.build_response(vnd_single)
1115+
with pytest.raises(AssertionError) as err:
1116+
AssertionHelper.HTTP_200(response, entity_refs=AssertionHelper.EntityRef(
1117+
resource=EXAMPLE_RESOURCE['type'],
1118+
meta={
1119+
'invalid_key': 'value'
1120+
},
1121+
))
1122+
assert f'Meta field `invalid_key` not found' in str(err.value)
1123+
1124+
def test_vnd_no_meta(self, vnd_single):
1125+
vnd_single['data'].pop('meta')
1126+
response = self.build_response(vnd_single)
1127+
with pytest.raises(AssertionError) as err:
1128+
AssertionHelper.HTTP_200(response, entity_refs=AssertionHelper.EntityRef(
1129+
resource=EXAMPLE_RESOURCE['type'],
1130+
meta={
1131+
'key': 'value'
1132+
},
1133+
))
1134+
assert 'Meta missing' in str(err.value)
1135+
1136+
def test_vnd_invalid_meta_format(self, vnd_single):
1137+
response = self.build_response(vnd_single)
1138+
with pytest.raises(AssertionError) as err:
1139+
AssertionHelper.HTTP_200(response, entity_refs=AssertionHelper.EntityRef(
1140+
resource=EXAMPLE_RESOURCE['type'],
1141+
meta=[{
1142+
'key': 'value'
1143+
}],
1144+
))
1145+
assert 'Invalid format for meta data <class \'list\'>, must be dict' in str(err.value)
1146+
1147+
def test_vnd_meta_list(self, vnd_list, entity_ref_1):
1148+
entity_ref_1.meta = {
1149+
'key': 'value',
1150+
'other_key': 'other_value'
1151+
}
1152+
response = self.build_response(vnd_list)
1153+
AssertionHelper.HTTP_200(response, entity_refs=entity_ref_1, is_list=True)
1154+
1155+
def test_vnd_list_meta_mismatch(self, vnd_list, entity_ref_1):
1156+
response = self.build_response(vnd_list)
1157+
entity_ref_1.meta = {
1158+
'key': 'different value'
1159+
}
1160+
with pytest.raises(AssertionError) as err:
1161+
AssertionHelper.HTTP_200(response, entity_refs=entity_ref_1, is_list=True)
1162+
assert f'Meta field `key` had value `value` not `different value` as expected.' in str(err.value)
1163+
1164+
def test_vnd_list_meta_invalid_key(self, vnd_list, entity_ref_1):
1165+
entity_ref_1.meta = {
1166+
'invalid_key': 'value'
1167+
}
1168+
response = self.build_response(vnd_list)
1169+
with pytest.raises(AssertionError) as err:
1170+
AssertionHelper.HTTP_200(response, entity_refs=entity_ref_1, is_list=True)
1171+
assert f'Meta field `invalid_key` not found' in str(err.value)
1172+
1173+
def test_vnd_list_no_meta(self, vnd_list, entity_ref_3):
1174+
entity_ref_3.meta = {
1175+
'key': 'value',
1176+
'other_key': 'other_value'
1177+
}
1178+
response = self.build_response(vnd_list)
1179+
with pytest.raises(AssertionError) as err:
1180+
AssertionHelper.HTTP_200(response, entity_refs=entity_ref_3, is_list=True)
1181+
assert 'Meta missing' in str(err.value)
1182+
1183+
def test_vnd_list_invalid_meta_format(self, vnd_list, entity_ref_1):
1184+
entity_ref_1.meta = [{
1185+
'invalid_key': 'value'
1186+
}]
1187+
response = self.build_response(vnd_list)
1188+
with pytest.raises(AssertionError) as err:
1189+
AssertionHelper.HTTP_200(response, entity_refs=entity_ref_1, is_list=True)
1190+
assert 'Invalid format for meta data <class \'list\'>, must be dict' in str(err.value)

0 commit comments

Comments
 (0)