def test_hash(self): reason1 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), id="x") reason2 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), id="2") reason3 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="b"), id="1") reason4 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="A"), id="x") reason5 = RemovalReason( self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), reason_id="X", ) assert hash(reason1) == hash(reason1) assert hash(reason2) == hash(reason2) assert hash(reason3) == hash(reason3) assert hash(reason1) != hash(reason2) assert hash(reason1) != hash(reason3) assert hash(reason1) == hash(reason4) assert hash(reason1) != hash(reason5)
def test_equality(self): reason1 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), id="x") reason2 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), id="2") reason3 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="b"), id="1") reason4 = RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="A"), id="x") reason5 = RemovalReason( self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), reason_id="X", ) assert reason1 == reason1 assert reason1 == "x" assert reason2 == reason2 assert reason3 == reason3 assert reason1 != reason2 assert reason1 != reason3 assert reason1 == reason4 assert reason1 != reason5
def test_construct_failure(self): message = "Either `display_name` or `_data` must be provided." with pytest.raises(TypeError) as excinfo: Subreddit(self.reddit) assert str(excinfo.value) == message with pytest.raises(TypeError) as excinfo: Subreddit(self.reddit, "dummy", {"id": "dummy"}) assert str(excinfo.value) == message
def test_hash(self): subreddit1 = Subreddit(self.reddit, _data={"display_name": "dummy1", "n": 1}) subreddit2 = Subreddit(self.reddit, _data={"display_name": "Dummy1", "n": 2}) subreddit3 = Subreddit(self.reddit, _data={"display_name": "dummy3", "n": 2}) assert hash(subreddit1) == hash(subreddit1) assert hash(subreddit2) == hash(subreddit2) assert hash(subreddit3) == hash(subreddit3) assert hash(subreddit1) == hash(subreddit2) assert hash(subreddit2) != hash(subreddit3) assert hash(subreddit1) != hash(subreddit3)
def test_exception(self): with pytest.raises(ValueError): RemovalReason(self.reddit, subreddit=Subreddit(self.reddit, display_name="a")) with pytest.raises(ValueError): RemovalReason( self.reddit, subreddit=Subreddit(self.reddit, display_name="a"), id="test", _data={}, )
def test_equality(self): subreddit1 = Subreddit(self.reddit, _data={"display_name": "dummy1", "n": 1}) subreddit2 = Subreddit(self.reddit, _data={"display_name": "Dummy1", "n": 2}) subreddit3 = Subreddit(self.reddit, _data={"display_name": "dummy3", "n": 2}) assert subreddit1 == subreddit1 assert subreddit2 == subreddit2 assert subreddit3 == subreddit3 assert subreddit1 == subreddit2 assert subreddit2 != subreddit3 assert subreddit1 != subreddit3 assert "dummy1" == subreddit1 assert subreddit2 == "dummy1"
async def test_reply(self): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") reply = await conversation.reply("A message") assert isinstance(reply, ModmailMessage)
def test_repr(self): page = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") assert repr( page ) == "WikiPage(subreddit=Subreddit(display_name='a'), name='x')"
async def test_read__other_conversations(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") other_conversation = await subreddit.modmail("fajcu") await conversation.read(other_conversations=[other_conversation])
def test_fullname(self): subreddit = Subreddit(self.reddit, _data={ "display_name": "name", "id": "dummy" }) assert subreddit.fullname == "t5_dummy"
def test_str(self): subreddit = Subreddit(self.reddit, _data={ "display_name": "name", "id": "dummy" }) assert str(subreddit) == "name"
def test_repr(self): draft = Draft(self.reddit, id="draft_id") assert repr(draft) == "Draft(id='draft_id')" data = {"id": "draft_id", "body": "body", "kind": "markdown"} subreddit = Subreddit(None, "subreddit") draft = Draft(self.reddit, _data={ **data, "subreddit": subreddit, "title": None }) assert repr(draft) == "Draft(id='draft_id' subreddit='subreddit')" draft = Draft(self.reddit, _data={ **data, "subreddit": None, "title": "title" }) assert repr(draft) == "Draft(id='draft_id' title='title')" draft = Draft(self.reddit, _data={ **data, "subreddit": subreddit, "title": "title" }) assert repr( draft ) == "Draft(id='draft_id' subreddit='subreddit' title='title')"
async def test_update(self): emoji = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") with pytest.raises(TypeError) as excinfo: await emoji.update() assert str(excinfo.value) == "At least one attribute must be provided"
async def test_unread(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") await conversation.unread() conversation = await subreddit.modmail("faj6z") assert conversation.last_unread is not None
def test_good_encode(self): data = [ 1, "two", AsyncPRAWBase(self.reddit, _data={"_secret": "no", "3": 3}), Subreddit(self.reddit, "four"), ] assert '[1, "two", {"3": 3}, "four"]' == dumps(data, cls=WidgetEncoder)
async def test_mute(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") await conversation.mute() conversation = await subreddit.modmail("faj6z") assert conversation.user.mute_status["isMuted"]
async def test_highlight(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") await conversation.highlight() conversation = await subreddit.modmail("faj6z") assert conversation.is_highlighted
async def test_subreddit_rules_call(self): with pytest.raises(DeprecationWarning) as excinfo: subreddit = Subreddit(self.reddit, display_name="test") await subreddit.rules() assert ( excinfo.value.args[0] == "Calling SubredditRules to get a list of rules is deprecated. Remove the parentheses to use the iterator. View the Async PRAW documentation on how to change the code in order to use the iterator (https://asyncpraw.readthedocs.io/en/latest/code_overview/other/subredditrules.html#asyncpraw.models.reddit.rules.SubredditRules.__call__)." )
async def test_unarchive(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("faj6z") await conversation.unarchive() conversation = await subreddit.modmail("faj6z") assert conversation.state == 1
async def test_submit_gallery__too_long_caption(self): message = "Caption must be 180 characters or less." subreddit = Subreddit(self.reddit, display_name="name") caption = "wayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy too long caption" with pytest.raises(TypeError) as excinfo: await subreddit.submit_gallery( "Cool title", images=[{"image_path": __file__, "caption": caption}] ) assert str(excinfo.value) == message
async def test_submit_gallery__invalid_path(self): message = "'invalid_image_path' is not a valid image path." subreddit = Subreddit(self.reddit, display_name="name") with pytest.raises(TypeError) as excinfo: await subreddit.submit_gallery( "Cool title", images=[{"image_path": "invalid_image_path"}] ) assert str(excinfo.value) == message
async def test_submit_gallery__missing_path(self): message = "'image_path' is required." subreddit = Subreddit(self.reddit, display_name="name") with pytest.raises(TypeError) as excinfo: await subreddit.submit_gallery( "Cool title", images=[{"caption": "caption"}, {"caption": "caption2"}] ) assert str(excinfo.value) == message
def test_bad_encode(self): data = [ 1, "two", SubredditWidgetsModeration( Subreddit(self.reddit, display_name="subreddit"), self.reddit), ] with raises(TypeError): dumps(data, cls=WidgetEncoder) # should throw TypeError
async def test_submit_inline_media__invalid_path(self): message = "'invalid_image_path' is not a valid file path." subreddit = Subreddit(self.reddit, display_name="name") gif = InlineGif("invalid_image_path", "optional caption") image = InlineImage("invalid_image_path", "optional caption") video = InlineVideo("invalid_image_path", "optional caption") selftext = "Text with {gif1}, {image1}, and {video1} inline" media = {"gif1": gif, "image1": image, "video1": video} with pytest.raises(ValueError) as excinfo: await subreddit.submit("title", selftext=selftext, inline_media=media) assert str(excinfo.value) == message
async def test_mute_duration(self, _): self.reddit.read_only = False subreddit = Subreddit(self.reddit, "all") with self.use_cassette(): conversation = await subreddit.modmail("g46rw") await conversation.mute(7) conversation = await subreddit.modmail("g46rw") assert conversation.user.mute_status["isMuted"] diff = datetime.fromisoformat( conversation.user.mute_status["endDate"] ) - datetime.fromisoformat(conversation.mod_actions[-1].date) assert diff.days == 6 # 6 here because it is not 7 whole days
def test_hash(self): emoji1 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") emoji2 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="2") emoji3 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="1") emoji4 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "A"), name="x") emoji5 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="X") emoji6 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="x") assert hash(emoji1) == hash(emoji1) assert hash(emoji2) == hash(emoji2) assert hash(emoji3) == hash(emoji3) assert hash(emoji1) != hash(emoji2) assert hash(emoji1) != hash(emoji3) assert hash(emoji1) == hash(emoji4) assert hash(emoji1) != hash(emoji5) assert hash(emoji1) != hash(emoji6)
def test_equality(self): emoji1 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") emoji2 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="2") emoji3 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="1") emoji4 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "A"), name="x") emoji5 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="X") emoji6 = Emoji(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="x") assert emoji1 == emoji1 assert emoji1 == "x" assert emoji2 == emoji2 assert emoji3 == emoji3 assert emoji1 != emoji2 assert emoji1 != emoji3 assert emoji1 == emoji4 assert emoji1 != emoji5 assert emoji1 != emoji6 assert emoji1 != 5
def test_hash(self): page1 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") page2 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="2") page3 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="1") page4 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "A"), name="x") page5 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="X") assert hash(page1) == hash(page1) assert hash(page2) == hash(page2) assert hash(page3) == hash(page3) assert hash(page1) != hash(page2) assert hash(page1) != hash(page3) assert hash(page1) == hash(page4) assert hash(page1) == hash(page5)
def test_equality(self): page1 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="x") page2 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="2") page3 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "b"), name="1") page4 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "A"), name="x") page5 = WikiPage(self.reddit, subreddit=Subreddit(self.reddit, "a"), name="X") assert page1 == page1 assert page2 == page2 assert page3 == page3 assert page1 != page2 assert page1 != page3 assert page1 == page4 assert page1 == page5
async def get_post(self, subreddit: Subreddit, search_query: str): search, limit, sort, syntax, time = self.parse_query(search_query) limit = int(limit) if limit else None result = [] if search != '': async for submission in subreddit.search( query=search, sort=sort if sort else 'relevance', syntax=syntax if syntax else 'lucene', time_filter=time if time else 'all', limit=limit if limit else 100): result.append(submission) else: if sort == 'hot': result = [ submission async for submission in subreddit.hot( limit=limit if limit else 100) ] elif sort == 'new': result = [ submission async for submission in subreddit.new( limit=limit if limit else 100) ] elif sort == 'top': result = [ submission async for submission in subreddit.top( limit=limit if limit else 100) ] else: result = [ submission async for submission in subreddit.random_rising( limit=limit if limit else 100) ] return result