""" Tests for static parts of Twitter package """ import os import pytest pytest.importorskip("twython") from nltk.twitter import Authenticate @pytest.fixture def auth(): return Authenticate() class TestCredentials: """ Tests that Twitter credentials from a file are handled correctly. """ @classmethod def setup_class(self): self.subdir = os.path.join(os.path.dirname(__file__), "files") os.environ["TWITTER"] = "twitter-files" def test_environment(self, auth): """ Test that environment variable has been read correctly. """ fn = os.path.basename(auth.creds_subdir) assert fn == os.environ["TWITTER"] @pytest.mark.parametrize( "kwargs", [ # Each of the following scenarios should raise an error: # An empty subdir path {"subdir": ""}, # A subdir path of None {"subdir": None}, # A nonexistent directory {"subdir": "/nosuchdir"}, # 'credentials.txt' is not in default subdir, as read from `os.environ['TWITTER']` {}, # Nonexistent credentials file ('foobar') {"creds_file": "foobar"}, # 'bad_oauth1-1.txt' is incomplete {"creds_file": "bad_oauth1-1.txt"}, # The first key in credentials file 'bad_oauth1-2.txt' is ill-formed {"creds_file": "bad_oauth1-2.txt"}, # The first two lines in 'bad_oauth1-3.txt' are collapsed {"creds_file": "bad_oauth1-3.txt"}, ], ) def test_scenarios_that_should_raise_errors(self, kwargs, auth): """Various scenarios that should raise errors""" try: auth.load_creds(**kwargs) # raises ValueError (zero length field name in format) for python 2.6 # OSError for the rest except (OSError, ValueError): pass except Exception as e: pytest.fail("Unexpected exception thrown: %s" % e) else: pytest.fail("OSError exception not thrown.") def test_correct_file(self, auth): """Test that a proper file succeeds and is read correctly""" oauth = auth.load_creds(subdir=self.subdir) assert auth.creds_fullpath == os.path.join(self.subdir, auth.creds_file) assert auth.creds_file == "credentials.txt" assert oauth["app_key"] == "a"