Skip to content

Commit

Permalink
Merge pull request #338 from ror-community/staging
Browse files Browse the repository at this point in the history
Merge staging to master: Add tests for all views and use API logic in generate ID
  • Loading branch information
lizkrznarich committed Apr 27, 2023
2 parents ae60e9d + 3c827bb commit 4d93bd1
Show file tree
Hide file tree
Showing 4 changed files with 236 additions and 19 deletions.
24 changes: 6 additions & 18 deletions rorapi/management/commands/generaterorid.py
@@ -1,6 +1,7 @@
import base32_crockford
import random
from rorapi.settings import ES, ES7, ES_VARS, ROR_API, GRID_REMOVED_IDS
from rorapi.queries import retrieve_organization, get_ror_id
from rorapi.settings import ROR_API

def generate_ror_id():
"""Generates random ROR ID.
Expand All @@ -19,22 +20,9 @@ def generate_ror_id():
def check_ror_id(enable_es_7):
"""Checks if generated ror id exists in the index. If so, it generates a new id, otherwise it returns the generated ror id
"""
ror_id = generate_ror_id()
if enable_es_7:
s = ES7.search(index=ES_VARS['INDEX'],
body={'query': {
'term': {
'_id': ror_id
}}})
if s['hits']['total']['value'] == 1 or s in GRID_REMOVED_IDS:
check_ror_id(enable_es_7)
else:
s = ES.search(index=ES_VARS['INDEX'],
body={'query': {
'term': {
'_id': ror_id
}}})
if s['hits']['total'] == 1 or s in GRID_REMOVED_IDS:
check_ror_id(enable_es_7)
ror_id = get_ror_id(generate_ror_id())
errors, organization = retrieve_organization(ror_id, enable_es_7)
if errors is None:
check_ror_id(enable_es_7)
return ror_id

42 changes: 42 additions & 0 deletions rorapi/tests/data/test_data_address.json
@@ -0,0 +1,42 @@
{
"address": {
"lat": 37.80437,
"lng": -122.2708,
"state": null,
"state_code": null,
"country_geonames_id": 6252001,
"city": "Oakland",
"geonames_city": {
"id": "5378538",
"city": "Oakland",
"geonames_admin1": {
"name": "California",
"ascii_name": "California",
"id": 5332921,
"code": "US.CA"
},
"geonames_admin2": {
"name": "Alameda",
"id": 5322745,
"ascii_name": "Alameda",
"code": "US.CA.001"
},
"nuts_level1": {
"name": null,
"code": null
},
"nuts_level2": {
"name": null,
"code": null
},
"nuts_level3": {
"name": null,
"code": null
}
}
},
"country": {
"country_code": "US",
"country_name": "United States"
}
}
7 changes: 7 additions & 0 deletions rorapi/tests/data/test_data_address_empty.json
@@ -0,0 +1,7 @@
{
"msg": "Expecting value",
"doc": "",
"pos": 0,
"lineno": 1,
"colno": 1
}
182 changes: 181 additions & 1 deletion rorapi/tests/tests_views.py
Expand Up @@ -293,4 +293,184 @@ def test_retrieve_invalid_id(self, search_mock, feature_mock):
self.assertEquals(response.status_code, 404)
self.assertEquals(list(organization.keys()), ['errors'])
self.assertEquals(len(organization['errors']), 1)
self.assertTrue(any(['not a valid' in e for e in organization['errors']]))
self.assertTrue(any(['not a valid' in e for e in organization['errors']]))

class GenerateIdViewTestCaseEs7(SimpleTestCase):
def setUp(self):
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_empty_es7.json'), 'r') as f:
self.test_data_empty = json.load(f)
self.maxDiff = None

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('elasticsearch_dsl.Search.execute')
def test_generateid_success(self, search_mock, permission_mock, feature_mock):
search_mock.return_value = \
IterableAttrDict(self.test_data_empty,
self.test_data_empty['hits']['hits'])
permission_mock.return_value = True
feature_mock.return_value = True
response = self.client.get('/generateid')
self.assertEquals(response.status_code, 200)

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('rorapi.views.OurTokenPermission.has_permission')
def test_generateid_fail_no_permission(self, permission_mock, feature_mock):
permission_mock.return_value = False
feature_mock.return_value = True
response = self.client.get('/generateid')
self.assertEquals(response.status_code, 403)

class GenerateIdViewTestCaseEs6(SimpleTestCase):
def setUp(self):
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_empty_es6.json'), 'r') as f:
self.test_data_empty = json.load(f)
self.maxDiff = None

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('elasticsearch_dsl.Search.execute')
def test_generateid_success(self, search_mock, permission_mock, feature_mock):
search_mock.return_value = \
IterableAttrDict(self.test_data_empty,
self.test_data_empty['hits']['hits'])
permission_mock.return_value = True
feature_mock.return_value = False
response = self.client.get('/generateid')
self.assertEquals(response.status_code, 200)

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('rorapi.views.OurTokenPermission.has_permission')
def test_generateid_fail_no_permission(self, permission_mock, feature_mock):
permission_mock.return_value = False
feature_mock.return_value = False
response = self.client.get('/generateid')
self.assertEquals(response.status_code, 403)

class GenerateAddressViewTestCase(SimpleTestCase):
def setUp(self):
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_address.json'), 'r') as f:
self.test_data_address = json.load(f)
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_address_empty.json'), 'r') as f:
self.test_data_address_empty = json.load(f)
self.maxDiff = None

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('update_address.new_geonames')
def test_generateaddress_success(self, address_mock, permission_mock):
address_mock.return_value = self.test_data_address
permission_mock.return_value = True
response = self.client.get('/generateaddress/5378538')
self.assertContains(response, 'address')
self.assertEquals(response.status_code, 200)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('update_address.new_geonames')
def test_generateaddress_fail_empty(self, address_mock, permission_mock):
address_mock.return_value = self.test_data_address_empty
permission_mock.return_value = True
response = self.client.get('/generateaddress/0000000')
self.assertContains(response, 'Expecting value')
self.assertEquals(response.status_code, 200)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
def test_generateid_fail_no_permission(self, permission_mock):
permission_mock.return_value = False
response = self.client.get('/generateaddress/5378538')
self.assertEquals(response.status_code, 403)

class IndexRorViewTestCaseEs6(SimpleTestCase):
def setUp(self):
self.success_msg = {"status": "OK", "msg": "dir indexed"}
self.error_msg = {"status": "ERROR", "msg": "error"}
self.maxDiff = None

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('rorapi.views.process_files')
def test_index_ror_success(self, index_mock, permission_mock):
index_mock.return_value = self.success_msg
permission_mock.return_value = True
response = self.client.get('/indexdata/foo/6')
self.assertEquals(response.status_code, 200)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('rorapi.views.process_files')
def test_index_ror_fail_error(self, index_mock, permission_mock):
index_mock.return_value = self.error_msg
permission_mock.return_value = True
response = self.client.get('/indexdata/foo/6')
self.assertEquals(response.status_code, 400)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
def test_index_ror_fail_no_permission(self, permission_mock):
permission_mock.return_value = False
response = self.client.get('/indexdata/foo/6')
self.assertEquals(response.status_code, 403)

class IndexRorViewTestCaseEs7(SimpleTestCase):
def setUp(self):
self.success_msg = {"status": "OK", "msg": "dir indexed"}
self.error_msg = {"status": "ERROR", "msg": "error"}
self.maxDiff = None

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('rorapi.views.process_files')
def test_index_ror_success(self, index_mock, permission_mock):
index_mock.return_value = self.success_msg
permission_mock.return_value = True
response = self.client.get('/indexdata/foo/7')
self.assertEquals(response.status_code, 200)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
@mock.patch('rorapi.views.process_files')
def test_index_ror_fail_error(self, index_mock, permission_mock):
index_mock.return_value = self.error_msg
permission_mock.return_value = True
response = self.client.get('/indexdata/foo/7')
self.assertEquals(response.status_code, 400)

@mock.patch('rorapi.views.OurTokenPermission.has_permission')
def test_index_ror_fail_no_permission(self, permission_mock):
permission_mock.return_value = False
response = self.client.get('/indexdata/foo/7')
self.assertEquals(response.status_code, 403)

class HeartbeatViewTestCaseEs6(SimpleTestCase):
def setUp(self):
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_search_es6.json'), 'r') as f:
self.test_data = json.load(f)

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('elasticsearch_dsl.Search.execute')
def test_generateid_success(self, search_mock, feature_mock):
search_mock.return_value = \
IterableAttrDict(self.test_data, self.test_data['hits']['hits'])
feature_mock.return_value = False
response = self.client.get('/heartbeat')
self.assertEquals(response.status_code, 200)

class HeartbeatViewTestCaseEs7(SimpleTestCase):
def setUp(self):
with open(
os.path.join(os.path.dirname(__file__),
'data/test_data_search_es7.json'), 'r') as f:
self.test_data = json.load(f)

@mock.patch('ldclient.client.LDClient.variation')
@mock.patch('elasticsearch_dsl.Search.execute')
def test_generateid_success(self, search_mock, feature_mock):
search_mock.return_value = \
IterableAttrDict(self.test_data, self.test_data['hits']['hits'])
feature_mock.return_value = True
response = self.client.get('/heartbeat')
self.assertEquals(response.status_code, 200)

0 comments on commit 4d93bd1

Please sign in to comment.