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." )
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
def installed_app(): return Reddit( client_id="dummy client", client_secret=None, redirect_uri="https://dummy.tld/", user_agent="dummy", )
def web_app(): return Reddit( client_id="dummy client", client_secret="dummy secret", redirect_uri="https://dummy.tld/", user_agent="dummy", )
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
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')
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)
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
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, )
def script_app_with_password(): return Reddit( client_id="dummy client", client_secret="dummy secret", password="******", user_agent="dummy", username="******", )
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")
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, )
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", )
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
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
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
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
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.")
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, )
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
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
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
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, )
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)
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``" )
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.")
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"
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
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, )
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