Example #1
0
def create_kweek(request, authorized_username):
    """
            Set the data needed to be assigned to the kweek object to later be inserted in the data base


            *Parameters:*
                - *request*: the body of The kweek creation request sent from the user.
                - *authorized_username*: The name of the authorized user who sent the request.


            *Returns:*
               -*Tuple*: {
                            | *bool*: To indicate whether kweek credentials creation was successful or not.,
                            | *message (str)*: To specify the reason of failure if detected.
                            | *code*: The code to be returned in the request.
                            | }
    """
    data = {}
    reply_to = request["reply_to"]
    if reply_to is not None:
        if not reply_to.isdigit():
            return False, 'Invalid ID to be replied to.', 400
        check = validate_id(reply_to)
        if len(check) == 0:
            return False, 'The kweek to be replied to does not exist.', 404
    text = request['text']
    if len(text) == 0 or (text.isspace()):
        return False, 'No text body found.', 400

    # check if str and have a length of minimum one char and is not fully  white space
    hashtags, mentions = extract_mentions_hashtags(
        text)  # two lists of objects
    partial_user = get_user(authorized_username)
    partial_user = partial_user[0]
    status_dic = {
        'following': None,
        'follows_you': None,
        'blocked': None,
        'muted': None
    }
    partial_user.update(status_dic)
    user = User(partial_user)  # user obj
    data['id'] = 0
    data['created_at'] = datetime.utcnow()
    data['username'] = authorized_username
    data['hashtags'] = hashtags  # list of dics
    data['mentions'] = mentions  # list of dics
    data['media_url'] = create_url(request['media_id'])
    data['number_of_likes'] = 0
    data['number_of_rekweeks'] = 0
    data['number_of_replies'] = 0
    data['rekweek_info'] = None
    data['reply_info'] = None
    data['liked_by_user'] = False
    data['rekweeked_by_user'] = False
    data['user'] = user
    data.update(request)
    kweek = Kweek(data)
    check, message, code = insert_kweek(kweek)
    return check, message, code
Example #2
0
def get_home_kweeks(authorized_username, last_retrieved_kweek_id):
    """
        Gets the kweeks that should appear on the authorized user's home timeline.


        *Parameters:*
            - *authorized_username (string)*: The username of the authorized user.
            - *last_retrieved_kweek_id (string)*: The id of the last retrieved kweek (used to fetch more). Nullable.

        *Returns:*
            - *List of models.Kweek objects*
            - *None*: if last_retrieved_kweek_id does not exist.
            - *Raise ValueError*: if last_retrieved_kweek_id is not a valid number.
            - *Raise TypeError*: if raised by paginate.
    """
    if last_retrieved_kweek_id is not None:
        try:
            last_retrieved_kweek_id = int(last_retrieved_kweek_id)
        except ValueError:
            raise
    # Get a list of kweeks with missing data
    home_kweeks = query_factory.get_home_kweeks(authorized_username=authorized_username)
    # Paginate the results
    try:
        home_kweeks = paginate(dictionaries_list=home_kweeks, required_size=20,
                               start_after_key='id', start_after_value=last_retrieved_kweek_id)
    except TypeError as E:
        print(E)
        raise
    if home_kweeks is None:
        return None

    kweeks = []
    for kweek in home_kweeks:
        # Add the user
        kweek['user'] = get_user(authorized_username=authorized_username,
                                 required_username=kweek['username'])
        # Add the statistics
        kweek_statistics = get_kweek_statistics(authorized_username=authorized_username,
                                                kweek_id=kweek['id'])
        kweek.update(kweek_statistics)
        # Add mentions and hashtags
        kweek['mentions'] = get_kweek_mentions(kweek['id'])
        kweek['hashtags'] = get_kweek_hashtags(kweek['id'])
        # Add rekweek info
        if kweek['is_rekweek']:
            rekweeker_username = kweek['rekweeker']
            rekweeker_name = query_factory.get_user_data(required_username=rekweeker_username)[0].get('screen_name')
            rekweek_info = RekweekInfo({
                'rekweeker_name': rekweeker_name,
                'rekweeker_username': rekweeker_username
            })
            kweek['rekweek_info'] = rekweek_info
        else:
            kweek['rekweek_info'] = None
        kweeks.append(Kweek(kweek))

    return kweeks
Example #3
0
def get_trend_kweeks(authorized_username, trend_id, last_retrieved_kweek_id):
    """
        Gets the kweeks that should appear on the authorized user's home timeline.


        *Parameters:*
            - *authorized_username (string)*: The username of the authorized user.
            - *last_retrieved_kweek_id (string)*: The id of the last retrieved kweek (used to fetch more). Nullable.
            - *trend_id (string)*: The id of the trend whose kweeks are to be fetched.

        *Returns:*
            - *List of models.Kweek objects*
            - *None*: if last_retrieved_kweek_id does not exist.
            - *Raise ValueError*: if last_retrieved_kweek_id is not a valid number.
            - *Raise TypeError*: if raised by paginate.
    """
    if last_retrieved_kweek_id is not None:
        try:
            last_retrieved_kweek_id = int(last_retrieved_kweek_id)
        except ValueError:
            raise
    # No need to check for exceptions as this is done in is_trend()
    trend_id = int(trend_id)
    # Get a list of kweeks with missing data
    trend_kweeks = query_factory.get_trend_kweeks(trend_id=trend_id)
    # Paginate the results
    try:
        trend_kweeks = paginate(dictionaries_list=trend_kweeks, required_size=20,
                                start_after_key='id', start_after_value=last_retrieved_kweek_id)
    except TypeError as E:
        print(E)
        raise
    if trend_kweeks is None:
        return None

    kweeks = []
    for kweek in trend_kweeks:
        # Add the user
        kweek['user'] = get_user(authorized_username=authorized_username,
                                 required_username=kweek['username'])
        # Add the statistics
        kweek_statistics = get_kweek_statistics(authorized_username=authorized_username,
                                                kweek_id=kweek['id'])
        kweek.update(kweek_statistics)
        # Add mentions and hashtags
        kweek['mentions'] = get_kweek_mentions(kweek['id'])
        kweek['hashtags'] = get_kweek_hashtags(kweek['id'])
        # Add rekweek info (original kweeks only appear in trends kweeks)
        kweek['rekweek_info'] = None

        kweeks.append(Kweek(kweek))

    return kweeks
Example #4
0
def kweeks_builder(db_kweeks, authorized_username):
    """
        Builds model.Kweek objects from database kweeks dictionaries.


        *Parameters:*
            - *db_kweeks (list of dictionaries)*: The kweeks fetched from the database.
            - *authorized_username (string)*: The username of the authorized user.
            - *last_retrieved_kweek_id (string)*: The id of the last retrieved kweek (used to fetch more). Nullable.

        *Returns:*
            - *List of models.Kweek objects*
        """
    kweeks = []
    for kweek in db_kweeks:
        # Add the user
        kweek['user'] = get_user(authorized_username=authorized_username,
                                 required_username=kweek['username'])
        # Add the statistics
        kweek_statistics = get_kweek_statistics(authorized_username=authorized_username,
                                                kweek_id=kweek['id'])
        kweek.update(kweek_statistics)
        # Add mentions and hashtags
        kweek['mentions'] = get_kweek_mentions(kweek['id'])
        kweek['hashtags'] = get_kweek_hashtags(kweek['id'])
        # Add rekweek info
        if 'is_rekweek' in kweek and kweek['is_rekweek']:
            rekweeker_username = kweek['rekweeker']
            rekweeker_name = query_factory.get_user_data(required_username=rekweeker_username)[0].get('screen_name')
            rekweek_info = RekweekInfo({
                'rekweeker_name': rekweeker_name,
                'rekweeker_username': rekweeker_username
            })
            kweek['rekweek_info'] = rekweek_info
        else:
            kweek['rekweek_info'] = None
        # Add reply info
        if kweek['reply_to']:
            kweek['reply_info'] = get_reply_to_info(kweek['id'])
        else:
            kweek['reply_info'] = None
        kweeks.append(Kweek(kweek))
    return kweeks
Example #5
0
def get_kweek(kid, authorized_username, replies_only):
    """
           Get the requested kweek with its credentials.


           *Parameters:*
               - *kid*: The id of the kweek to be retrieved.
               - *authorized_username(string)*: The user currently logged in.
               - *replies_only (bool)*: To indicate whether the kweek with its replies
                  is to be retrieved or the replies only

           *Returns:*
               -*Tuple*: {
                            | *check (bool)*: To indicate whether kweek credentials creation
                            | was successful or not.,
                            | *message (str)*: To specify the reason of failure if detected.
                            | *kweekobj (kweek object )*: the kweek to be retrieved,
                            | *replies (list of int )*: Ids of  the replies to the retrieved kweek .
                            | *code*: The code to be returned in the request.

                            | }

    """
    check, message, code = validate_request(kid)
    if not check:
        return check, message, None, None, code
    replies = retrieve_replies(
        kid
    )  # rows of kweek table who is set as a reply to the retrieved kweek (ids)
    if replies_only:
        return True, message, None, replies, code
    hashtags = retrieve_hashtags(kid)  # rows of hahstag-kweek table (*)
    mentions = retrieve_mentions(kid)  # rows of mention table (*)
    rekweeks = retrieve_user(kid, 3)
    likers = retrieve_user(
        kid,
        2)  # rows of likers table for those who liked the kweek (usernames)
    user = retrieve_user(kid, 1)
    hashtags_list = []  # list of hashtag objects
    mentions_list = []  # list of mention objects
    rekweeked_by_user = False
    liked_by_user = False
    if hashtags:
        for hash_obj in hashtags:
            hid = hash_obj['hashtag_id']
            s_index = hash_obj['starting_index']
            e_index = hash_obj['ending_index']
            indices = [s_index, e_index]
            text = hash_obj['text']
            hash_dic = {'id': hid, 'indices': indices, 'text': text}
            hashtag = Hashtag(hash_dic)
            hashtags_list.append(hashtag)

    if mentions:
        for ment in mentions:
            s_index = ment['starting_index']
            e_index = ment['ending_index']
            indices = [s_index, e_index]
            username = ment['username']
            ment_dic = {'indices': indices, 'username': username}
            mention = Mention(ment_dic)
            mentions_list.append(mention)

    user = user[0]
    extrauser = {}
    me = authorized_username  # should be replaced by the function getting the current user
    check = check_following(me, user['username'])
    if check:
        extrauser['following'] = True
    else:
        extrauser['following'] = False

    check = check_following(user['username'], me)
    if check:
        extrauser['follows_you'] = True
    else:
        extrauser['follows_you'] = False

    check = check_blocked(user['username'], me)
    if check:
        extrauser['blocked'] = True
    else:
        extrauser['blocked'] = False
    check = check_muted(user['username'], me)
    if check:
        extrauser['muted'] = True
    else:
        extrauser['muted'] = False
    extrauser.update(user)

    userobj = User(extrauser)

    if replies:
        num_of_replies = len(replies)
    else:
        num_of_replies = 0

    if likers:
        num_of_likes = len(likers)
        for user in likers:
            if user['username'] == me:
                liked_by_user = True

    else:
        num_of_likes = 0

    if rekweeks:
        num_of_rekweeks = len(rekweeks)
        for user in rekweeks:
            if user['username'] == me:
                rekweeked_by_user = True
    else:
        num_of_rekweeks = 0

    kweekdic = {
        'hashtags': hashtags_list,
        'mentions': mentions_list,
        'number_of_likes': num_of_likes,
        'number_of_rekweeks': num_of_rekweeks,
        'number_of_replies': num_of_replies,
        'rekweek_info': None,
        'liked_by_user': liked_by_user,
        'rekweeked_by_user': rekweeked_by_user,
        'user': userobj
    }
    kweek = retrieve_kweek(kid)  # a row of kweek table
    kweek = kweek[0]
    kweekdic.update(kweek)
    kweekdic['reply_info'] = get_reply_to_info(kid)
    kweekobj = Kweek(kweekdic)
    return True, 'success.', kweekobj, replies, 200
Example #6
0
def test_get_replies_and_mentions():
    expected_kweeks = []

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, third kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    reply_info = actions.get_reply_to_info(kweek_id)
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2018-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, third kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            reply_info,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 2, second kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    reply_info = actions.get_reply_to_info(kweek_id)
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2014-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 2, second kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user2'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            reply_info,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                    SELECT ID FROM KWEEK WHERE USERNAME = '******'
                    AND TEXT = 'Test user 2, first kweek @test_user1 #trend'
                """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2011-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 2, first kweek @test_user1 #trend',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user2'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            1,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    actual_kweeks = actions.get_replies_and_mentions_timeline_kweeks(
        'test_user1', None)

    for index, kweek in enumerate(actual_kweeks):
        assert expected_kweeks[index].to_json() == kweek.to_json()

    # Invalid ID
    exception_caught = False
    try:
        actions.get_replies_and_mentions_timeline_kweeks(
            'test_user1', 'invalid_id')
    except ValueError:
        exception_caught = True
    assert exception_caught

    actual_kweeks = actions.get_replies_and_mentions_timeline_kweeks(
        'test_user2', None)
    assert actual_kweeks == []

    unseen_count = actions.get_replies_and_mentions_unseen_count('test_user1')
    assert unseen_count == 2

    actions.set_replies_and_mentions_as_seen('test_user1')
    unseen_count = actions.get_replies_and_mentions_unseen_count('test_user1')
    assert unseen_count == 0

    unseen_count = actions.get_replies_and_mentions_unseen_count('test_user2')
    assert unseen_count == 0
Example #7
0
def test_get_trend_kweeks():
    expected_kweeks = []

    query = """
                    SELECT ID FROM KWEEK WHERE USERNAME = '******'
                    AND TEXT = 'Test user 3, first kweek #trend'
                """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2012-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, first kweek #trend',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            1,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            True
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 2, first kweek @test_user1 #trend'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2011-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 2, first kweek @test_user1 #trend',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user2'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            1,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    # Normal case
    query = """
            SELECT ID FROM HASHTAG WHERE TEXT = 'trend'
            """
    trend_id = db_manager.execute_query(query)[0]['id']
    actual_kweeks = actions.get_trend_kweeks('test_user1', trend_id, None)

    for index, kweek in enumerate(actual_kweeks):
        assert expected_kweeks[index].to_json() == kweek.to_json()

    # Invalid ID
    exception_caught = False
    try:
        actions.get_trend_kweeks('test_user1', trend_id, 'invalid_id')
    except ValueError:
        exception_caught = True
    assert exception_caught
Example #8
0
def test_get_home_kweeks():
    expected_kweeks = []

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, third kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    reply_info = actions.get_reply_to_info(kweek_id)
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2018-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, third kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            reply_info,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, second kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2017-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, second kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
               SELECT ID FROM KWEEK WHERE USERNAME = '******'
               AND TEXT = 'Test user 1, third kweek'
           """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2016-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 1, third kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user1'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            1,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, first kweek #trend'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2012-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, first kweek #trend',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            1,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            RekweekInfo({
                'rekweeker_name': 'test1',
                'rekweeker_username': '******'
            }),
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 1, second kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2013-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 1, second kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user1'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            1,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, first kweek #trend'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2012-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, first kweek #trend',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            1,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 1, first kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2010-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 1, first kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user3', 'test_user1'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            1,
            'number_of_rekweeks':
            1,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            True,
            'rekweeked_by_user':
            True
        }))

    # Normal case
    actual_kweeks = actions.get_home_kweeks('test_user3', None, None)

    for index, kweek in enumerate(actual_kweeks):
        assert expected_kweeks[index].to_json() == kweek.to_json()

    # Invalid ID
    exception_caught = False
    try:
        actions.get_home_kweeks('test_user3', 'invalid_id', None)
    except ValueError:
        exception_caught = True
    assert exception_caught
Example #9
0
def test_search_kweeks():
    expected_kweeks = []

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 3, second kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2017-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 3, second kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user3'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            0,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    query = """
                SELECT ID FROM KWEEK WHERE USERNAME = '******'
                AND TEXT = 'Test user 1, second kweek'
            """
    kweek_id = db_manager.execute_query(query)[0]['id']
    expected_kweeks.append(
        Kweek({
            'id':
            kweek_id,
            'created_at':
            datetime.strptime('2013-01-01 00:00:00', '%Y-%m-%d %H:%M:%S'),
            'text':
            'Test user 1, second kweek',
            'media_url':
            None,
            'user':
            actions.get_user('test_user1', 'test_user1'),
            'mentions':
            actions.get_kweek_mentions(kweek_id),
            'hashtags':
            actions.get_kweek_hashtags(kweek_id),
            'number_of_likes':
            0,
            'number_of_rekweeks':
            0,
            'number_of_replies':
            1,
            'reply_info':
            None,
            'rekweek_info':
            None,
            'liked_by_user':
            False,
            'rekweeked_by_user':
            False
        }))

    actual_kweeks = actions.get_search_kweeks('test_user1', 'second', None)

    for index, kweek in enumerate(actual_kweeks):
        assert expected_kweeks[index].to_json() == kweek.to_json()

    # Invalid ID
    exception_caught = False
    try:
        actions.get_search_kweeks('test_user1', 'some search', 'invalid_id')
    except ValueError:
        exception_caught = True
    assert exception_caught

    actual_kweeks = actions.get_search_kweeks('test_user1', 'fourth', None)
    assert actual_kweeks == []
Example #10
0
def test_insert_kweek():
    kweek_test_1 = Kweek({
        'id': 0,
        'created_at': datetime.utcnow(),
        'text': '#test1',
        'media_url': None,
        'user': User({
            'username': '******',
            'screen_name': 'test1',
            'profile_image_url': 'image_url',
            'following': False,
            'follows_you': False,
            'muted': False,
            'blocked': False
        }),
        'mentions': [
            Mention({
                'username': '******',
                'indices': [10, 16]}),
            Mention({
                'username': '******',
                'indices': [18, 20]},
            )
        ],
        'hashtags': [
            Hashtag({
                'text': '#sky',
                'indices': [10, 16],
                'id': 0
            })
        ],
        'number_of_likes': 0,
        'number_of_rekweeks': 0,
        'number_of_replies': 0,
        'reply_to': None,
        'rekweek_info': None,
        'liked_by_user': False,
        'rekweeked_by_user': False
    })
    kweek_test_2 = Kweek({
        'id': 0,
        'created_at': datetime.utcnow(),
        'text': '#test2',
        'media_url': None,
        'user': User({
            'username': '******',
            'screen_name': 'test1',
            'profile_image_url': 'image_url',
            'following': False,
            'follows_you': False,
            'muted': False,
            'blocked': False
        }),
        'mentions': [
            Mention({
                'username': '******',
                'indices': [10, 16]}),
            Mention({
                'username': '******',
                'indices': [18, 20]})
        ],
        'hashtags': [
            Hashtag({
                'text': '#sky',
                'indices': [10, 16],
                'id': 0
            })
        ],
        'number_of_likes': 0,
        'number_of_rekweeks': 0,
        'number_of_replies': 0,
        'reply_to': None,
        'rekweek_info': None,
        'liked_by_user': False,
        'rekweeked_by_user': False
    })
    kweek_test_3 = Kweek({
        'id': 0,
        'created_at': datetime.utcnow(),
        'text': '#test3',
        'media_url': None,
        'user': User({
            'username': '******',
            'screen_name': 'test1',
            'profile_image_url': 'image_url',
            'following': False,
            'follows_you': False,
            'muted': False,
            'blocked': False
        }),
        'mentions': [
            Mention({
                'username': '******',
                'indices': [10, 16]}),
            Mention({
                'username': '******',
                'indices': [18, 20]},
            )
        ],
        'hashtags': [
            Hashtag({
                'text': '#sky',
                'indices': [10, 16],
                'id': 0
            })
        ],
        'number_of_likes': 0,
        'number_of_rekweeks': 0,
        'number_of_replies': 0,
        'reply_to': None,
        'rekweek_info': None,
        'liked_by_user': False,
        'rekweeked_by_user': False
    })
    kweek_test_4 = Kweek({
        'id': 0,
        'created_at': datetime.utcnow(),
        'text': '#test1',
        'media_url': None,
        'user': User({
            'username': '******',
            'screen_name': 'test1',
            'profile_image_url': 'image_url',
            'following': False,
            'follows_you': False,
            'muted': False,
            'blocked': False
        }),
        'mentions': [
            Mention({
                'username': '******',
                'indices': [10, 16]}),
            Mention({
                'username': '******',
                'indices': [18, 20]},
            )
        ],
        'hashtags': [
            Hashtag({
                'text': '#sky',
                'indices': [10, 16],
                'id': 0
            })
        ],
        'number_of_likes': 0,
        'number_of_rekweeks': 0,
        'number_of_replies': 0,
        'reply_to': None,
        'rekweek_info': None,
        'liked_by_user': False,
        'rekweeked_by_user': False
    })
    query: str = """SELECT ID FROM HASHTAG WHERE TEXT=%s  """
    data = ('#sky',)
    hid = db_manager.execute_query(query, data)
    if len(hid) != 0:
        query: str = """DELETE FROM HASHTAG WHERE ID=%s  """
        data = (hid[0]['id'],)
        db_manager.execute_query_no_return(query, data)
        query: str = """DELETE FROM KWEEK_HASHTAG WHERE HASHTAG_ID=%s  """
        data = (hid[0]['id'],)
        db_manager.execute_query_no_return(query, data)
    query: str = """SELECT COUNT(*) FROM HASHTAG """
    first_count = db_manager.execute_query(query)[0]['count']
    actions.insert_kweek(kweek_test_1)
    query: str = """SELECT ID FROM KWEEK ORDER BY ID DESC LIMIT 1 """
    kid = db_manager.execute_query(query)[0]['id']
    print("kweek id", kid)
    query: str = """SELECT ID FROM HASHTAG ORDER BY ID DESC LIMIT 1 """
    hid = db_manager.execute_query(query)[0]['id']
    print("hahstag id ", hid)
    query: str = """SELECT ID,TEXT,media_url,username,reply_to FROM KWEEK WHERE ID= %s """
    data = (kid,)
    resulted_kweek = db_manager.execute_query(query, data)[0]
    print("kweek", resulted_kweek)
    query: str = """SELECT * FROM MENTION WHERE  KWEEK_ID= %s"""
    data = (kid,)
    resulted_mention = db_manager.execute_query(query, data)[0]
    query: str = """SELECT TEXT, KWEEK_ID, HASHTAG_ID, STARTING_INDEX, ENDING_INDEX 
     FROM KWEEK_HASHTAG JOIN HASHTAG  ON ID = HASHTAG_ID WHERE KWEEK_ID  = %s"""
    data = (kid,)
    resulted_hashtag = db_manager.execute_query(query, data)[0]
    print("hashtag", resulted_hashtag)
    expected_mention = {'kweek_id': kid, 'username': '******', 'starting_index': 10,
                        'ending_index': 16}
    expected_hahstag = {'text': '#sky', 'kweek_id': kid, 'hashtag_id': hid,
                        'starting_index': 10, 'ending_index': 16}
    expected_kweek = {'id': kid, 'text': '#testtest',
                      'media_url': None, 'username': '******', 'reply_to': None}
    assert expected_kweek == resulted_kweek
    assert expected_hahstag == resulted_hashtag
    assert expected_mention == resulted_mention
    query: str = """SELECT COUNT(*) FROM HASHTAG """
    second_count = db_manager.execute_query(query)[0]['count']
    assert (second_count - first_count) == 1
    check, message = actions.insert_kweek(kweek_test_2)
    assert message == 'success'
    query: str = """SELECT COUNT(*) FROM HASHTAG """
    third_count = db_manager.execute_query(query)[0]['count']
    assert third_count - second_count == 0
    check, message = actions.insert_kweek(kweek_test_3)
    assert message == 'Repeated mention in the same kweek'
    check, message = actions.insert_kweek(kweek_test_4)
    assert message == 'the user mentioned does not exist in the database'
Example #11
0
def test_get_kweek_with_replies():
    # first kweek #

    query: str = """INSERT INTO  KWEEK (CREATED_AT,TEXT,MEDIA_URL,USERNAME,REPLY_TO) VALUES(%s, %s, %s, %s,%s) """
    data = ('01-01-2010', 'test1', None, 'test_user1', None)
    db_manager.execute_query_no_return(query, data)
    kid1 = str(db_manager.execute_query("""SELECT ID FROM KWEEK ORDER BY ID DESC LIMIT 1 """)[0]['id'])

    query: str = """INSERT INTO HASHTAG(TEXT) VALUES (%s) """
    data = ('hashtag1---',)
    db_manager.execute_query_no_return(query, data)

    query: str = """SELECT ID FROM HASHTAG WHERE TEXT = %s """
    data = ('hashtag1---',)
    hid1 = db_manager.execute_query(query, data)[0]['id']

    query: str = """INSERT INTO KWEEK_HASHTAG VALUES (%s,%s,%s,%s)"""
    data = (kid1, hid1, 0, 9,)
    db_manager.execute_query_no_return(query, data)

    query: str = """INSERT INTO MENTION VALUES(%s,%s,%s,%s) """
    data = (kid1, 'test_user2', 10, 15)
    db_manager.execute_query_no_return(query, data)

    query: str = """INSERT INTO REKWEEK VALUES(%s,%s,%s) """
    data = ('test_user2', kid1, '01-01-2010')
    db_manager.execute_query_no_return(query, data)

    query: str = """INSERT INTO FAVORITE VALUES(%s,%s,%s) """
    data = ('test_user2', kid1, '01-01-2010')
    db_manager.execute_query_no_return(query, data)

    # second kweek #

    query: str = """INSERT INTO  KWEEK (CREATED_AT,TEXT,MEDIA_URL,USERNAME,REPLY_TO) VALUES(%s, %s, %s, %s,%s) """
    data = ('01-01-2010', 'test2', None, 'test_user2', kid1)
    db_manager.execute_query_no_return(query, data)
    kid2 = str(db_manager.execute_query("""SELECT ID FROM KWEEK ORDER BY ID DESC LIMIT 1 """)[0]['id'])

    query: str = """INSERT INTO HASHTAG(TEXT) VALUES (%s) """
    data = ('hashtag2---',)
    db_manager.execute_query_no_return(query, data)

    query: str = """SELECT ID FROM HASHTAG WHERE TEXT = %s """
    data = ('hashtag2---',)
    hid2 = db_manager.execute_query(query, data)[0]['id']

    query: str = """INSERT INTO KWEEK_HASHTAG VALUES (%s,%s,%s,%s)"""
    data = (kid2, hid2, 0, 9,)
    db_manager.execute_query_no_return(query, data)

    query: str = """INSERT INTO FAVORITE VALUES(%s,%s,%s) """
    data = ('test_user1', kid2, '01-01-2010')
    db_manager.execute_query_no_return(query, data)

    # third kweek #

    query: str = """INSERT INTO  KWEEK (CREATED_AT,TEXT,MEDIA_URL,USERNAME,REPLY_TO) VALUES(%s, %s, %s, %s,%s) """
    data = ('01-01-2010', 'test3', None, 'test_user3', kid1)
    db_manager.execute_query_no_return(query, data)
    kid3 = str(db_manager.execute_query("""SELECT ID FROM KWEEK ORDER BY ID DESC LIMIT 1 """)[0]['id'])

    query: str = """INSERT INTO HASHTAG(TEXT) VALUES (%s) """
    data = ('hashtag3---',)
    db_manager.execute_query_no_return(query, data)

    query: str = """SELECT ID FROM HASHTAG WHERE TEXT = %s """
    data = ('hashtag3---',)
    hid3 = db_manager.execute_query(query, data)[0]['id']

    query: str = """INSERT INTO KWEEK_HASHTAG VALUES (%s,%s,%s,%s)"""
    data = (kid3, hid3, 0, 9,)
    db_manager.execute_query_no_return(query, data)

    query: str = """INSERT INTO FAVORITE VALUES(%s,%s,%s) """
    data = ('test_user3', kid3, '01-01-2010')
    db_manager.execute_query_no_return(query, data)

    kweek_test1 = Kweek({
        'id': int(kid1),
        'created_at': datetime(2010, 1, 1, 0, 0),
        'text': 'test1',
        'media_url': None,
        'user': User({
            'username': '******',
            'screen_name': 'test1',
            'profile_image_url': 'image_url',
            'following': True,
            'follows_you': True,
            'muted': False,
            'blocked': False
        }),
        'mentions': [
            Mention({
                'username': '******',
                'indices': [10, 15]})

        ],
        'hashtags': [
            Hashtag({
                'text': 'hashtag1---',
                'indices': [0, 9],
                'id': hid1
            })
        ],
        'number_of_likes': 1,
        'number_of_rekweeks': 1,
        'number_of_replies': 2,
        'reply_to': None,
        'rekweek_info': None,
        'liked_by_user': False,
        'rekweeked_by_user': False
    })
    replies_test1 = [
        Kweek({
            'id': int(kid2),
            'created_at': datetime(2010, 1, 1, 0, 0),
            'text': 'test2',
            'media_url': None,
            'user': User({
                'username': '******',
                'screen_name': 'test2',
                'profile_image_url': 'image_url',
                'following': False,
                'follows_you': True,
                'muted': False,
                'blocked': False
            }),
            'mentions': [
            ],
            'hashtags': [
                Hashtag({
                    'text': 'hashtag2---',
                    'indices': [0, 9],
                    'id': hid2
                })
            ],
            'number_of_likes': 1,
            'number_of_rekweeks': 0,
            'number_of_replies': 0,
            'reply_to': int(kid1),
            'rekweek_info': None,
            'liked_by_user': False,
            'rekweeked_by_user': False
        }), Kweek({
            'id': int(kid3),
            'created_at': datetime(2010, 1, 1, 0, 0),
            'text': 'test3',
            'media_url': None,
            'user': User({
                'username': '******',
                'screen_name': 'test3',
                'profile_image_url': 'image_url',
                'following': False,
                'follows_you': False,
                'muted': False,
                'blocked': False
            }),
            'mentions': [
            ],
            'hashtags': [
                Hashtag({
                    'text': 'hashtag3---',
                    'indices': [0, 9],
                    'id': hid3
                })
            ],
            'number_of_likes': 1,
            'number_of_rekweeks': 0,
            'number_of_replies': 0,
            'reply_to': int(kid1),
            'rekweek_info': None,
            'liked_by_user': True,
            'rekweeked_by_user': False
        }),

    ]
    check_replies, message, k, r = actions.get_kweek_with_replies(kid1, 'test_user3')
    print('kwweeek')
    print(k)
    print('replies')
    print(r)
    assert True == check_replies
    assert message == 'success'
    assert k.to_json() == kweek_test1.to_json()
    for n, i in enumerate(r):
        assert i.to_json() == replies_test1[n].to_json()