import os import pickle from dateutil.tz import tzutc from sqlalchemy import select from models import ( Hashtags, Posts, ) from urma import ( process_bookmarked_posts, process_posts_boosted_by_me, process_favourited_posts, ) BOOSTED_POST = "tests/boosted.pickle" BOOSTING_POST = "tests/boosting.pickle" FAVOURITED_POST = "tests/favourited.pickle" ME_ID = 109568725613662482 def test_process_favourited_no_fave(session): """Test post not marked as favourite""" with open(FAVOURITED_POST, "rb") as inp: posts = pickle.load(inp) # Sanity check assert len(posts) == 1 # Set not favourited posts[0]['favourited'] = False process_favourited_posts(session, posts, ME_ID) all_posts = session.execute(select(Posts)).scalars().all() assert len(all_posts) == 0 def test_process_favourited_with_fave(session): """Test post marked as favourite""" with open(FAVOURITED_POST, "rb") as inp: posts = pickle.load(inp) # Sanity check assert len(posts) == 1 process_favourited_posts(session, posts, ME_ID) all_posts = session.execute(select(Posts)).scalars().all() assert len(all_posts) == 1 original_post = posts[0] retrieved_post = all_posts[0] assert original_post.id == int(retrieved_post.post_id) assert original_post.account.id == int(retrieved_post.account.account_id) assert original_post.created_at == retrieved_post.created_at assert retrieved_post.favourited is True def test_process_post_hashtags(session): """Test hashtags correctly parsed""" with open(FAVOURITED_POST, "rb") as inp: posts = pickle.load(inp) # Sanity check assert len(posts) == 1 process_favourited_posts(session, posts, ME_ID) all_tags = Hashtags.get_all(session) expected = ['fdroid', 'apps', 'android', 'foss', 'free', 'AndroidAppRain'] for hashtag in all_tags: assert hashtag.name in expected def test_process_boosts_by_me_no_boost(session): """Test processing boosted posts with no post that's been boosted""" with open(BOOSTING_POST, "rb") as inp: post = pickle.load(inp) post['reblog'] = None process_posts_boosted_by_me(session, [post], ME_ID) all_posts = session.execute(select(Posts)).scalars().all() assert len(all_posts) == 0 def test_process_boosts_by_me(session): """Test processing posts boosted by me""" with open(BOOSTING_POST, "rb") as inp: boosting = pickle.load(inp) with open(BOOSTED_POST, "rb") as inp: boosted = pickle.load(inp) process_posts_boosted_by_me(session, [boosting], ME_ID) all_posts = session.execute(select(Posts)).scalars().all() assert len(all_posts) == 1 stored_post = all_posts[0] assert boosted.account.id == int(stored_post.account.account_id) assert boosted.id == int(stored_post.post_id) def test_process_favourite_containing_boosted_post(session): """Test processing a favourited post that is a boost""" pass