def test_update_borrower_signing_in_progress(self, mock_borrower,
                                                 mock_borrower_save):
        class ReturnedBorrower:
            id = 0000000
            token = "aaaaaa"
            deed_token = "aaaaaa"
            dob = "02/02/1922"
            phonenumber = "07777777777"
            signing_in_progress = False

        mock_borrower.return_value = None
        mock_borrower_save.signing_in_progress = False
        with self.assertRaises(BorrowerNotFoundException):
            Borrower.update_borrower_signing_in_progress('bbbbbb')

        mock_borrower.return_value = BorrowerModelMock()
        mock_borrower.return_value.signing_in_progress = True
        self.assertEqual(
            Borrower.update_borrower_signing_in_progress('aaaaaa'), True)
def auth_sms(deed, borrower_pos, user_id, borrower_auth_code, borrower_token):  # pragma: no cover

    application.app.logger.info("Calling dm-esec-client to verify OTP code and sign the deed")
    element_id = 'deedData'
    borrower_path = "/dm-application/operativeDeed/signatureSlots"

    parameters = {
        'borrower-pos': borrower_pos,
        'element-id': element_id,
        'borrowers-path': borrower_path,
        'user-id': user_id,
        'otp-code': borrower_auth_code,
        'service-id': 1
    }

    extra_parameters = {
        'borrower-token': borrower_token,
        'datetime': datetime.datetime.now().strftime("%d %B %Y %I:%M%p"),
        'deed-id': deed.token
    }

    application.app.logger.info("Calling esec_client to hit validateSMSOTP...")

    request_url = config.ESEC_CLIENT_BASE_HOST + "/esec/auth_sms"

    resp = requests.post(request_url, params=parameters, data=deed.deed_xml)

    if resp.status_code == status.HTTP_401_UNAUTHORIZED:
        application.app.logger.info("Response status = %s" % resp.status_code)
        return jsonify({"status": "SMS Invalid"}), resp.status_code

    elif resp.status_code == status.HTTP_200_OK:
        application.app.logger.info("Response status = %s" % resp.status_code)

        deed_xml_to_send = deed.deed_xml.decode('utf-8')

        application.app.logger.info("Hashing deed prior to sending message to queue...")
        tree = etree.fromstring(deed.deed_xml)
        deed_data_xml = tree.xpath('.//deedData')[0]

        deed.deed_hash = Deed().generate_hash(etree.tostring(deed_data_xml))
        deed.save()

        application.app.logger.info("Preparing to send message to the queue...")

        try:
            url = broker_url(config.RABBIT_HOST, config.EXCHANGE_USER, config.EXCHANGE_PASS, 5672, config.RABBIT_VHOST)
            with Emitter(url, config.EXCHANGE_NAME, config.ROUTING_KEYS) as emitter:
                emitter.send_message({'params': parameters, 'extra-parameters': extra_parameters, 'data': deed_xml_to_send})
                application.app.logger.info("Message sent to the queue...")

            Borrower.update_borrower_signing_in_progress(borrower_token)
            return jsonify({"status": "Message successfully sent to the queue"}), status.HTTP_200_OK

        except Exception as e:
            application.app.logger.info('Error returned when trying to place an item on the queue: %s' % e)
            raise Exception

    else:
        application.app.logger.error("ESecurity Client Exception when trying to verify the OTP code")
        abort(status.HTTP_500_INTERNAL_SERVER_ERROR)