def test_review_sections_de_registration(flask_app, db): # pylint: disable=unused-argument """Verify that the api returns correct information of sections.""" # de-registration test reviewer_id = 'section-rev-1-0' reviewer_name = 'section rev0' dereg_data = { 'file': 'de-reg-test-file', 'device_count': 1, 'user_id': 'assign-rev-user-1', 'user_name': 'assign rev user 1', 'reason': 'because we have to run tests successfully' } request = create_assigned_dummy_request(dereg_data, 'De-Registration', reviewer_id, reviewer_name) assert request request_id = request.id reviewer_id = 'section-rev-2' reviewer_name = 'section rev 2' section = 'device_description' status = 7 comment = 'this is a test comment' DeRegDetails.add_comment(section, comment, reviewer_id, reviewer_name, status, request_id) rv = flask_app.get( '{0}?request_id={1}&request_type=de_registration_request'.format( SECTIONS_API, request_id)) assert rv.status_code == 200 data = json.loads(rv.data.decode('utf-8'))['sections'] for sect in data: if sect.get('comments'): assert sect.get('section_type') == section assert sect.get('section_status') == status sect_comment = sect.get('comments')[0] assert sect_comment.get('user_name') == reviewer_name assert sect_comment.get('user_id') == reviewer_id assert sect_comment.get('comment') == comment assert sect_comment.get('datetime') else: assert sect.get('section_type') in [ 'device_description', 'imei_classification', 'imei_registration', 'approval_documents' ] assert sect.get('comments') is None assert sect.get('section_status') is None
def auto_approve(task_id, reg_details): # TODO: Need to remove duplicated session which throws warning from app.api.v1.resources.reviewer import SubmitReview from app.api.v1.models.devicequota import DeviceQuota as DeviceQuotaModel from app.api.v1.models.status import Status from app.api.v1.models.eslog import EsLog import json sr = SubmitReview() try: result = Utilities.check_request_status(task_id) section_status = 6 sections_comment = "Auto" auto_approved_sections = [ 'device_quota', 'device_description', 'imei_classification', 'imei_registration' ] if result: if result['non_compliant'] != 0 or result['stolen'] != 0 or result['compliant_active'] != 0 \ or result['provisional_non_compliant'] != 0: sections_comment = sections_comment + ' Rejected, Device/s found in Non-Compliant State' status = 'Rejected' section_status = 7 message = 'Your request {id} has been rejected because Non-Compliant Device Found in it.'.format( id=reg_details.id) else: sections_comment = sections_comment + ' Approved' status = 'Approved' message = 'Your request {id} has been Approved'.format( id=reg_details.id) if status == 'Approved': # checkout device quota imeis = DeRegDetails.get_normalized_imeis(reg_details) user_quota = DeviceQuotaModel.get(reg_details.user_id) current_quota = user_quota.reg_quota user_quota.reg_quota = current_quota - len(imeis) DeviceQuotaModel.commit_quota_changes(user_quota) imeis = DeRegDetails.get_normalized_imeis(reg_details) Utilities.de_register_imeis(imeis) for section in auto_approved_sections: DeRegDetails.add_comment(section, sections_comment, reg_details.user_id, 'Auto Reviewed', section_status, reg_details.id) sr._SubmitReview__generate_notification( user_id=reg_details.user_id, request_id=reg_details.id, request_type='de-registration', request_status=section_status, message=message) reg_details.summary = json.dumps({'summary': result}) reg_details.report = result.get('compliant_report_name') reg_details.update_report_status('Processed') reg_details.update_status(status) reg_details.report_allowed = True reg_details.save() db.session.commit() # create log log = EsLog.auto_review(reg_details, "De-Registration Request", 'Post', status) EsLog.insert_log(log) return True else: reg_details.update_processing_status('Failed') reg_details.update_report_status('Failed') reg_details.update_status('Failed') db.session.commit() log = EsLog.auto_review( reg_details, "De-Registration Request", 'Post', Status.get_status_type(reg_details.status)) EsLog.insert_log(log) except Exception as e: # pragma: no cover app.logger.exception(e) db.session.rollback() reg_details.update_processing_status('Failed') reg_details.update_status('Failed') message = 'Your request {id} has failed please re-initiate device request'.format( id=reg_details.id) sr._SubmitReview__generate_notification( user_id=reg_details.user_id, request_id=reg_details.id, request_type='registration', request_status=7, message=message) db.session.commit() # create log log = EsLog.auto_review(reg_details, "De-Registration Request", 'Post', Status.get_status_type(reg_details.status)) EsLog.insert_log(log)