Skip to content

Commit ee2eda0

Browse files
committed
feat(verifier): Allow setting consumer_version_selectors on Verifier
1 parent 482407d commit ee2eda0

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

pact/verifier.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""Classes and methods to verify Contracts."""
2+
import json
3+
24
from pact.verify_wrapper import VerifyWrapper, path_exists, expand_directories
35

46
class Verifier(object):
@@ -103,6 +105,9 @@ def extract_params(self, **kwargs):
103105
verbose = kwargs.get('verbose', False)
104106
publish_version = kwargs.get('publish_version', None)
105107

108+
raw_consumer_selectors = kwargs.get('consumer_version_selectors', [])
109+
consumer_selectors = self._build_consumer_selectors(raw_consumer_selectors)
110+
106111
options = {
107112
'log_dir': log_dir,
108113
'log_level': log_level,
@@ -114,9 +119,17 @@ def extract_params(self, **kwargs):
114119
'provider_states_setup_url': states_setup_url,
115120
'verbose': verbose,
116121
'publish_version': publish_version,
122+
'consumer_selectors': consumer_selectors
117123
}
118124
return self.filter_empty_options(**options)
119125

126+
def _build_consumer_selectors(self, consumer_selectors):
127+
"""
128+
Turns each dict in the consumer_selectors list into a string with a
129+
json object, as expected by VerifyWrapper.
130+
"""
131+
return [json.dumps(selector) for selector in consumer_selectors]
132+
120133
def filter_empty_options(self, **kwargs):
121134
"""Filter out empty options."""
122135
kwargs = dict(filter(lambda item: item[1] is not None, kwargs.items()))

tests/test_verifier.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,34 @@ def test_verifier_with_provider_and_files(self, mock_path_exists, mock_wrapper):
4242
enable_pending=False,
4343
include_wip_pacts_since=None)
4444

45+
@patch("pact.verify_wrapper.VerifyWrapper.call_verify")
46+
@patch('pact.verifier.path_exists', return_value=True)
47+
def test_verifier_with_provider_and_files_passes_consumer_selctors(self, mock_path_exists, mock_wrapper):
48+
mock_wrapper.return_value = (True, 'some logs')
49+
50+
output, _ = self.verifier.verify_pacts(
51+
'path/to/pact1',
52+
'path/to/pact2',
53+
headers=['header1', 'header2'],
54+
consumer_version_selectors=[
55+
{"tag": "main", "latest": True},
56+
{"tag": "test", "latest": False},
57+
]
58+
)
59+
60+
assertVerifyCalled(mock_wrapper,
61+
'path/to/pact1',
62+
'path/to/pact2',
63+
provider='test_provider',
64+
custom_provider_headers=['header1', 'header2'],
65+
provider_base_url='http://localhost:8888',
66+
log_level='INFO',
67+
verbose=False,
68+
enable_pending=False,
69+
include_wip_pacts_since=None,
70+
consumer_selectors=['{"tag": "main", "latest": true}',
71+
'{"tag": "test", "latest": false}'])
72+
4573
def test_validate_on_publish_results(self):
4674
self.assertRaises(Exception, self.verifier.verify_pacts, 'path/to/pact1', publish=True)
4775

@@ -140,6 +168,34 @@ def test_verifier_with_broker(self, mock_wrapper):
140168
enable_pending=False,
141169
include_wip_pacts_since=None)
142170

171+
@patch("pact.verify_wrapper.VerifyWrapper.call_verify")
172+
def test_verifier_with_broker_passes_consumer_selctors(self, mock_wrapper):
173+
174+
mock_wrapper.return_value = (True, 'some value')
175+
176+
output, _ = self.verifier.verify_with_broker(
177+
**self.default_opts,
178+
consumer_version_selectors=[
179+
{"tag": "main", "latest": True},
180+
{"tag": "test", "latest": False},
181+
]
182+
)
183+
184+
self.assertTrue(output)
185+
assertVerifyCalled(mock_wrapper,
186+
provider='test_provider',
187+
provider_base_url='http://localhost:8888',
188+
broker_password=self.broker_password,
189+
broker_username=self.broker_username,
190+
broker_token='token',
191+
broker_url=self.broker_url,
192+
log_level='INFO',
193+
verbose=False,
194+
enable_pending=False,
195+
include_wip_pacts_since=None,
196+
consumer_selectors=['{"tag": "main", "latest": true}',
197+
'{"tag": "test", "latest": false}'])
198+
143199
@patch("pact.verify_wrapper.VerifyWrapper.call_verify")
144200
@patch('pact.verifier.path_exists', return_value=True)
145201
def test_publish_on_success(self, mock_path_exists, mock_wrapper):

0 commit comments

Comments
 (0)