Skip to content

Commit 3316743

Browse files
Merge pull request #69 from jawu/#52-helper-function-for-assertion-with-matchers
solves #52 added get_generated_values
2 parents ae7f333 + 8bedfd4 commit 3316743

File tree

2 files changed

+83
-2
lines changed

2 files changed

+83
-2
lines changed

pact/matchers.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,30 @@ def from_term(term):
198198
return term.generate()
199199
else:
200200
raise ValueError('Unknown type: %s' % type(term))
201+
202+
203+
def get_generated_values(input):
204+
"""
205+
Resolve (nested) Matchers to their generated values for assertion.
206+
207+
:param input: The input to be resolved to its generated values.
208+
:type input: None, list, dict, int, float, bool, str, unicode, Matcher
209+
:return: The input resolved to its generated value(s)
210+
:rtype: None, list, dict, int, float, bool, str, unicode, Matcher
211+
"""
212+
if input is None:
213+
return input
214+
if isinstance(input, (six.string_types, int, float, bool)):
215+
return input
216+
if isinstance(input, dict):
217+
return {k: get_generated_values(v) for k, v in input.items()}
218+
if isinstance(input, list):
219+
return [get_generated_values(t) for i, t in enumerate(input)]
220+
elif isinstance(input, Like):
221+
return get_generated_values(input.matcher)
222+
elif isinstance(input, EachLike):
223+
return [get_generated_values(input.matcher)] * input.minimum
224+
elif isinstance(input, Term):
225+
return input.generate()['data']['generate']
226+
else:
227+
raise ValueError('Unknown type: %s' % type(input))

pact/test/test_matchers.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest import TestCase
22

3-
from ..matchers import EachLike, Like, Matcher, SomethingLike, Term, from_term
3+
from ..matchers import EachLike, Like, Matcher, SomethingLike, \
4+
Term, from_term, get_generated_values
45

56

67
class MatcherTestCase(TestCase):
@@ -118,7 +119,6 @@ def test_regex(self):
118119
class FromTermTestCase(TestCase):
119120
def test_dict(self):
120121
expected = {'administrator': False, 'id': 123, 'username': 'user'}
121-
122122
self.assertEqual(from_term(expected), expected)
123123

124124
def test_none(self):
@@ -184,3 +184,57 @@ def test_nested(self):
184184
def test_unknown_type(self):
185185
with self.assertRaises(ValueError):
186186
from_term(set())
187+
188+
189+
class GetGeneratedValuesTestCase(TestCase):
190+
def test_none(self):
191+
self.assertIsNone(get_generated_values(None))
192+
193+
def test_bool(self):
194+
self.assertFalse(get_generated_values(False))
195+
196+
def test_unicode(self):
197+
self.assertEqual(get_generated_values(u'testing'), 'testing')
198+
199+
def test_int(self):
200+
self.assertEqual(get_generated_values(123), 123)
201+
202+
def test_float(self):
203+
self.assertEqual(get_generated_values(3.14), 3.14)
204+
205+
def test_list(self):
206+
term = [1, 123, 'sample']
207+
self.assertEqual(get_generated_values(term), term)
208+
209+
def test_dict(self):
210+
expected = {'administrator': False, 'id': 123, 'username': 'user'}
211+
self.assertEqual(get_generated_values(expected), expected)
212+
213+
def test_each_like(self):
214+
self.assertEqual(
215+
get_generated_values(EachLike({'a': 1})), [{'a': 1}])
216+
217+
def test_each_like_minimum(self):
218+
self.assertEqual(get_generated_values(EachLike({'a': 1}, minimum=5)),
219+
[{'a': 1}] * 5)
220+
221+
def test_something_like(self):
222+
self.assertEqual(
223+
get_generated_values(SomethingLike(123)), 123)
224+
225+
def test_term(self):
226+
self.assertEqual(
227+
get_generated_values(Term('[a-f0-9]+', 'abc123')), 'abc123')
228+
229+
def test_nested(self):
230+
input = [
231+
EachLike({
232+
'username': Term('[a-zA-Z]+', 'firstlast'),
233+
'id': SomethingLike(123)})]
234+
self.assertEqual(
235+
get_generated_values(input),
236+
[[{'username': 'firstlast', 'id': 123}]])
237+
238+
def test_unknown_type(self):
239+
with self.assertRaises(ValueError):
240+
get_generated_values(set())

0 commit comments

Comments
 (0)