async def test_unhide_multiple(self): self.reddit.read_only = False submissions = [ Submission(self.reddit, "fewoh"), Submission(self.reddit, "c625v"), ] with self.use_cassette(): await Submission(self.reddit, "1eipl7").unhide(submissions)
def test_hash(self): submission1 = Submission(self.reddit, _data={"id": "dummy1", "n": 1}) submission2 = Submission(self.reddit, _data={"id": "Dummy1", "n": 2}) submission3 = Submission(self.reddit, _data={"id": "dummy3", "n": 2}) assert hash(submission1) == hash(submission1) assert hash(submission2) == hash(submission2) assert hash(submission3) == hash(submission3) assert hash(submission1) == hash(submission2) assert hash(submission2) != hash(submission3) assert hash(submission1) != hash(submission3)
def test_equality(self): submission1 = Submission(self.reddit, _data={"id": "dummy1", "n": 1}) submission2 = Submission(self.reddit, _data={"id": "Dummy1", "n": 2}) submission3 = Submission(self.reddit, _data={"id": "dummy3", "n": 2}) assert submission1 == submission1 assert submission2 == submission2 assert submission3 == submission3 assert submission1 == submission2 assert submission2 != submission3 assert submission1 != submission3 assert "dummy1" == submission1 assert submission2 == "dummy1"
def test_id_from_url__invalid_urls(self): urls = [ "", "1", "/", "my.it/2gmzqe", "http://my.it/_", "https://redd.it/_/", "http://reddit.com/comments/_/2gmzqe", "https://reddit.com/r/wallpapers/", "https://reddit.com/r/wallpapers", ] for url in urls: with pytest.raises(ClientException): Submission.id_from_url(url)
async def monitor_async(self, subreddit: str, **kwargs): """ Monitors submissions for the subreddit Yields submissions as they come in until instructed to stop. """ self.logger.debug(f'Monitoring submissions in {subreddit}') subreddit = await self.connection.subreddit(subreddit) args = self.stream_args(**kwargs) stream = subreddit.stream.submissions(**args) async for submission in stream: if not self.run: self.logger.info('Breaking monitoring...') break if not isinstance(submission, Submission): self.__log_type_warning(Submission(), submission) continue # Check filters for f in self.filters: if f.test(submission): continue self.logger.info(f'Handling submission: {submission.id}') # Invoke each handler for h in self.handlers: h.handle(submission)
async def test_add_removal_reason(self, _): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") await submission.mod.remove() await submission.mod._add_removal_reason(mod_note="Foobar", reason_id="159bqhvme3rxe")
async def test_edit_invalid(self, _): self.reddit.read_only = False self.reddit.validate_on_submit = True with self.use_cassette(): submission = Submission(self.reddit, "hmkfoy") with pytest.raises(RedditAPIException): await submission.edit("rewtwert")
async def test_pin__invalid_num(self): self.reddit.read_only = False with self.use_cassette(): await self.reddit.user.pin(Submission(self.reddit, "rmi7hx"), num=7) submission = await self.async_next( (await self.reddit.user.me()).new(limit=1)) assert submission.id == "rmi7hx"
async def test_reply(self): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") comment = await submission.reply("Test reply") assert comment.author == pytest.placeholders.username assert comment.body == "Test reply" assert comment.parent_id == submission.fullname
async def test_delete(self, _): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") await submission.delete() await submission.load() assert submission.author is None assert submission.selftext == "[deleted]"
async def test_add_removal_reason_without_id_or_note(self, _): self.reddit.read_only = False with self.use_cassette(): with pytest.raises(ValueError) as excinfo: submission = Submission(self.reddit, "hmkbt8") await submission.mod.remove() await submission.mod._add_removal_reason() assert excinfo.value.args[0].startswith("mod_note cannot be blank")
async def test_raise_api_exception(self): message = "USER_REQUIRED: 'Please log in to do that.'" with self.use_cassette(): submission = Submission(self.reddit, "4b536h") with pytest.raises(RedditAPIException) as excinfo: await submission.mod.approve() assert excinfo.value.items[0].error_type == "USER_REQUIRED" assert str(excinfo.value.items[0]) == message
def test_construct_failure(self): message = "Exactly one of `id`, `url`, or `_data` must be provided." with pytest.raises(TypeError) as excinfo: Submission(self.reddit) assert str(excinfo.value) == message with pytest.raises(TypeError) as excinfo: Submission(self.reddit, id="dummy", url="dummy") assert str(excinfo.value) == message with pytest.raises(TypeError) as excinfo: Submission(self.reddit, "dummy", _data={"id": "dummy"}) assert str(excinfo.value) == message with pytest.raises(TypeError) as excinfo: Submission(self.reddit, url="dummy", _data={"id": "dummy"}) assert str(excinfo.value) == message with pytest.raises(TypeError) as excinfo: Submission(self.reddit, "dummy", "dummy", {"id": "dummy"}) assert str(excinfo.value) == message with pytest.raises(ValueError): Submission(self.reddit, "") with pytest.raises(ValueError): Submission(self.reddit, url="")
async def test_replace__all_large(self): with self.use_cassette(match_requests_on=["uri", "method", "body"]): submission = Submission(self.reddit, "n49rw") comments = await submission.comments() skipped = await comments.replace_more(None, threshold=0) assert len(skipped) == 0 assert all([isinstance(x, Comment) for x in await comments.list()]) assert len(await comments.list()) > 1000 assert len(await comments.list()) == len(submission._comments_by_id)
async def test_pin__remove_num(self): self.reddit.read_only = False self.reddit.validate_on_submit = True with self.use_cassette(): await self.reddit.user.pin(Submission(self.reddit, "rmi7ab"), num=1, state=False) submission = await self.async_next( (await self.reddit.user.me()).new(limit=1)) assert submission.id != "rmi7ab"
def test_id_from_url(self): urls = [ "http://my.it/2gmzqe", "https://redd.it/2gmzqe", "https://redd.it/2gmzqe/", "http://reddit.com/comments/2gmzqe", "https://www.reddit.com/r/redditdev/comments/2gmzqe/praw_https_enabled_praw_testing_needed/", "https://www.reddit.com/gallery/2gmzqe", ] for url in urls: assert Submission.id_from_url(url) == "2gmzqe", url
async def test_choices(self, _): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") expected = [{ "flair_css_class": "", "flair_position": "right", "flair_template_id": "94f13282-e2e8-11e8-8291-0eae4e167256", "flair_text": "AF", "flair_text_editable": True, }] choices = await submission.flair.choices() assert expected == choices
async def test_enable_inbox_replies(self): self.reddit.read_only = False submission = Submission(self.reddit, "hmkbt8") with self.use_cassette(): await submission.enable_inbox_replies()
def test_str(self): submission = Submission(self.reddit, _data={"id": "dummy"}) assert str(submission) == "dummy"
async def test_edit(self, _): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") await submission.edit("New text") assert submission.selftext == "New text"
async def test_duplicates(self): with self.use_cassette(): submission = Submission(self.reddit, "avj2v") assert len(await self.async_list(submission.duplicates())) > 0
def test_shortlink(self): submission = Submission(self.reddit, _data={"id": "dummy"}) assert submission.shortlink == "https://redd.it/dummy"
def test_construct_from_url(self): assert Submission(self.reddit, url="http://my.it/2gmzqe") == "2gmzqe"
async def test_select(self, _): self.reddit.read_only = False with self.use_cassette(): submission = Submission(self.reddit, "hmkbt8") await submission.flair.select( "94f13282-e2e8-11e8-8291-0eae4e167256")
def test_fullname(self): submission = Submission(self.reddit, _data={"id": "dummy"}) assert submission.fullname == "t3_dummy"
def test_repr(self): submission = Submission(self.reddit, id="2gmzqe") assert repr(submission) == "Submission(id='2gmzqe')"
async def test_pin__ignore_conflicts(self): self.reddit.read_only = False with self.use_cassette(): await self.reddit.user.pin(Submission(self.reddit, "rmi79w")) await self.reddit.user.pin(Submission(self.reddit, "rmi79w"))
async def test_pin__removed_submission(self): self.reddit.read_only = False with self.use_cassette(): with pytest.raises(asyncprawcore.exceptions.BadRequest): await self.reddit.user.pin(Submission(self.reddit, "rmi7ab"))