def get_iis_message(user_id, message_id):
    """
    :param user_id: email owner
    :param message_id: id message
    :return: model message with basic fields + header and data
    """
    log_info("Get iis message with message_id = {0} and user_id = {1}".format(
        message_id, user_id))
    response, model = UserMessages().get_iis(user_id, message_id)
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Error! Get iis message with user_id = {0}, message_id = {1}. \n Status code is {2}, " \
        "\n Response text is {3}".format(user_id, message_id, status_code,
                                         response.get_response_text(response))
    return model
def get_iis_message_with_attach(user_id, message_id, client_id=client):
    """
    :param user_id: email owner
    :param message_id: id message
    :param  client_id: auth data
    :return: full model message
    """
    log_info(
        "Get iis message for attach  with message_id = {0} and user_id = {1}".
        format(message_id, user_id))
    response, model = UserMessages().get_iis_with_attach(user_id, message_id)
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Error! Get iis message for attach with user_id = {0}, message_id = {1}, \nStatus code is {2}, " \
        "\nResponse text is: {3}".format(user_id, message_id, status_code,
                                         response.get_response_text(response))
    return model
def full_modify_messages(user_id,
                         message_id,
                         add_labels_list=None,
                         remove_labels_list=None):
    log_info("Full modify messages labels")
    actual_response, actual_model = UserMessages().\
        modify_messages(user_id, message_id, add_labels_list=add_labels_list, remove_label_list=remove_labels_list)
    assert (actual_response.status_code == status_code_200
            ), "Error when modify message: status code is not '200 OK'."
    return actual_model
def modify_messages(user_id, message_id, add_labels_list):
    log_info("Modify messages labels")
    actual_response, actual_model = UserMessages().modify_messages(
        user_id, message_id, add_labels_list)
    status_code = HttpLib.get_response_status_code(actual_response)
    assert (status_code == status_code_200), \
        "Modify message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(actual_response))
    return actual_model
def check_message_is_deleted(user_id, message_id):
    """
    Args:
        user_id (str): user id (email)
        message_id (str)
    """
    response = UserMessages().basic_get(user_id, message_id,
                                        client_id=client).response
    log_info(
        "Check that message {message} is deleted".format(message=message_id))
    status_code = HttpLib.get_response_status_code(response)
    assert status_code == status_code_404, \
        "Message {message} is not deleted. Status code is {status_code} instead {expected_status_code}" \
        .format(message=message_id, status_code=status_code, expected_status_code=status_code_404)
def send_message_with_attach(user_id, body_message_model):
    """
    :param user_id: email owner
    :param body_message_model: model with fields to send message
    :return: model message
    """
    raw = string_to_base64(
        create_multipart_mime_from_dict(
            body_message_model.get_dict_model_with_initialize_value()))
    response, model = UserMessages().send_message(user_id, raw)
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Send message with attach message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
    return model
def untrash_message(user_id, message_id):
    """
    Untrash message
    :param user_id:
    :param message_id:
    :return:
    """
    log_info("Untrash message with id={message_id} from user={user_id}".format(
        message_id=message_id, user_id=user_id))
    response, message_model = UserMessages().untrash(user_id, message_id)
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Untrash message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
    return message_model
def trash_message(user_id, message_id):
    """
    Moves the specified message to the trash
    :param user_id:
    :param message_id:
    """
    log_info("Trash message with id={mes_id} from user {user_id}".format(
        mes_id=message_id, user_id=user_id))
    response = UserMessages().trash_message(user_id=user_id,
                                            message_id=message_id)
    log_info("Assert status code for 'trash_message'")
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Trash message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
def batch_modify(user_id, list_id, list_label_ids):
    """
    Modifies the labels on the specified messages
    :param user_id
        :type: string
    :param list_id
        :type: list
    :param list_label_ids
        :type: list
    """
    actual_response = UserMessages().batch_modify(
        user_id=user_id, list_id=list_id, list_label_ids=list_label_ids)
    status_code = HttpLib.get_response_status_code(actual_response)
    assert (status_code == status_code_204), \
        "Batch modify error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(actual_response))
def delete_message(user_id, message_id):
    """
    Deletes the specified message.

    :param message_id: the ID of the message to delete
    :param user_id: the user's email address
    """
    log_info("Delete message with id={mes_id} from user {user_id}".format(
        mes_id=message_id, user_id=user_id))
    response = UserMessages().delete(user_id=user_id, message_id=message_id)
    log_info("Assert status code for 'delete_message'" +
             str(response.status_code) + HttpLib.get_response_text(response))
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_204), \
        "Delete message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
def import_message_with_attachment(user_id, message_body):
    """
    Args:
        user_id (str): user id (email)
        message_body (obj): message with attachment
    Returns:
        response, UserMessageModel model
    """
    raw = string_to_base64(
        create_multipart_mime_from_dict(
            message_body.get_dict_model_with_initialize_value()))
    response, model = UserMessages().import_text_message(user_id, raw)
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Import message with attach message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
    return model
def batch_delete(user_id, messages_id_list):
    """
    Deletes many messages by message ID
    Args:
        user_id(str): user email
        messages_id_list(list): list with messages id, which will be deleted
    """
    log_info('Message list contains: ' + str(len(messages_id_list)) +
             ' messages')
    request_body = create_string_from_json({"ids": messages_id_list})
    log_info("Messages will be deleted :" + request_body)
    response = UserMessages().batch_delete(user_id, request_body)
    log_info("Delete messages by ID")
    log_info("Assert status code for 'Batch delete'")
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_204), \
        "Batch delete error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
def get_messages_list(user_id, client_id=client):
    """
    Returns messages models array for currnet user_id
    Args:
        user_id(str): user email
        client_id(dict): auth data

    Returns:
        actual_model: user messages objects model array
    """

    log_info("Get messages models array")
    actual_response, actual_model = UserMessages().list(user_id, client_id)
    log_info("Assert status code")
    status_code = HttpLib.get_response_status_code(actual_response)
    assert (status_code == status_code_200), \
        "Get message list error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(actual_response))
    return actual_model
def insert_message(user_id, insert_model):
    """
    Send request to get settings by id

    :param user_id: user email
    :param insert_model: model with fields to insert
    :return: message_model
    """
    message = string_to_base64(
        create_mime_from_dict(
            insert_model.get_dict_model_with_initialize_value()))
    log_info("Insert model")
    response, message_model = UserMessages().insert_message(user_id, message)
    message_model.raw = message
    log_info("Assert status code")
    status_code = HttpLib.get_response_status_code(response)
    assert (status_code == status_code_200), \
        "Insert message error: status code is {status_code}, response text is: {text}".format(
            status_code=status_code,
            text=HttpLib.get_response_text(response))
    return message_model