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
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
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
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
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
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
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
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
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 == []
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'
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()