Ejemplo n.º 1
0
 def test_invalid_config(self):
     with pytest.raises(ValueError) as excinfo:
         Reddit(timeout="test", **self.REQUIRED_DUMMY_SETTINGS)
     assert (
         excinfo.value.args[0] ==
         "An incorrect config type was given for option timeout. The expected type is int, but the given value is test."
     )
     with pytest.raises(ValueError) as excinfo:
         Reddit(ratelimit_seconds="test", **self.REQUIRED_DUMMY_SETTINGS)
     assert (
         excinfo.value.args[0] ==
         "An incorrect config type was given for option ratelimit_seconds. The expected type is int, but the given value is test."
     )
Ejemplo n.º 2
0
def loadReddit():
    reddit = Reddit(
        client_id=Settings.SECRETS["REDDIT_CLIENT_ID"],
        client_secret=Settings.SECRETS["REDDIT_CLIENT_SECRET"],
        user_agent=Settings._BOT_NAME,
    )
    return reddit
Ejemplo n.º 3
0
def installed_app():
    return Reddit(
        client_id="dummy client",
        client_secret=None,
        redirect_uri="https://dummy.tld/",
        user_agent="dummy",
    )
Ejemplo n.º 4
0
def web_app():
    return Reddit(
        client_id="dummy client",
        client_secret="dummy secret",
        redirect_uri="https://dummy.tld/",
        user_agent="dummy",
    )
Ejemplo n.º 5
0
 async def setUp(self):
     """Setup runs before all test cases."""
     self.reddit = Reddit(
         client_id="dummy", client_secret="dummy", user_agent="dummy"
     )
     # Unit tests should never issue requests
     self.reddit._core._requestor._http = None
Ejemplo n.º 6
0
    def __init__(self, bot):
        super().__init__(bot)

        if rcfg := bot.config.get('reddit', None):
            self.rapi = Reddit(client_id=rcfg['id'],
                               client_secret=rcfg['secret'],
                               user_agent='python:discord.claymore:v2')
Ejemplo n.º 7
0
    def auth(self, client_id: str, client_secret: str):
        user_agent = ('Mozilla/5.0 (Windows NT 6.2; WOW64; rv:53.0) AppleWebKit/534.50.2 '
                      'Firefox/49.0 Chrome/58.0.2902.81 Chromium/49.0.2623.108 OPR/43.0.2442.849')

        self.reddit_session = Reddit(client_id=client_id,
                                     client_secret=client_secret,
                                     user_agent=user_agent)
Ejemplo n.º 8
0
def loadReddit() -> Reddit:
    """Performs the connection to the Reddit API"""
    reddit = Reddit(
        client_id=Settings.SECRETS["REDDIT_CLIENT_ID"],
        client_secret=Settings.SECRETS["REDDIT_CLIENT_SECRET"],
        user_agent=Settings._BOT_NAME,
    )
    return reddit
Ejemplo n.º 9
0
 def setup_reddit(self):
     self.reddit = Reddit(
         client_id=pytest.placeholders.client_id,
         client_secret=pytest.placeholders.client_secret,
         redirect_uri=pytest.placeholders.redirect_uri,
         user_agent=pytest.placeholders.user_agent,
         username=None,
     )
Ejemplo n.º 10
0
def script_app_with_password():
    return Reddit(
        client_id="dummy client",
        client_secret="dummy secret",
        password="******",
        user_agent="dummy",
        username="******",
    )
Ejemplo n.º 11
0
 def test_url__web_app_without_redirect_uri(self):
     reddit = Reddit(
         client_id="dummy client",
         client_secret="dummy secret",
         user_agent="dummy",
     )
     with pytest.raises(ClientException):
         reddit.auth.url(["dummy scope"], "dummy state")
Ejemplo n.º 12
0
async def get_reddit_connection(config: RedditConfig) -> Reddit:
    """Function for connecting to reddit with configuration."""
    return Reddit(
        user_agent=f"app by /u/{config.username}",
        client_id=config.client_id,
        client_secret=config.client_secret,
        username=config.username,
        password=config.password,
    )
Ejemplo n.º 13
0
 def test_reddit_refresh_token(self):
     with pytest.raises(DeprecationWarning):
         Reddit(
             client_id="dummy",
             client_secret=None,
             redirect_uri="dummy",
             refresh_token="dummy",
             user_agent="dummy",
         )
Ejemplo n.º 14
0
 def __init__(self, config_: Config):
     self.config: Config = config_
     super().__init__(command_prefix=self.config.prefix,
                      owner_id=self.config.owner,
                      status=Status.online)
     self.reddit: Reddit = Reddit(**asdict(self.config.reddit))
     self.video_lock: Lock = Lock()
     self.loop.create_task(self.startup())
     self.remove_command("help")  # Remove help command
Ejemplo n.º 15
0
 async def test_read_only__with_script_authenticated_core(self):
     async with Reddit(password="******",
                       username="******",
                       **self.REQUIRED_DUMMY_SETTINGS) as reddit:
         assert not reddit.read_only
         reddit.read_only = True
         assert reddit.read_only
         reddit.read_only = False
         assert not reddit.read_only
Ejemplo n.º 16
0
 async def test_read_only__without_untrusted_authenticated_core(self):
     required_settings = self.REQUIRED_DUMMY_SETTINGS.copy()
     required_settings["client_secret"] = None
     async with Reddit(password=None, username=None, **required_settings) as reddit:
         assert reddit.read_only
         with pytest.raises(ClientException):
             reddit.read_only = False
         assert reddit.read_only
         reddit.read_only = True
         assert reddit.read_only
Ejemplo n.º 17
0
    async def test_requestor_kwargs(self):
        session = AsyncMock(headers={})
        reddit = Reddit(
            client_id="dummy",
            client_secret="dummy",
            user_agent="dummy",
            requestor_kwargs={"session": session},
        )

        assert reddit._core._requestor._http is session
Ejemplo n.º 18
0
 def test_reddit__required_settings_set_to_none(self):
     required_settings = self.REQUIRED_DUMMY_SETTINGS.copy()
     del required_settings["client_secret"]
     for setting in required_settings:
         with pytest.raises(ClientException) as excinfo:
             settings = self.REQUIRED_DUMMY_SETTINGS.copy()
             settings[setting] = None
             Reddit(**settings)
         assert str(excinfo.value).startswith(
             f"Required configuration setting {setting!r} missing.")
Ejemplo n.º 19
0
 def set_up_record(self):
     if not self._overrode_reddit_setup:
         if pytest.placeholders.refresh_token != "placeholder_refresh_token":
             self.reddit = Reddit(
                 requestor_kwargs={"session": self._session},
                 client_id=pytest.placeholders.client_id,
                 client_secret=pytest.placeholders.client_secret,
                 user_agent=pytest.placeholders.user_agent,
                 refresh_token=pytest.placeholders.refresh_token,
             )
Ejemplo n.º 20
0
 async def test_read_only__without_trusted_authenticated_core(self):
     async with Reddit(password=None,
                       username=None,
                       **self.REQUIRED_DUMMY_SETTINGS) as reddit:
         assert reddit.read_only
         with pytest.raises(ClientException):
             reddit.read_only = False
         assert reddit.read_only
         reddit.read_only = True
         assert reddit.read_only
Ejemplo n.º 21
0
async def test_github_actions():
    reddit = Reddit(
        client_id=os.getenv("NETWORK_TEST_CLIENT_ID"),
        client_secret=os.getenv("NETWORK_TEST_CLIENT_SECRET"),
        user_agent="GitHub Actions CI Testing",
    )
    subreddit = await reddit.subreddit("all")
    async for submission in subreddit.hot():
        assert isinstance(submission, Submission)
        break
Ejemplo n.º 22
0
 async def test_reddit_token_manager(self):
     with pytest.raises(DeprecationWarning):
         async with Reddit(
                 client_id="dummy",
                 client_secret=None,
                 redirect_uri="dummy",
                 user_agent="dummy",
                 token_manager=FileTokenManager("name"),
         ) as reddit:
             reddit._core._requestor._http = None
Ejemplo n.º 23
0
 def setup_reddit(self):
     self._session = aiohttp.ClientSession()
     self.reddit = Reddit(
         requestor_kwargs={"session": self._session},
         client_id=pytest.placeholders.client_id,
         client_secret=pytest.placeholders.client_secret,
         password=pytest.placeholders.password,
         user_agent=pytest.placeholders.user_agent,
         username=pytest.placeholders.username,
     )
Ejemplo n.º 24
0
 def test_reddit__missing_required_settings(self):
     for setting in self.REQUIRED_DUMMY_SETTINGS:
         with pytest.raises(ClientException) as excinfo:
             settings = self.REQUIRED_DUMMY_SETTINGS.copy()
             settings[setting] = Config.CONFIG_NOT_SET
             Reddit(**settings)
         assert str(excinfo.value).startswith(
             f"Required configuration setting {setting!r} missing.")
         if setting == "client_secret":
             assert "set to None" in str(excinfo.value)
Ejemplo n.º 25
0
 def test_conflicting_settings(self):
     with pytest.raises(TypeError) as excinfo:
         Reddit(
             refresh_token="dummy",
             token_manager="dummy",
             **self.REQUIRED_DUMMY_SETTINGS,
         )
     assert (
         str(excinfo.value) ==
         "``refresh_token`` setting cannot be provided when providing ``token_manager``"
     )
Ejemplo n.º 26
0
    async def test_request__badrequest_with_no_json_body(self, mock_session):
        response = mock.Mock(status_code=400)
        response.json.side_effect = ValueError
        mock_session.return_value.request = mock.Mock(
            side_effect=BadRequest(response=response)
        )

        reddit = Reddit(client_id="dummy", client_secret="dummy", user_agent="dummy")
        with pytest.raises(Exception) as excinfo:
            await reddit.request("POST", "/")
        assert str(excinfo.value).startswith("Unexpected BadRequest without json body.")
Ejemplo n.º 27
0
    async def test_request__badrequest_with_no_json_body(self, mock_session):
        response = mock.Mock(status=400, text=mock.CoroutineMock(return_value=""))
        response.json.side_effect = ValueError
        mock_session.return_value.request = mock.Mock(
            side_effect=BadRequest(response=response)
        )

        reddit = Reddit(client_id="dummy", client_secret="dummy", user_agent="dummy")
        with pytest.raises(Exception) as excinfo:
            await reddit.request("POST", "/")
        assert str(excinfo.value) == "received 400 HTTP response"
Ejemplo n.º 28
0
 async def test_read_only__with_authenticated_core(self):
     async with Reddit(
             password=None,
             username=None,
             token_manager=DummyTokenManager(),
             **self.REQUIRED_DUMMY_SETTINGS,
     ) as reddit:
         assert not reddit.read_only
         reddit.read_only = True
         assert reddit.read_only
         reddit.read_only = False
         assert not reddit.read_only
Ejemplo n.º 29
0
    def setup_reddit(self):
        self._overrode_reddit_setup = False

        self._session = aiohttp.ClientSession()
        if pytest.placeholders.refresh_token != "placeholder_refresh_token":
            self.reddit = Reddit(
                requestor_kwargs={"session": self._session},
                client_id=pytest.placeholders.client_id,
                client_secret=pytest.placeholders.client_secret,
                user_agent=pytest.placeholders.user_agent,
                refresh_token=pytest.placeholders.refresh_token,
            )
        else:
            self.reddit = Reddit(
                requestor_kwargs={"session": self._session},
                client_id=pytest.placeholders.client_id,
                client_secret=pytest.placeholders.client_secret,
                password=pytest.placeholders.password,
                user_agent=pytest.placeholders.user_agent,
                username=pytest.placeholders.username,
            )
Ejemplo n.º 30
0
 def test_read_only__with_authenticated_core__legacy_refresh_token(self):
     with Reddit(
             password=None,
             refresh_token="refresh",
             username=None,
             **self.REQUIRED_DUMMY_SETTINGS,
     ) as reddit:
         assert not reddit.read_only
         reddit.read_only = True
         assert reddit.read_only
         reddit.read_only = False
         assert not reddit.read_only