Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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"
Esempio n. 4
0
 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)
Esempio n. 5
0
    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)
Esempio n. 6
0
 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")
Esempio n. 7
0
 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")
Esempio n. 8
0
 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"
Esempio n. 9
0
 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
Esempio n. 10
0
 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]"
Esempio n. 11
0
 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")
Esempio n. 12
0
 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
Esempio n. 13
0
    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="")
Esempio n. 14
0
 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)
Esempio n. 15
0
 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"
Esempio n. 16
0
 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
Esempio n. 17
0
 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
Esempio n. 18
0
 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()
Esempio n. 19
0
 def test_str(self):
     submission = Submission(self.reddit, _data={"id": "dummy"})
     assert str(submission) == "dummy"
Esempio n. 20
0
 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"
Esempio n. 21
0
 async def test_duplicates(self):
     with self.use_cassette():
         submission = Submission(self.reddit, "avj2v")
         assert len(await self.async_list(submission.duplicates())) > 0
Esempio n. 22
0
 def test_shortlink(self):
     submission = Submission(self.reddit, _data={"id": "dummy"})
     assert submission.shortlink == "https://redd.it/dummy"
Esempio n. 23
0
 def test_construct_from_url(self):
     assert Submission(self.reddit, url="http://my.it/2gmzqe") == "2gmzqe"
Esempio n. 24
0
 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")
Esempio n. 25
0
 def test_fullname(self):
     submission = Submission(self.reddit, _data={"id": "dummy"})
     assert submission.fullname == "t3_dummy"
Esempio n. 26
0
 def test_repr(self):
     submission = Submission(self.reddit, id="2gmzqe")
     assert repr(submission) == "Submission(id='2gmzqe')"
Esempio n. 27
0
 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"))
Esempio n. 28
0
 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"))