Example #1
0
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