Merge "Reconcile inconsistencies in the db api namescheme"

This commit is contained in:
Zuul 2018-03-27 16:08:36 +00:00 committed by Gerrit Code Review
commit c49a760567
8 changed files with 199 additions and 190 deletions

View File

@ -52,7 +52,7 @@ class MetadataController(rest.RestController):
@pecan.expose('json') @pecan.expose('json')
def get(self, test_id): def get(self, test_id):
"""Get test run metadata.""" """Get test run metadata."""
test_info = db.get_test(test_id) test_info = db.get_test_result(test_id)
role = api_utils.get_user_role(test_id) role = api_utils.get_user_role(test_id)
if role in (const.ROLE_FOUNDATION, const.ROLE_OWNER): if role in (const.ROLE_FOUNDATION, const.ROLE_OWNER):
return test_info['meta'] return test_info['meta']
@ -66,9 +66,9 @@ class MetadataController(rest.RestController):
"""Get value for key from test run metadata.""" """Get value for key from test run metadata."""
role = api_utils.get_user_role(test_id) role = api_utils.get_user_role(test_id)
if role in (const.ROLE_FOUNDATION, const.ROLE_OWNER): if role in (const.ROLE_FOUNDATION, const.ROLE_OWNER):
return db.get_test_meta_key(test_id, key) return db.get_test_result_meta_key(test_id, key)
elif role in (const.ROLE_USER) and key in self.rw_access_keys: elif role in (const.ROLE_USER) and key in self.rw_access_keys:
return db.get_test_meta_key(test_id, key) return db.get_test_result_meta_key(test_id, key)
pecan.abort(403) pecan.abort(403)
@_check_key @_check_key
@ -76,11 +76,11 @@ class MetadataController(rest.RestController):
@pecan.expose('json') @pecan.expose('json')
def post(self, test_id, key): def post(self, test_id, key):
"""Save value for key in test run metadata.""" """Save value for key in test run metadata."""
test = db.get_test(test_id) test = db.get_test_result(test_id)
if test['verification_status'] == const.TEST_VERIFIED: if test['verification_status'] == const.TEST_VERIFIED:
pecan.abort(403, 'Can not add/alter a new metadata key for a ' pecan.abort(403, 'Can not add/alter a new metadata key for a '
'verified test run.') 'verified test run.')
db.save_test_meta_item(test_id, key, pecan.request.body) db.save_test_result_meta_item(test_id, key, pecan.request.body)
pecan.response.status = 201 pecan.response.status = 201
@_check_key @_check_key
@ -88,11 +88,11 @@ class MetadataController(rest.RestController):
@pecan.expose('json') @pecan.expose('json')
def delete(self, test_id, key): def delete(self, test_id, key):
"""Delete key from test run metadata.""" """Delete key from test run metadata."""
test = db.get_test(test_id) test = db.get_test_result(test_id)
if test['verification_status'] == const.TEST_VERIFIED: if test['verification_status'] == const.TEST_VERIFIED:
pecan.abort(403, 'Can not delete a metadata key for a ' pecan.abort(403, 'Can not delete a metadata key for a '
'verified test run.') 'verified test run.')
db.delete_test_meta_item(test_id, key) db.delete_test_result_meta_item(test_id, key)
pecan.response.status = 204 pecan.response.status = 204
@ -143,14 +143,14 @@ class ResultsController(validation.BaseRestControllerWithValidation):
"""Handler for getting item.""" """Handler for getting item."""
user_role = api_utils.get_user_role(test_id) user_role = api_utils.get_user_role(test_id)
if user_role in (const.ROLE_FOUNDATION, const.ROLE_OWNER): if user_role in (const.ROLE_FOUNDATION, const.ROLE_OWNER):
test_info = db.get_test( test_info = db.get_test_result(
test_id, allowed_keys=['id', 'cpid', 'created_at', test_id, allowed_keys=['id', 'cpid', 'created_at',
'duration_seconds', 'meta', 'duration_seconds', 'meta',
'product_version', 'product_version',
'verification_status'] 'verification_status']
) )
else: else:
test_info = db.get_test(test_id) test_info = db.get_test_result(test_id)
test_list = db.get_test_results(test_id) test_list = db.get_test_results(test_id)
test_name_list = [test_dict['name'] for test_dict in test_list] test_name_list = [test_dict['name'] for test_dict in test_list]
test_info.update({'results': test_name_list, test_info.update({'results': test_name_list,
@ -182,7 +182,7 @@ class ResultsController(validation.BaseRestControllerWithValidation):
test_['meta'][const.USER] = pubkey.openid test_['meta'][const.USER] = pubkey.openid
test_ = self._auto_version_associate(test, test_, pubkey) test_ = self._auto_version_associate(test, test_, pubkey)
test_id = db.store_results(test_) test_id = db.store_test_results(test_)
return {'test_id': test_id, return {'test_id': test_id,
'url': parse.urljoin(CONF.ui_url, 'url': parse.urljoin(CONF.ui_url,
CONF.api.test_results_url) % test_id} CONF.api.test_results_url) % test_id}
@ -191,11 +191,11 @@ class ResultsController(validation.BaseRestControllerWithValidation):
@api_utils.check_permissions(level=const.ROLE_OWNER) @api_utils.check_permissions(level=const.ROLE_OWNER)
def delete(self, test_id): def delete(self, test_id):
"""Delete test run.""" """Delete test run."""
test = db.get_test(test_id) test = db.get_test_result(test_id)
if test['verification_status'] == const.TEST_VERIFIED: if test['verification_status'] == const.TEST_VERIFIED:
pecan.abort(403, 'Can not delete a verified test run.') pecan.abort(403, 'Can not delete a verified test run.')
db.delete_test(test_id) db.delete_test_result(test_id)
pecan.response.status = 204 pecan.response.status = 204
@pecan.expose('json') @pecan.expose('json')
@ -231,13 +231,14 @@ class ResultsController(validation.BaseRestControllerWithValidation):
elif not product['public']: elif not product['public']:
pecan.abort(403, 'Forbidden.') pecan.abort(403, 'Forbidden.')
records_count = db.get_test_records_count(filters) records_count = db.get_test_result_records_count(filters)
page_number, total_pages_number = \ page_number, total_pages_number = \
api_utils.get_page_number(records_count) api_utils.get_page_number(records_count)
try: try:
per_page = CONF.api.results_per_page per_page = CONF.api.results_per_page
results = db.get_test_records(page_number, per_page, filters) results = db.get_test_result_records(
page_number, per_page, filters)
is_foundation = api_utils.check_user_is_foundation_admin() is_foundation = api_utils.check_user_is_foundation_admin()
for result in results: for result in results:
@ -279,7 +280,7 @@ class ResultsController(validation.BaseRestControllerWithValidation):
is_foundation_admin = api_utils.check_user_is_foundation_admin() is_foundation_admin = api_utils.check_user_is_foundation_admin()
if 'product_version_id' in kw: if 'product_version_id' in kw:
test = db.get_test(test_id) test = db.get_test_result(test_id)
if test['verification_status'] == const.TEST_VERIFIED: if test['verification_status'] == const.TEST_VERIFIED:
pecan.abort(403, 'Can not update product_version_id for a ' pecan.abort(403, 'Can not update product_version_id for a '
'verified test run.') 'verified test run.')
@ -314,9 +315,10 @@ class ResultsController(validation.BaseRestControllerWithValidation):
# Check pre-conditions are met to mark a test verified. # Check pre-conditions are met to mark a test verified.
if (kw['verification_status'] == 1 and if (kw['verification_status'] == 1 and
not (db.get_test_meta_key(test_id, 'target') and not (db.get_test_result_meta_key(test_id, 'target') and
db.get_test_meta_key(test_id, 'guideline') and db.get_test_result_meta_key(test_id, 'guideline') and
db.get_test_meta_key(test_id, const.SHARED_TEST_RUN))): db.get_test_result_meta_key(test_id,
const.SHARED_TEST_RUN))):
pecan.abort(403, 'In order to mark a test verified, the ' pecan.abort(403, 'In order to mark a test verified, the '
'test must be shared and have been ' 'test must be shared and have been '
@ -325,6 +327,6 @@ class ResultsController(validation.BaseRestControllerWithValidation):
test_info['verification_status'] = kw['verification_status'] test_info['verification_status'] = kw['verification_status']
test = db.update_test(test_info) test = db.update_test_result(test_info)
pecan.response.status = 201 pecan.response.status = 201
return test return test

View File

@ -253,10 +253,10 @@ def get_user_role(test_id):
def check_user(test_id): def check_user(test_id):
"""Check that user has access to shared test run.""" """Check that user has access to shared test run."""
test_owner = db.get_test_meta_key(test_id, const.USER) test_owner = db.get_test_result_meta_key(test_id, const.USER)
if not test_owner: if not test_owner:
return True return True
elif db.get_test_meta_key(test_id, const.SHARED_TEST_RUN): elif db.get_test_result_meta_key(test_id, const.SHARED_TEST_RUN):
return True return True
else: else:
return check_owner(test_id) return check_owner(test_id)
@ -267,14 +267,14 @@ def check_owner(test_id):
if not is_authenticated(): if not is_authenticated():
return False return False
test = db.get_test(test_id) test = db.get_test_result(test_id)
# If the test is owned by a product. # If the test is owned by a product.
if test.get('product_version_id'): if test.get('product_version_id'):
version = db.get_product_version(test['product_version_id']) version = db.get_product_version(test['product_version_id'])
return check_user_is_product_admin(version['product_id']) return check_user_is_product_admin(version['product_id'])
# Otherwise, check the user ownership. # Otherwise, check the user ownership.
else: else:
user = db.get_test_meta_key(test_id, const.USER) user = db.get_test_result_meta_key(test_id, const.USER)
return user and user == get_user_id() return user and user == get_user_id()

View File

@ -46,36 +46,36 @@ NotFound = IMPL.NotFound
Duplication = IMPL.Duplication Duplication = IMPL.Duplication
def store_results(results): def store_test_results(results):
"""Storing results into database. """Storing results into database.
:param results: Dict describes test results. :param results: Dict describes test results.
""" """
return IMPL.store_results(results) return IMPL.store_test_results(results)
def get_test(test_id, allowed_keys=None): def get_test_result(test_id, allowed_keys=None):
"""Get test run information from the database. """Get test run information from the database.
:param test_id: The ID of the test. :param test_id: The ID of the test.
""" """
return IMPL.get_test(test_id, allowed_keys=allowed_keys) return IMPL.get_test_result(test_id, allowed_keys=allowed_keys)
def delete_test(test_id): def delete_test_result(test_id):
"""Delete test run information from the database. """Delete test run information from the database.
:param test_id: The ID of the test. :param test_id: The ID of the test.
""" """
return IMPL.delete_test(test_id) return IMPL.delete_test_result(test_id)
def update_test(test_info): def update_test_result(test_info):
"""Update test from the given test_info dictionary. """Update test from the given test_info dictionary.
:param test_info: The test :param test_info: The test
""" """
return IMPL.update_test(test_info) return IMPL.update_test_result(test_info)
def get_test_results(test_id): def get_test_results(test_id):
@ -86,7 +86,7 @@ def get_test_results(test_id):
return IMPL.get_test_results(test_id) return IMPL.get_test_results(test_id)
def get_test_meta_key(test_id, key, default=None): def get_test_result_meta_key(test_id, key, default=None):
"""Get metadata value related to specified test run. """Get metadata value related to specified test run.
:param test_id: The ID of the test. :param test_id: The ID of the test.
@ -94,20 +94,20 @@ def get_test_meta_key(test_id, key, default=None):
:param default: Default value :param default: Default value
""" """
return IMPL.get_test_meta_key(test_id, key, default) return IMPL.get_test_result_meta_key(test_id, key, default)
def save_test_meta_item(test_id, key, value): def save_test_result_meta_item(test_id, key, value):
"""Store or update item value related to specified test run. """Store or update item value related to specified test run.
:param test_id: The ID of the test. :param test_id: The ID of the test.
:param key: Metadata key :param key: Metadata key
""" """
return IMPL.save_test_meta_item(test_id, key, value) return IMPL.save_test_result_meta_item(test_id, key, value)
def delete_test_meta_item(test_id, key): def delete_test_result_meta_item(test_id, key):
"""Delete metadata item related to specified test run. """Delete metadata item related to specified test run.
:param test_id: The ID of the test. :param test_id: The ID of the test.
@ -116,25 +116,25 @@ def delete_test_meta_item(test_id, key):
:raise NotFound if default value is not set and no value found :raise NotFound if default value is not set and no value found
""" """
return IMPL.delete_test_meta_item(test_id, key) return IMPL.delete_test_result_meta_item(test_id, key)
def get_test_records(page_number, per_page, filters): def get_test_result_records(page_number, per_page, filters):
"""Get page with applied filters for uploaded test records. """Get page with applied filters for uploaded test records.
:param page_number: The number of page. :param page_number: The number of page.
:param per_page: The number of results for one page. :param per_page: The number of results for one page.
:param filters: (Dict) Filters that will be applied for records. :param filters: (Dict) Filters that will be applied for records.
""" """
return IMPL.get_test_records(page_number, per_page, filters) return IMPL.get_test_result_records(page_number, per_page, filters)
def get_test_records_count(filters): def get_test_result_records_count(filters):
"""Get total pages number with applied filters for uploaded test records. """Get total pages number with applied filters for uploaded test records.
:param filters: (Dict) Filters that will be applied for records. :param filters: (Dict) Filters that will be applied for records.
""" """
return IMPL.get_test_records_count(filters) return IMPL.get_test_result_records_count(filters)
def user_get(user_openid): def user_get(user_openid):

View File

@ -109,7 +109,7 @@ def _to_dict(sqlalchemy_object, allowed_keys=None):
return sqlalchemy_object return sqlalchemy_object
def store_results(results): def store_test_results(results):
"""Store test results.""" """Store test results."""
test = models.Test() test = models.Test()
test_id = str(uuid.uuid4()) test_id = str(uuid.uuid4())
@ -133,7 +133,7 @@ def store_results(results):
return test_id return test_id
def get_test(test_id, allowed_keys=None): def get_test_result(test_id, allowed_keys=None):
"""Get test info.""" """Get test info."""
session = get_session() session = get_session()
test_info = session.query(models.Test). \ test_info = session.query(models.Test). \
@ -144,7 +144,7 @@ def get_test(test_id, allowed_keys=None):
return _to_dict(test_info, allowed_keys) return _to_dict(test_info, allowed_keys)
def delete_test(test_id): def delete_test_result(test_id):
"""Delete test information from the database.""" """Delete test information from the database."""
session = get_session() session = get_session()
with session.begin(): with session.begin():
@ -159,7 +159,7 @@ def delete_test(test_id):
raise NotFound('Test result %s not found' % test_id) raise NotFound('Test result %s not found' % test_id)
def update_test(test_info): def update_test_result(test_info):
"""Update test from the given test_info dictionary.""" """Update test from the given test_info dictionary."""
session = get_session() session = get_session()
_id = test_info.get('id') _id = test_info.get('id')
@ -177,7 +177,7 @@ def update_test(test_info):
return _to_dict(test) return _to_dict(test)
def get_test_meta_key(test_id, key, default=None): def get_test_result_meta_key(test_id, key, default=None):
"""Get metadata value related to specified test run.""" """Get metadata value related to specified test run."""
session = get_session() session = get_session()
meta_item = session.query(models.TestMeta). \ meta_item = session.query(models.TestMeta). \
@ -188,7 +188,7 @@ def get_test_meta_key(test_id, key, default=None):
return value return value
def save_test_meta_item(test_id, key, value): def save_test_result_meta_item(test_id, key, value):
"""Store or update item value related to specified test run.""" """Store or update item value related to specified test run."""
session = get_session() session = get_session()
meta_item = (session.query(models.TestMeta) meta_item = (session.query(models.TestMeta)
@ -201,7 +201,7 @@ def save_test_meta_item(test_id, key, value):
meta_item.save(session) meta_item.save(session)
def delete_test_meta_item(test_id, key): def delete_test_result_meta_item(test_id, key):
"""Delete metadata item related to specified test run.""" """Delete metadata item related to specified test run."""
session = get_session() session = get_session()
meta_item = session.query(models.TestMeta). \ meta_item = session.query(models.TestMeta). \
@ -274,7 +274,7 @@ def _apply_filters_for_query(query, filters):
return query return query
def get_test_records(page, per_page, filters): def get_test_result_records(page, per_page, filters):
"""Get page with list of test records.""" """Get page with list of test records."""
session = get_session() session = get_session()
query = session.query(models.Test) query = session.query(models.Test)
@ -285,7 +285,7 @@ def get_test_records(page, per_page, filters):
return _to_dict(results) return _to_dict(results)
def get_test_records_count(filters): def get_test_result_records_count(filters):
"""Get total test records count.""" """Get total test records count."""
session = get_session() session = get_session()
query = session.query(models.Test.id) query = session.query(models.Test.id)

View File

@ -142,21 +142,21 @@ class TestResultsEndpoint(api.FunctionalTest):
self.assertEqual(403, put_response.status_code) self.assertEqual(403, put_response.status_code)
# Share the test run. # Share the test run.
db.save_test_meta_item(test_id, api_const.SHARED_TEST_RUN, True) db.save_test_result_meta_item(test_id, api_const.SHARED_TEST_RUN, True)
put_response = self.put_json(url, expect_errors=True, put_response = self.put_json(url, expect_errors=True,
params=json.dumps(body)) params=json.dumps(body))
self.assertEqual(403, put_response.status_code) self.assertEqual(403, put_response.status_code)
# Now associate guideline and target program. Now we should be # Now associate guideline and target program. Now we should be
# able to mark a test verified. # able to mark a test verified.
db.save_test_meta_item(test_id, 'target', 'platform') db.save_test_result_meta_item(test_id, 'target', 'platform')
db.save_test_meta_item(test_id, 'guideline', '2016.01.json') db.save_test_result_meta_item(test_id, 'guideline', '2016.01.json')
put_response = self.put_json(url, params=json.dumps(body)) put_response = self.put_json(url, params=json.dumps(body))
self.assertEqual(api_const.TEST_VERIFIED, self.assertEqual(api_const.TEST_VERIFIED,
put_response['verification_status']) put_response['verification_status'])
# Unshare the test, and check that we can mark it not verified. # Unshare the test, and check that we can mark it not verified.
db.delete_test_meta_item(test_id, api_const.SHARED_TEST_RUN) db.delete_test_result_meta_item(test_id, api_const.SHARED_TEST_RUN)
body = {'verification_status': api_const.TEST_NOT_VERIFIED} body = {'verification_status': api_const.TEST_NOT_VERIFIED}
put_response = self.put_json(url, params=json.dumps(body)) put_response = self.put_json(url, params=json.dumps(body))
self.assertEqual(api_const.TEST_NOT_VERIFIED, self.assertEqual(api_const.TEST_NOT_VERIFIED,
@ -368,8 +368,8 @@ class TestResultsEndpoint(api.FunctionalTest):
post_response = self.post_json('/v1/results', params=results) post_response = self.post_json('/v1/results', params=results)
test_id = post_response['test_id'] test_id = post_response['test_id']
test_info = {'id': test_id, 'product_version_id': version_id} test_info = {'id': test_id, 'product_version_id': version_id}
db.update_test(test_info) db.update_test_result(test_info)
db.save_test_meta_item(test_id, api_const.USER, 'test-open-id') db.save_test_result_meta_item(test_id, api_const.USER, 'test-open-id')
url = self.URL + '?page=1&product_id=' + product_id url = self.URL + '?page=1&product_id=' + product_id
@ -392,7 +392,7 @@ class TestResultsEndpoint(api.FunctionalTest):
self.assertFalse(response['results']) self.assertFalse(response['results'])
# Share the test run. # Share the test run.
db.save_test_meta_item(test_id, api_const.SHARED_TEST_RUN, 1) db.save_test_result_meta_item(test_id, api_const.SHARED_TEST_RUN, 1)
response = self.get_json(url) response = self.get_json(url)
self.assertEqual(1, len(response['results'])) self.assertEqual(1, len(response['results']))
self.assertEqual(test_id, response['results'][0]['id']) self.assertEqual(test_id, response['results'][0]['id'])
@ -407,12 +407,12 @@ class TestResultsEndpoint(api.FunctionalTest):
mock_check_owner.return_value = True mock_check_owner.return_value = True
# Test can't delete verified test run. # Test can't delete verified test run.
db.update_test({'id': test_id, 'verification_status': 1}) db.update_test_result({'id': test_id, 'verification_status': 1})
resp = self.delete(url, expect_errors=True) resp = self.delete(url, expect_errors=True)
self.assertEqual(403, resp.status_code) self.assertEqual(403, resp.status_code)
# Test can delete verified test run. # Test can delete verified test run.
db.update_test({'id': test_id, 'verification_status': 0}) db.update_test_result({'id': test_id, 'verification_status': 0})
resp = self.delete(url, expect_errors=True) resp = self.delete(url, expect_errors=True)
self.assertEqual(204, resp.status_code) self.assertEqual(204, resp.status_code)

View File

@ -80,17 +80,17 @@ class ResultsControllerTestCase(BaseControllerTestCase):
'api') 'api')
self.CONF.set_override('ui_url', self.ui_url) self.CONF.set_override('ui_url', self.ui_url)
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch('refstack.db.get_test_results') @mock.patch('refstack.db.get_test_results')
def test_get(self, mock_get_test_res, mock_get_test): def test_get(self, mock_get_test_results, mock_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_FOUNDATION self.mock_get_user_role.return_value = const.ROLE_FOUNDATION
test_info = {'created_at': 'bar', test_info = {'created_at': 'bar',
'duration_seconds': 999, 'duration_seconds': 999,
'meta': {'shared': 'true', 'user': 'fake-user'}} 'meta': {'shared': 'true', 'user': 'fake-user'}}
mock_get_test.return_value = test_info mock_get_test_result.return_value = test_info
mock_get_test_res.return_value = [{'name': 'test1'}, mock_get_test_results.return_value = [{'name': 'test1'},
{'name': 'test2'}] {'name': 'test2'}]
actual_result = self.controller.get_one('fake_arg') actual_result = self.controller.get_one('fake_arg')
# All meta should be exposed when user is a Foundation admin. # All meta should be exposed when user is a Foundation admin.
@ -103,29 +103,29 @@ class ResultsControllerTestCase(BaseControllerTestCase):
} }
self.assertEqual(expected_result, actual_result) self.assertEqual(expected_result, actual_result)
mock_get_test_res.assert_called_once_with('fake_arg') mock_get_test_results.assert_called_once_with('fake_arg')
# If not owner or Foundation admin, don't show all metadata. # If not owner or Foundation admin, don't show all metadata.
self.mock_get_user_role.return_value = const.ROLE_USER self.mock_get_user_role.return_value = const.ROLE_USER
mock_get_test.return_value = test_info mock_get_test_result.return_value = test_info
mock_get_test_res.return_value = [{'name': 'test1'}, mock_get_test_results.return_value = [{'name': 'test1'},
{'name': 'test2'}] {'name': 'test2'}]
actual_result = self.controller.get_one('fake_arg') actual_result = self.controller.get_one('fake_arg')
expected_result['meta'] = {'shared': 'true'} expected_result['meta'] = {'shared': 'true'}
expected_result['user_role'] = const.ROLE_USER expected_result['user_role'] = const.ROLE_USER
self.assertEqual(expected_result, actual_result) self.assertEqual(expected_result, actual_result)
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch('refstack.db.get_test_results') @mock.patch('refstack.db.get_test_results')
def test_get_for_owner(self, mock_get_test_res, mock_get_test): def test_get_for_owner(self, mock_get_test_results, mock_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
test_info = {'cpid': 'foo', test_info = {'cpid': 'foo',
'created_at': 'bar', 'created_at': 'bar',
'duration_seconds': 999} 'duration_seconds': 999}
mock_get_test.return_value = test_info mock_get_test_result.return_value = test_info
mock_get_test_res.return_value = [{'name': 'test1'}, mock_get_test_results.return_value = [{'name': 'test1'},
{'name': 'test2'}] {'name': 'test2'}]
actual_result = self.controller.get_one('fake_arg') actual_result = self.controller.get_one('fake_arg')
expected_result = { expected_result = {
@ -137,19 +137,19 @@ class ResultsControllerTestCase(BaseControllerTestCase):
} }
self.assertEqual(actual_result, expected_result) self.assertEqual(actual_result, expected_result)
mock_get_test_res.assert_called_once_with('fake_arg') mock_get_test_results.assert_called_once_with('fake_arg')
mock_get_test.assert_called_once_with( mock_get_test_result.assert_called_once_with(
'fake_arg', allowed_keys=['id', 'cpid', 'created_at', 'fake_arg', allowed_keys=['id', 'cpid', 'created_at',
'duration_seconds', 'meta', 'duration_seconds', 'meta',
'product_version', 'product_version',
'verification_status'] 'verification_status']
) )
@mock.patch('refstack.db.store_results') @mock.patch('refstack.db.store_test_results')
def test_post(self, mock_store_results): def test_post(self, mock_store_test_results):
self.mock_request.body = b'{"answer": 42}' self.mock_request.body = b'{"answer": 42}'
self.mock_request.headers = {} self.mock_request.headers = {}
mock_store_results.return_value = 'fake_test_id' mock_store_test_results.return_value = 'fake_test_id'
result = self.controller.post() result = self.controller.post()
self.assertEqual( self.assertEqual(
result, result,
@ -158,14 +158,14 @@ class ResultsControllerTestCase(BaseControllerTestCase):
self.test_results_url) % 'fake_test_id'} self.test_results_url) % 'fake_test_id'}
) )
self.assertEqual(self.mock_response.status, 201) self.assertEqual(self.mock_response.status, 201)
mock_store_results.assert_called_once_with({'answer': 42}) mock_store_test_results.assert_called_once_with({'answer': 42})
@mock.patch('refstack.api.utils.check_user_is_foundation_admin') @mock.patch('refstack.api.utils.check_user_is_foundation_admin')
@mock.patch('refstack.api.utils.check_user_is_product_admin') @mock.patch('refstack.api.utils.check_user_is_product_admin')
@mock.patch('refstack.db.get_product_version_by_cpid') @mock.patch('refstack.db.get_product_version_by_cpid')
@mock.patch('refstack.db.store_results') @mock.patch('refstack.db.store_test_results')
@mock.patch('refstack.db.get_pubkey') @mock.patch('refstack.db.get_pubkey')
def test_post_with_sign(self, mock_get_pubkey, mock_store_results, def test_post_with_sign(self, mock_get_pubkey, mock_store_test_results,
mock_get_version, mock_check, mock_foundation): mock_get_version, mock_check, mock_foundation):
self.mock_request.body = b'{"answer": 42, "cpid": "123"}' self.mock_request.body = b'{"answer": 42, "cpid": "123"}'
self.mock_request.headers = { self.mock_request.headers = {
@ -178,21 +178,21 @@ class ResultsControllerTestCase(BaseControllerTestCase):
'product_id': 'prod1'}] 'product_id': 'prod1'}]
mock_check.return_value = True mock_check.return_value = True
mock_foundation.return_value = False mock_foundation.return_value = False
mock_store_results.return_value = 'fake_test_id' mock_store_test_results.return_value = 'fake_test_id'
result = self.controller.post() result = self.controller.post()
self.assertEqual(result, self.assertEqual(result,
{'test_id': 'fake_test_id', {'test_id': 'fake_test_id',
'url': self.test_results_url % 'fake_test_id'}) 'url': self.test_results_url % 'fake_test_id'})
self.assertEqual(self.mock_response.status, 201) self.assertEqual(self.mock_response.status, 201)
mock_check.assert_called_once_with('prod1', 'fake_openid') mock_check.assert_called_once_with('prod1', 'fake_openid')
mock_store_results.assert_called_once_with( mock_store_test_results.assert_called_once_with(
{'answer': 42, 'cpid': '123', 'product_version_id': 'ver1', {'answer': 42, 'cpid': '123', 'product_version_id': 'ver1',
'meta': {const.USER: 'fake_openid'}} 'meta': {const.USER: 'fake_openid'}}
) )
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
def test_get_item_failed(self, mock_get_test): def test_get_item_failed(self, mock_get_test_result):
mock_get_test.return_value = None mock_get_test_result.return_value = None
self.assertRaises(webob.exc.HTTPError, self.assertRaises(webob.exc.HTTPError,
self.controller.get_one, self.controller.get_one,
'fake_id') 'fake_id')
@ -204,16 +204,16 @@ class ResultsControllerTestCase(BaseControllerTestCase):
self.assertRaises(api_exc.ParseInputsError, self.assertRaises(api_exc.ParseInputsError,
self.controller.get) self.controller.get)
@mock.patch('refstack.db.get_test_records_count') @mock.patch('refstack.db.get_test_result_records_count')
@mock.patch('refstack.api.utils.parse_input_params') @mock.patch('refstack.api.utils.parse_input_params')
def test_get_failed_in_get_test_records_number(self, def test_get_failed_in_get_test_result_records_number(self,
parse_inputs, parse_inputs,
db_get_count): db_get_count):
db_get_count.side_effect = api_exc.ParseInputsError() db_get_count.side_effect = api_exc.ParseInputsError()
self.assertRaises(api_exc.ParseInputsError, self.assertRaises(api_exc.ParseInputsError,
self.controller.get) self.controller.get)
@mock.patch('refstack.db.get_test_records_count') @mock.patch('refstack.db.get_test_result_records_count')
@mock.patch('refstack.api.utils.parse_input_params') @mock.patch('refstack.api.utils.parse_input_params')
@mock.patch('refstack.api.utils.get_page_number') @mock.patch('refstack.api.utils.get_page_number')
def test_get_failed_in_get_page_number(self, def test_get_failed_in_get_page_number(self,
@ -225,32 +225,32 @@ class ResultsControllerTestCase(BaseControllerTestCase):
self.assertRaises(api_exc.ParseInputsError, self.assertRaises(api_exc.ParseInputsError,
self.controller.get) self.controller.get)
@mock.patch('refstack.db.get_test_records') @mock.patch('refstack.db.get_test_result_records')
@mock.patch('refstack.db.get_test_records_count') @mock.patch('refstack.db.get_test_result_records_count')
@mock.patch('refstack.api.utils.parse_input_params') @mock.patch('refstack.api.utils.parse_input_params')
@mock.patch('refstack.api.utils.get_page_number') @mock.patch('refstack.api.utils.get_page_number')
def test_get_failed_in_get_test_records(self, def test_get_failed_in_get_test_result_records(self,
get_page, get_page,
parce_input, parce_input,
db_get_count, db_get_count,
db_get_test): db_get_test_result):
get_page.return_value = (mock.Mock(), mock.Mock()) get_page.return_value = (mock.Mock(), mock.Mock())
db_get_test.side_effect = Exception() db_get_test_result.side_effect = Exception()
self.assertRaises(webob.exc.HTTPError, self.assertRaises(webob.exc.HTTPError,
self.controller.get) self.controller.get)
@mock.patch('refstack.api.utils.check_owner') @mock.patch('refstack.api.utils.check_owner')
@mock.patch('refstack.api.utils.check_user_is_foundation_admin') @mock.patch('refstack.api.utils.check_user_is_foundation_admin')
@mock.patch('refstack.db.get_test_records') @mock.patch('refstack.db.get_test_result_records')
@mock.patch('refstack.db.get_test_records_count') @mock.patch('refstack.db.get_test_result_records_count')
@mock.patch('refstack.api.utils.get_page_number') @mock.patch('refstack.api.utils.get_page_number')
@mock.patch('refstack.api.utils.parse_input_params') @mock.patch('refstack.api.utils.parse_input_params')
def test_get_success(self, def test_get_success(self,
parse_input, parse_input,
get_page, get_page,
get_test_count, get_test_result_count,
db_get_test, db_get_test_result,
check_foundation, check_foundation,
check_owner): check_owner):
@ -266,7 +266,7 @@ class ResultsControllerTestCase(BaseControllerTestCase):
total_pages_number = 10 total_pages_number = 10
per_page = 5 per_page = 5
records_count = 50 records_count = 50
get_test_count.return_value = records_count get_test_result_count.return_value = records_count
get_page.return_value = (page_number, total_pages_number) get_page.return_value = (page_number, total_pages_number)
check_foundation.return_value = False check_foundation.return_value = False
check_owner.return_value = True check_owner.return_value = True
@ -278,7 +278,7 @@ class ResultsControllerTestCase(BaseControllerTestCase):
expected_record = record.copy() expected_record = record.copy()
expected_record['url'] = self.test_results_url % record['id'] expected_record['url'] = self.test_results_url % record['id']
db_get_test.return_value = [record] db_get_test_result.return_value = [record]
expected_result = { expected_result = {
'results': [expected_record], 'results': [expected_record],
'pagination': { 'pagination': {
@ -293,22 +293,23 @@ class ResultsControllerTestCase(BaseControllerTestCase):
parse_input.assert_called_once_with(expected_input_params) parse_input.assert_called_once_with(expected_input_params)
filters = parse_input.return_value filters = parse_input.return_value
get_test_count.assert_called_once_with(filters) get_test_result_count.assert_called_once_with(filters)
get_page.assert_called_once_with(records_count) get_page.assert_called_once_with(records_count)
db_get_test.assert_called_once_with(page_number, per_page, filters) db_get_test_result.assert_called_once_with(
page_number, per_page, filters)
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch('refstack.db.delete_test') @mock.patch('refstack.db.delete_test_result')
def test_delete(self, mock_db_delete, mock_get_test): def test_delete(self, mock_db_delete, mock_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
self.controller.delete('test_id') self.controller.delete('test_id')
self.assertEqual(204, self.mock_response.status) self.assertEqual(204, self.mock_response.status)
# Verified test deletion attempt should raise error. # Verified test deletion attempt should raise error.
mock_get_test.return_value = {'verification_status': mock_get_test_result.return_value = {'verification_status':
const.TEST_VERIFIED} const.TEST_VERIFIED}
self.assertRaises(webob.exc.HTTPError, self.assertRaises(webob.exc.HTTPError,
self.controller.delete, 'test_id') self.controller.delete, 'test_id')
@ -614,14 +615,14 @@ class MetadataControllerTestCase(BaseControllerTestCase):
super(MetadataControllerTestCase, self).setUp() super(MetadataControllerTestCase, self).setUp()
self.controller = results.MetadataController() self.controller = results.MetadataController()
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
def test_get(self, mock_db_get_test): def test_get(self, mock_db_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_USER self.mock_get_user_role.return_value = const.ROLE_USER
mock_db_get_test.return_value = {'meta': {'shared': 'true', mock_db_get_test_result.return_value = {'meta': {'shared': 'true',
'user': 'fake-user'}} 'user': 'fake-user'}}
# Only the key 'shared' should be allowed through. # Only the key 'shared' should be allowed through.
self.assertEqual({'shared': 'true'}, self.controller.get('test_id')) self.assertEqual({'shared': 'true'}, self.controller.get('test_id'))
mock_db_get_test.assert_called_once_with('test_id') mock_db_get_test_result.assert_called_once_with('test_id')
# Test that the result owner can see all metadata keys. # Test that the result owner can see all metadata keys.
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
@ -633,8 +634,8 @@ class MetadataControllerTestCase(BaseControllerTestCase):
self.assertEqual({'shared': 'true', 'user': 'fake-user'}, self.assertEqual({'shared': 'true', 'user': 'fake-user'},
self.controller.get('test_id')) self.controller.get('test_id'))
@mock.patch('refstack.db.get_test_meta_key') @mock.patch('refstack.db.get_test_result_meta_key')
def test_get_one(self, mock_db_get_test_meta_key): def test_get_one(self, mock_db_get_test_result_meta_key):
self.mock_get_user_role.return_value = const.ROLE_USER self.mock_get_user_role.return_value = const.ROLE_USER
# Test when key is not an allowed key. # Test when key is not an allowed key.
@ -642,9 +643,10 @@ class MetadataControllerTestCase(BaseControllerTestCase):
self.controller.get_one, 'test_id', 'answer') self.controller.get_one, 'test_id', 'answer')
# Test when key is an allowed key. # Test when key is an allowed key.
mock_db_get_test_meta_key.return_value = 42 mock_db_get_test_result_meta_key.return_value = 42
self.assertEqual(42, self.controller.get_one('test_id', 'shared')) self.assertEqual(42, self.controller.get_one('test_id', 'shared'))
mock_db_get_test_meta_key.assert_called_once_with('test_id', 'shared') mock_db_get_test_result_meta_key.assert_called_once_with(
'test_id', 'shared')
# Test when the user owns the test result. # Test when the user owns the test result.
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
@ -654,18 +656,18 @@ class MetadataControllerTestCase(BaseControllerTestCase):
self.mock_get_user_role.return_value = const.ROLE_FOUNDATION self.mock_get_user_role.return_value = const.ROLE_FOUNDATION
self.assertEqual(42, self.controller.get_one('test_id', 'user')) self.assertEqual(42, self.controller.get_one('test_id', 'user'))
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch('refstack.db.save_test_meta_item') @mock.patch('refstack.db.save_test_result_meta_item')
def test_post(self, mock_save_test_meta_item, mock_get_test): def test_post(self, mock_save_test_result_meta_item, mock_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
mock_get_test.return_value = { mock_get_test_result.return_value = {
'verification_status': const.TEST_NOT_VERIFIED 'verification_status': const.TEST_NOT_VERIFIED
} }
# Test trying to post a valid key. # Test trying to post a valid key.
self.controller.post('test_id', 'shared') self.controller.post('test_id', 'shared')
self.assertEqual(201, self.mock_response.status) self.assertEqual(201, self.mock_response.status)
mock_save_test_meta_item.assert_called_once_with( mock_save_test_result_meta_item.assert_called_once_with(
'test_id', 'shared', self.mock_request.body) 'test_id', 'shared', self.mock_request.body)
# Test trying to post an invalid key. # Test trying to post an invalid key.
@ -678,16 +680,18 @@ class MetadataControllerTestCase(BaseControllerTestCase):
self.assertRaises(webob.exc.HTTPError, self.assertRaises(webob.exc.HTTPError,
self.controller.post, 'test_id', 'shared') self.controller.post, 'test_id', 'shared')
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch('refstack.db.delete_test_meta_item') @mock.patch('refstack.db.delete_test_result_meta_item')
def test_delete(self, mock_delete_test_meta_item, mock_get_test): def test_delete(self, mock_delete_test_result_meta_item,
mock_get_test_result):
self.mock_get_user_role.return_value = const.ROLE_OWNER self.mock_get_user_role.return_value = const.ROLE_OWNER
mock_get_test.return_value = { mock_get_test_result.return_value = {
'verification_status': const.TEST_NOT_VERIFIED 'verification_status': const.TEST_NOT_VERIFIED
} }
self.controller.delete('test_id', 'shared') self.controller.delete('test_id', 'shared')
self.assertEqual(204, self.mock_response.status) self.assertEqual(204, self.mock_response.status)
mock_delete_test_meta_item.assert_called_once_with('test_id', 'shared') mock_delete_test_result_meta_item.assert_called_once_with(
'test_id', 'shared')
# The key 'user' is not a valid key that can be deleted. # The key 'user' is not a valid key that can be deleted.
self.assertRaises(webob.exc.HTTPError, self.assertRaises(webob.exc.HTTPError,

View File

@ -364,26 +364,26 @@ class APIUtilsTestCase(base.BaseTestCase):
@mock.patch('refstack.api.utils.check_user_is_foundation_admin') @mock.patch('refstack.api.utils.check_user_is_foundation_admin')
@mock.patch('pecan.abort', side_effect=exc.HTTPError) @mock.patch('pecan.abort', side_effect=exc.HTTPError)
@mock.patch('refstack.db.get_test_meta_key') @mock.patch('refstack.db.get_test_result_meta_key')
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch.object(api_utils, 'is_authenticated') @mock.patch.object(api_utils, 'is_authenticated')
@mock.patch.object(api_utils, 'get_user_id') @mock.patch.object(api_utils, 'get_user_id')
def test_check_get_user_role(self, mock_get_user_id, def test_check_get_user_role(self, mock_get_user_id,
mock_is_authenticated, mock_is_authenticated,
mock_get_test, mock_get_test_result,
mock_get_test_meta_key, mock_get_test_result_meta_key,
mock_pecan_abort, mock_pecan_abort,
mock_check_foundation): mock_check_foundation):
# Check user level # Check user level
mock_check_foundation.return_value = False mock_check_foundation.return_value = False
mock_get_test_meta_key.return_value = None mock_get_test_result_meta_key.return_value = None
mock_get_test.return_value = {} mock_get_test_result.return_value = {}
self.assertEqual(const.ROLE_USER, api_utils.get_user_role('fake_test')) self.assertEqual(const.ROLE_USER, api_utils.get_user_role('fake_test'))
api_utils.enforce_permissions('fake_test', const.ROLE_USER) api_utils.enforce_permissions('fake_test', const.ROLE_USER)
self.assertRaises(exc.HTTPError, api_utils.enforce_permissions, self.assertRaises(exc.HTTPError, api_utils.enforce_permissions,
'fake_test', const.ROLE_OWNER) 'fake_test', const.ROLE_OWNER)
mock_get_test_meta_key.side_effect = { mock_get_test_result_meta_key.side_effect = {
('fake_test', const.USER): 'fake_openid', ('fake_test', const.USER): 'fake_openid',
('fake_test', const.SHARED_TEST_RUN): 'true', ('fake_test', const.SHARED_TEST_RUN): 'true',
}.get }.get
@ -394,7 +394,7 @@ class APIUtilsTestCase(base.BaseTestCase):
mock_is_authenticated.return_value = True mock_is_authenticated.return_value = True
mock_get_user_id.return_value = 'fake_openid' mock_get_user_id.return_value = 'fake_openid'
mock_get_test_meta_key.side_effect = { mock_get_test_result_meta_key.side_effect = {
('fake_test', const.USER): 'fake_openid', ('fake_test', const.USER): 'fake_openid',
('fake_test', const.SHARED_TEST_RUN): 'true', ('fake_test', const.SHARED_TEST_RUN): 'true',
}.get }.get
@ -406,7 +406,7 @@ class APIUtilsTestCase(base.BaseTestCase):
# Check owner level # Check owner level
mock_is_authenticated.return_value = True mock_is_authenticated.return_value = True
mock_get_user_id.return_value = 'fake_openid' mock_get_user_id.return_value = 'fake_openid'
mock_get_test_meta_key.side_effect = lambda *args: { mock_get_test_result_meta_key.side_effect = lambda *args: {
('fake_test', const.USER): 'fake_openid', ('fake_test', const.USER): 'fake_openid',
('fake_test', const.SHARED_TEST_RUN): None, ('fake_test', const.SHARED_TEST_RUN): None,
}.get(args) }.get(args)
@ -417,7 +417,7 @@ class APIUtilsTestCase(base.BaseTestCase):
# Check negative cases # Check negative cases
mock_is_authenticated.return_value = False mock_is_authenticated.return_value = False
mock_get_test_meta_key.side_effect = lambda *args: { mock_get_test_result_meta_key.side_effect = lambda *args: {
('fake_test', const.USER): 'fake_openid', ('fake_test', const.USER): 'fake_openid',
('fake_test', const.SHARED_TEST_RUN): None, ('fake_test', const.SHARED_TEST_RUN): None,
}.get(args) }.get(args)
@ -428,7 +428,7 @@ class APIUtilsTestCase(base.BaseTestCase):
mock_is_authenticated.return_value = True mock_is_authenticated.return_value = True
mock_get_user_id.return_value = 'fake_openid' mock_get_user_id.return_value = 'fake_openid'
mock_get_test_meta_key.side_effect = lambda *args: { mock_get_test_result_meta_key.side_effect = lambda *args: {
('fake_test', const.USER): 'some_other_user', ('fake_test', const.USER): 'some_other_user',
('fake_test', const.SHARED_TEST_RUN): None, ('fake_test', const.SHARED_TEST_RUN): None,
}.get(args) }.get(args)
@ -440,14 +440,14 @@ class APIUtilsTestCase(base.BaseTestCase):
@mock.patch('refstack.api.utils.check_user_is_foundation_admin') @mock.patch('refstack.api.utils.check_user_is_foundation_admin')
@mock.patch('pecan.abort', side_effect=exc.HTTPError) @mock.patch('pecan.abort', side_effect=exc.HTTPError)
@mock.patch('refstack.db.get_test_meta_key') @mock.patch('refstack.db.get_test_result_meta_key')
@mock.patch('refstack.db.get_test') @mock.patch('refstack.db.get_test_result')
@mock.patch.object(api_utils, 'is_authenticated') @mock.patch.object(api_utils, 'is_authenticated')
@mock.patch.object(api_utils, 'get_user_id') @mock.patch.object(api_utils, 'get_user_id')
def test_check_permissions(self, mock_get_user_id, def test_check_permissions(self, mock_get_user_id,
mock_is_authenticated, mock_is_authenticated,
mock_get_test, mock_get_test_result,
mock_get_test_meta_key, mock_get_test_result_meta_key,
mock_pecan_abort, mock_pecan_abort,
mock_foundation_check): mock_foundation_check):
@ -471,8 +471,8 @@ class APIUtilsTestCase(base.BaseTestCase):
private_test = 'fake_test' private_test = 'fake_test'
mock_get_user_id.return_value = 'fake_openid' mock_get_user_id.return_value = 'fake_openid'
mock_get_test.return_value = {} mock_get_test_result.return_value = {}
mock_get_test_meta_key.side_effect = lambda *args: { mock_get_test_result_meta_key.side_effect = lambda *args: {
(public_test, const.USER): None, (public_test, const.USER): None,
(private_test, const.USER): 'fake_openid', (private_test, const.USER): 'fake_openid',
(private_test, const.SHARED_TEST_RUN): None, (private_test, const.SHARED_TEST_RUN): None,

View File

@ -32,31 +32,31 @@ from refstack.db.sqlalchemy import models
class DBAPITestCase(base.BaseTestCase): class DBAPITestCase(base.BaseTestCase):
"""Test case for database API.""" """Test case for database API."""
@mock.patch.object(api, 'store_results') @mock.patch.object(api, 'store_test_results')
def test_store_results(self, mock_store_results): def test_store_test_results(self, mock_store_test_results):
db.store_results('fake_results') db.store_test_results('fake_results')
mock_store_results.assert_called_once_with('fake_results') mock_store_test_results.assert_called_once_with('fake_results')
@mock.patch.object(api, 'get_test') @mock.patch.object(api, 'get_test_result')
def test_get_test(self, mock_get_test): def test_get_test_result(self, mock_get_test_result):
db.get_test(12345) db.get_test_result(12345)
mock_get_test.assert_called_once_with(12345, allowed_keys=None) mock_get_test_result.assert_called_once_with(12345, allowed_keys=None)
@mock.patch.object(api, 'get_test_results') @mock.patch.object(api, 'get_test_results')
def test_get_test_results(self, mock_get_test_results): def test_get_test_results(self, mock_get_test_results):
db.get_test_results(12345) db.get_test_results(12345)
mock_get_test_results.assert_called_once_with(12345) mock_get_test_results.assert_called_once_with(12345)
@mock.patch.object(api, 'get_test_records') @mock.patch.object(api, 'get_test_result_records')
def test_get_test_records(self, mock_db): def test_get_test_result_records(self, mock_db):
filters = mock.Mock() filters = mock.Mock()
db.get_test_records(1, 2, filters) db.get_test_result_records(1, 2, filters)
mock_db.assert_called_once_with(1, 2, filters) mock_db.assert_called_once_with(1, 2, filters)
@mock.patch.object(api, 'get_test_records_count') @mock.patch.object(api, 'get_test_result_records_count')
def test_get_test_records_count(self, mock_db): def test_get_test_result_records_count(self, mock_db):
filters = mock.Mock() filters = mock.Mock()
db.get_test_records_count(filters) db.get_test_result_records_count(filters)
mock_db.assert_called_once_with(filters) mock_db.assert_called_once_with(filters)
@mock.patch.object(api, 'user_get') @mock.patch.object(api, 'user_get')
@ -161,8 +161,8 @@ class DBBackendTestCase(base.BaseTestCase):
@mock.patch('refstack.db.sqlalchemy.models.Test') @mock.patch('refstack.db.sqlalchemy.models.Test')
@mock.patch('refstack.db.sqlalchemy.models.TestMeta') @mock.patch('refstack.db.sqlalchemy.models.TestMeta')
@mock.patch('uuid.uuid4') @mock.patch('uuid.uuid4')
def test_store_results(self, mock_uuid, mock_test_meta, mock_test, def test_store_test_results(self, mock_uuid, mock_test_meta, mock_test,
mock_test_result, mock_get_session): mock_test_result, mock_get_session):
fake_tests_result = { fake_tests_result = {
'cpid': 'foo', 'cpid': 'foo',
'duration_seconds': 10, 'duration_seconds': 10,
@ -184,7 +184,7 @@ class DBBackendTestCase(base.BaseTestCase):
test_result = mock_test_result.return_value test_result = mock_test_result.return_value
test_result.save = mock.Mock() test_result.save = mock.Mock()
test_id = api.store_results(fake_tests_result) test_id = api.store_test_results(fake_tests_result)
mock_test.assert_called_once_with() mock_test.assert_called_once_with()
mock_get_session.assert_called_once_with() mock_get_session.assert_called_once_with()
@ -201,7 +201,7 @@ class DBBackendTestCase(base.BaseTestCase):
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
@mock.patch('refstack.db.sqlalchemy.models.Test') @mock.patch('refstack.db.sqlalchemy.models.Test')
@mock.patch.object(api, '_to_dict', side_effect=lambda x, *args: x) @mock.patch.object(api, '_to_dict', side_effect=lambda x, *args: x)
def test_get_test(self, mock_to_dict, mock_test, mock_get_session): def test_get_test_result(self, mock_to_dict, mock_test, mock_get_session):
session = mock_get_session.return_value session = mock_get_session.return_value
session.query = mock.Mock() session.query = mock.Mock()
query = session.query.return_value query = session.query.return_value
@ -210,7 +210,7 @@ class DBBackendTestCase(base.BaseTestCase):
mock_result = 'fake_test_info' mock_result = 'fake_test_info'
filter_by.first = mock.Mock(return_value=mock_result) filter_by.first = mock.Mock(return_value=mock_result)
test_id = 'fake_id' test_id = 'fake_id'
actual_result = api.get_test(test_id) actual_result = api.get_test_result(test_id)
mock_get_session.assert_called_once_with() mock_get_session.assert_called_once_with()
session.query.assert_called_once_with(mock_test) session.query.assert_called_once_with(mock_test)
@ -222,11 +222,11 @@ class DBBackendTestCase(base.BaseTestCase):
session.query = mock.Mock() session.query = mock.Mock()
query = session.query.return_value query = session.query.return_value
query.filter_by.return_value.first.return_value = None query.filter_by.return_value.first.return_value = None
self.assertRaises(api.NotFound, api.get_test, 'fake_id') self.assertRaises(api.NotFound, api.get_test_result, 'fake_id')
@mock.patch('refstack.db.sqlalchemy.api.models') @mock.patch('refstack.db.sqlalchemy.api.models')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
def test_delete_test(self, mock_get_session, mock_models): def test_delete_test_result(self, mock_get_session, mock_models):
session = mock_get_session.return_value session = mock_get_session.return_value
test_query = mock.Mock() test_query = mock.Mock()
test_meta_query = mock.Mock() test_meta_query = mock.Mock()
@ -236,7 +236,7 @@ class DBBackendTestCase(base.BaseTestCase):
mock_models.TestMeta: test_meta_query, mock_models.TestMeta: test_meta_query,
mock_models.TestResults: test_results_query mock_models.TestResults: test_results_query
}.get) }.get)
db.delete_test('fake_id') db.delete_test_result('fake_id')
session.begin.assert_called_once_with() session.begin.assert_called_once_with()
test_query.filter_by.return_value.first\ test_query.filter_by.return_value.first\
.assert_called_once_with() .assert_called_once_with()
@ -252,18 +252,18 @@ class DBBackendTestCase(base.BaseTestCase):
session.query.return_value\ session.query.return_value\
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = None .first.return_value = None
self.assertRaises(api.NotFound, db.delete_test, 'fake_id') self.assertRaises(api.NotFound, db.delete_test_result, 'fake_id')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
@mock.patch.object(api, '_to_dict', side_effect=lambda x: x) @mock.patch.object(api, '_to_dict', side_effect=lambda x: x)
def test_update_test(self, mock_to_dict, mock_get_session): def test_update_test_result(self, mock_to_dict, mock_get_session):
session = mock_get_session.return_value session = mock_get_session.return_value
mock_test = mock.Mock() mock_test = mock.Mock()
session.query.return_value.filter_by.return_value\ session.query.return_value.filter_by.return_value\
.first.return_value = mock_test .first.return_value = mock_test
test_info = {'product_version_id': '123'} test_info = {'product_version_id': '123'}
api.update_test(test_info) api.update_test_result(test_info)
mock_get_session.assert_called_once_with() mock_get_session.assert_called_once_with()
mock_test.save.assert_called_once_with(session=session) mock_test.save.assert_called_once_with(session=session)
@ -271,29 +271,31 @@ class DBBackendTestCase(base.BaseTestCase):
@mock.patch('refstack.db.sqlalchemy.api.models') @mock.patch('refstack.db.sqlalchemy.api.models')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
def test_get_test_meta_key(self, mock_get_session, mock_models): def test_get_test_result_meta_key(self, mock_get_session, mock_models):
session = mock_get_session.return_value session = mock_get_session.return_value
session.query.return_value\ session.query.return_value\
.filter_by.return_value\ .filter_by.return_value\
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = mock.Mock(value=42) .first.return_value = mock.Mock(value=42)
self.assertEqual(42, db.get_test_meta_key('fake_id', 'fake_key')) self.assertEqual(
42, db.get_test_result_meta_key('fake_id', 'fake_key'))
session.query.return_value\ session.query.return_value\
.filter_by.return_value\ .filter_by.return_value\
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = None .first.return_value = None
self.assertEqual(24, db.get_test_meta_key('fake_id', 'fake_key', 24)) self.assertEqual(24, db.get_test_result_meta_key(
'fake_id', 'fake_key', 24))
@mock.patch('refstack.db.sqlalchemy.api.models') @mock.patch('refstack.db.sqlalchemy.api.models')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
def test_save_test_meta_item(self, mock_get_session, mock_models): def test_save_test_result_meta_item(self, mock_get_session, mock_models):
session = mock_get_session.return_value session = mock_get_session.return_value
mock_meta_item = mock.Mock() mock_meta_item = mock.Mock()
session.query.return_value\ session.query.return_value\
.filter_by.return_value\ .filter_by.return_value\
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = mock_meta_item .first.return_value = mock_meta_item
db.save_test_meta_item('fake_id', 'fake_key', 42) db.save_test_result_meta_item('fake_id', 'fake_key', 42)
self.assertEqual('fake_id', mock_meta_item.test_id) self.assertEqual('fake_id', mock_meta_item.test_id)
self.assertEqual('fake_key', mock_meta_item.meta_key) self.assertEqual('fake_key', mock_meta_item.meta_key)
self.assertEqual(42, mock_meta_item.value) self.assertEqual(42, mock_meta_item.value)
@ -306,21 +308,21 @@ class DBBackendTestCase(base.BaseTestCase):
.first.return_value = None .first.return_value = None
mock_meta_item = mock.Mock() mock_meta_item = mock.Mock()
mock_models.TestMeta.return_value = mock_meta_item mock_models.TestMeta.return_value = mock_meta_item
db.save_test_meta_item('fake_id', 'fake_key', 42) db.save_test_result_meta_item('fake_id', 'fake_key', 42)
self.assertEqual('fake_id', mock_meta_item.test_id) self.assertEqual('fake_id', mock_meta_item.test_id)
self.assertEqual('fake_key', mock_meta_item.meta_key) self.assertEqual('fake_key', mock_meta_item.meta_key)
self.assertEqual(42, mock_meta_item.value) self.assertEqual(42, mock_meta_item.value)
@mock.patch('refstack.db.sqlalchemy.api.models') @mock.patch('refstack.db.sqlalchemy.api.models')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
def test_delete_test_meta_item(self, mock_get_session, mock_models): def test_delete_test_result_meta_item(self, mock_get_session, mock_models):
session = mock_get_session.return_value session = mock_get_session.return_value
mock_meta_item = mock.Mock() mock_meta_item = mock.Mock()
session.query.return_value\ session.query.return_value\
.filter_by.return_value\ .filter_by.return_value\
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = mock_meta_item .first.return_value = mock_meta_item
db.delete_test_meta_item('fake_id', 'fake_key') db.delete_test_result_meta_item('fake_id', 'fake_key')
session.begin.assert_called_once_with() session.begin.assert_called_once_with()
session.delete.assert_called_once_with(mock_meta_item) session.delete.assert_called_once_with(mock_meta_item)
@ -329,7 +331,8 @@ class DBBackendTestCase(base.BaseTestCase):
.filter_by.return_value\ .filter_by.return_value\
.first.return_value = None .first.return_value = None
self.assertRaises(db.NotFound, self.assertRaises(db.NotFound,
db.delete_test_meta_item, 'fake_id', 'fake_key') db.delete_test_result_meta_item,
'fake_id', 'fake_key')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
@mock.patch('refstack.db.sqlalchemy.models.TestResults') @mock.patch('refstack.db.sqlalchemy.models.TestResults')
@ -446,9 +449,9 @@ class DBBackendTestCase(base.BaseTestCase):
@mock.patch.object(api, '_apply_filters_for_query') @mock.patch.object(api, '_apply_filters_for_query')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
@mock.patch('refstack.db.sqlalchemy.models.Test') @mock.patch('refstack.db.sqlalchemy.models.Test')
def test_get_test_records(self, mock_model, def test_get_test_result_records(self, mock_model,
mock_get_session, mock_get_session,
mock_apply): mock_apply):
per_page = 9000 per_page = 9000
filters = { filters = {
@ -464,7 +467,7 @@ class DBBackendTestCase(base.BaseTestCase):
query_with_offset = ordered_query.offset.return_value query_with_offset = ordered_query.offset.return_value
query_with_offset.limit.return_value.all.return_value = 'fake_uploads' query_with_offset.limit.return_value.all.return_value = 'fake_uploads'
result = api.get_test_records(2, per_page, filters) result = api.get_test_result_records(2, per_page, filters)
mock_get_session.assert_called_once_with() mock_get_session.assert_called_once_with()
session.query.assert_called_once_with(mock_model) session.query.assert_called_once_with(mock_model)
@ -479,9 +482,9 @@ class DBBackendTestCase(base.BaseTestCase):
@mock.patch.object(api, '_apply_filters_for_query') @mock.patch.object(api, '_apply_filters_for_query')
@mock.patch.object(api, 'get_session') @mock.patch.object(api, 'get_session')
@mock.patch('refstack.db.sqlalchemy.models.Test') @mock.patch('refstack.db.sqlalchemy.models.Test')
def test_get_test_records_count(self, mock_model, def test_get_test_result_records_count(self, mock_model,
mock_get_session, mock_get_session,
mock_apply): mock_apply):
filters = mock.Mock() filters = mock.Mock()
session = mock_get_session.return_value session = mock_get_session.return_value
@ -489,7 +492,7 @@ class DBBackendTestCase(base.BaseTestCase):
apply_result = mock_apply.return_value apply_result = mock_apply.return_value
apply_result.count.return_value = 999 apply_result.count.return_value = 999
result = api.get_test_records_count(filters) result = api.get_test_result_records_count(filters)
self.assertEqual(result, 999) self.assertEqual(result, 999)
session.query.assert_called_once_with(mock_model.id) session.query.assert_called_once_with(mock_model.id)