From ffe419bf63938be76af7e57ee782ae928a7391f7 Mon Sep 17 00:00:00 2001 From: grakiss Date: Mon, 20 Nov 2017 07:45:40 +0000 Subject: [cvp-web] Admin can approve and not approve results JIRA: DOVETAIL-562 According to the CVP workflow, once a result has been submitted to review, the admin will send email to all reviewers to get the comment (+1 / -1). Enable admin to approve/not approve the result after he gets the feedback from all reviewers. Otherwise, the result will always be in 'review' status. Change-Id: Ic3ace3c7284c70e9a8186d03e6cd88c91ecc76f9 Signed-off-by: grakiss --- cvp/opnfv_testapi/resources/test_handlers.py | 38 ++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'cvp/opnfv_testapi') diff --git a/cvp/opnfv_testapi/resources/test_handlers.py b/cvp/opnfv_testapi/resources/test_handlers.py index 2baa2943..161585ef 100644 --- a/cvp/opnfv_testapi/resources/test_handlers.py +++ b/cvp/opnfv_testapi/resources/test_handlers.py @@ -188,21 +188,49 @@ class TestsGURHandler(GenericTestHandler): query = {'_id': objectid.ObjectId(_id)} db_keys = ['_id', ] + + test = yield dbapi.db_find_one("tests", query) + if not test: + msg = 'Record does not exist' + self.finish_request({'code': 404, 'msg': msg}) + return + curr_user = self.get_secure_cookie(auth_const.OPENID) - if item in {"shared", "label", "status"}: + if item in {"shared", "label"}: query['owner'] = curr_user db_keys.append('owner') - if item == "status" and value == "review": - test = yield dbapi.db_find_one("tests", query) - if test: + if item == "status": + if value in {'approved', 'not approved'}: + if test['status'] == 'private': + msg = 'Not allowed to approve/not approve' + self.finish_request({'code': 403, 'msg': msg}) + return + + user = yield dbapi.db_find_one("users", {'openid': curr_user}) + if 'administrator' not in user['role']: + msg = 'No permission to operate' + self.finish_request({'code': 403, 'msg': msg}) + return + elif value == 'review': + if test['status'] != 'private': + msg = 'Not allowed to submit to review' + self.finish_request({'code': 403, 'msg': msg}) + return + + query['owner'] = curr_user + db_keys.append('owner') + test_query = {'id': test['id'], 'status': 'review'} record = yield dbapi.db_find_one("tests", test_query) if record: - msg = ('{} has already submitted one record with the same' + msg = ('{} has already submitted one record with the same ' 'Test ID: {}'.format(record['owner'], test['id'])) self.finish_request({'code': 403, 'msg': msg}) return + else: + query['owner'] = curr_user + db_keys.append('owner') logging.debug("before _update 2") self._update(query=query, db_keys=db_keys) -- cgit 1.2.3-korg