def test_review_sections_registration(flask_app, db): # pylint: disable=unused-argument """Verify that the api returns correct information of sections.""" # registration request data = { 'device_count': 2, 'imei_per_device': 1, 'imeis': "[['86834403015010', '86834403015011']]", 'm_location': 'local', 'user_name': 'section rev user 1', 'user_id': 'section-rev-user-1' } reviewer_id = 'section-rev-1' reviewer_name = 'section rev' section = 'device_quota' status = 6 comment = 'this is a test comment' request = create_assigned_dummy_request(data, 'Registration', reviewer_id, reviewer_name) assert request request_id = request.id RegDetails.add_comment(section, comment, reviewer_id, reviewer_name, status, request_id) rv = flask_app.get( '{0}?request_id={1}&request_type=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, flatten_imeis, app): from app.api.v1.resources.reviewer import SubmitReview from app.api.v1.models.devicequota import DeviceQuota as DeviceQuotaModel from app.api.v1.models.eslog import EsLog from app.api.v1.models.status import Status import json sr = SubmitReview() try: result = Utilities.check_request_status(task_id) duplicate_imeis = RegDetails.get_duplicate_imeis(reg_details) res = RegDetails.get_imeis_count(reg_details.user_id) sections_comment = "Auto" section_status = 6 auto_approved_sections = [ 'device_quota', 'device_description', 'imei_classification', 'imei_registration' ] if result: flatten_imeis = Utilities.bulk_normalize(flatten_imeis) if result['non_compliant'] != 0 or result['stolen'] != 0 or result['compliant_active'] != 0 \ or result['provisional_non_compliant'] != 0 or result['provisional_compliant'] != 0: sections_comment = sections_comment + ' Rejected, Device/Devices found in Non-Compliant States' status = 'Rejected' section_status = 7 message = 'Your request {id} has been rejected'.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 duplicate_imeis: res.update({ 'duplicated': len(RegDetails.get_duplicate_imeis(reg_details)) }) Utilities.generate_imeis_file(duplicate_imeis, reg_details.tracking_id, 'duplicated_imeis') reg_details.duplicate_imeis_file = '{upload_dir}/{tracking_id}/{file}'.format( upload_dir=app.config['DRS_UPLOADS'], tracking_id=reg_details.tracking_id, file='duplicated_imeis.txt') sections_comment = "Auto" status = 'Rejected' sections_comment = sections_comment + ' Rejected, Duplicate IMEIS Found, Please check duplicate file' section_status = 7 message = 'Your request {id} has been rejected because duplicate imeis found!'.format( id=reg_details.id) if status == 'Approved': # checkout device quota imeis = RegDetails.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) sr._SubmitReview__update_to_approved_imeis(flatten_imeis) else: sr._SubmitReview__change_rejected_imeis_status( flatten_imeis) for section in auto_approved_sections: RegDetails.add_comment(section, sections_comment, reg_details.user_id, 'Auto Reviewed', section_status, reg_details.id) reg_details.summary = json.dumps({'summary': result}) reg_details.report = result.get('compliant_report_name') reg_details.update_report_status('Processed') reg_details.report_allowed = True reg_details.update_status(status) sr._SubmitReview__generate_notification( user_id=reg_details.user_id, request_id=reg_details.id, request_type='registration', request_status=section_status, message=message) reg_details.save() db.session.commit() # create log log = EsLog.auto_review(reg_details, "Registration Request", 'Post', status) EsLog.insert_log(log) except Exception as e: # pragma: no cover 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() app.logger.exception(e) # create log log = EsLog.auto_review(reg_details, "Registration Request", 'Post', Status.get_status_type(reg_details.status)) EsLog.insert_log(log) return True