Skip to content

Commit eb4adf9

Browse files
authored
Merge pull request 3scale-qe#152 from mkudlej/add_backend_methods
add backend methods with integration tests
2 parents d8e240b + 396d4ac commit eb4adf9

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

tests/integration/conftest.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,11 @@ def hits_metric(service):
223223
return service.metrics.read_by(system_name='hits')
224224

225225

226+
@pytest.fixture(scope='module')
227+
def backend_hits_metric(backend):
228+
return backend.metrics.read_by(system_name=('hits.' + str(backend['id'])))
229+
230+
226231
@pytest.fixture(scope='module')
227232
def method_params(service):
228233
suffix = get_suffix()
@@ -248,6 +253,13 @@ def method(hits_metric, method_params):
248253
cleanup(resource)
249254

250255

256+
@pytest.fixture(scope='module')
257+
def backend_method(backend_hits_metric, method_params):
258+
resource = backend_hits_metric.methods.create(params=method_params)
259+
yield resource
260+
cleanup(resource)
261+
262+
251263
def get_mapping_rule_pattern():
252264
suffix = get_suffix()
253265
pattern = f'test-{suffix}'.replace('_', '-')
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import pytest
2+
3+
from threescale_api.errors import ApiClientError
4+
5+
from tests.integration import asserts
6+
7+
def test_list_methods(backend_hits_metric, backend_method):
8+
assert len(backend_hits_metric.methods.list()) >= 1
9+
10+
def test_should_create_method(backend_method, method_params):
11+
asserts.assert_resource(backend_method)
12+
asserts.assert_resource_params(backend_method, method_params)
13+
14+
15+
def test_should_not_create_method_for_custom_metric(backend_hits_metric, method_params):
16+
resource = backend_hits_metric.methods.create(params=method_params, throws=False)
17+
asserts.assert_errors_contains(resource, ['system_name'])
18+
19+
20+
def test_should_friendly_name_be_required(backend_hits_metric):
21+
resource = backend_hits_metric.methods.create(params={}, throws=False)
22+
asserts.assert_errors_contains(resource, ['friendly_name'])
23+
24+
25+
def test_should_raise_api_exception(backend_hits_metric):
26+
with pytest.raises(ApiClientError):
27+
backend_hits_metric.methods.create(params={})
28+
29+
30+
def test_should_read_method(backend_method, method_params):
31+
resource = backend_method.read()
32+
asserts.assert_resource(resource)
33+
asserts.assert_resource_params(resource, method_params)
34+
35+
36+
def test_should_update_method(backend_method, updated_method_params):
37+
resource = backend_method.update(params=updated_method_params)
38+
asserts.assert_resource(resource)
39+
asserts.assert_resource_params(resource, updated_method_params)
40+
41+
42+
def test_should_delete_method(backend_hits_metric, updated_method_params):
43+
resource = backend_hits_metric.methods.create(params=updated_method_params)
44+
assert resource.exists()
45+
resource.delete()
46+
assert not resource.exists()
47+
48+
49+
def test_should_list_methods(backend_hits_metric):
50+
resources = backend_hits_metric.methods.list()
51+
assert len(resources) == 1

threescale_api/resources.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@ def url(self) -> str:
114114
return self.parent.url + '/methods'
115115

116116

117+
class BackendMethods(Methods):
118+
def __init__(self, *args, entity_name='method', entity_collection='methods', per_page=None,
119+
**kwargs):
120+
super().__init__(*args, entity_name=entity_name,
121+
entity_collection=entity_collection, per_page=per_page, **kwargs)
122+
123+
117124
class ApplicationPlans(DefaultPlanClient):
118125
def __init__(self, *args, entity_name='application_plan', entity_collection='plans', **kwargs):
119126
super().__init__(*args, entity_name=entity_name,
@@ -1104,6 +1111,19 @@ def service(self) -> 'Service':
11041111
return self.metric.parent
11051112

11061113

1114+
class BackendMethod(Method):
1115+
def __init__(self, entity_name='system_name', **kwargs):
1116+
super().__init__(entity_name=entity_name, **kwargs)
1117+
1118+
@property
1119+
def service(self) -> 'Service':
1120+
raise AttributeError("'BackendMethod' object has no attribute 'service'")
1121+
1122+
@property
1123+
def backend(self) -> 'Backend':
1124+
return self.metric.parent
1125+
1126+
11071127
class Metric(DefaultResource):
11081128
def __init__(self, entity_name='system_name', **kwargs):
11091129
super().__init__(entity_name=entity_name, **kwargs)

0 commit comments

Comments
 (0)