X-Git-Url: http://git.scottworley.com/paperdoorknob/blobdiff_plain/41b11505f297962d099b75a0372a4068e26773a5..705973e749e5a9da0453508dbd23de434a0fdc65:/fetch_test.py diff --git a/fetch_test.py b/fetch_test.py new file mode 100644 index 0000000..6bdf69e --- /dev/null +++ b/fetch_test.py @@ -0,0 +1,57 @@ +# paperdoorknob: Print glowfic +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, version 3. + + +import unittest +from requests import HTTPError +from testing.fakeserver import FakeGlowficServer +from fetch import CachingFetcher, DirectFetcher + +TIMEOUT = 8 + + +class TestFetch(unittest.TestCase): + def setUp(self) -> None: + self._server = self.enterContext(FakeGlowficServer()) + self._port = self._server.port() + + def testDirectFetch(self) -> None: + with DirectFetcher(TIMEOUT) as f: + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 1) + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 2) + + def testFetchCaching(self) -> None: + with CachingFetcher("testcache", TIMEOUT) as f: + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 1) + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 1) + + def testFetchPersistentCaching(self) -> None: + with CachingFetcher("testpersistentcache", TIMEOUT) as f: + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 1) + with CachingFetcher("testpersistentcache", TIMEOUT) as f: + f.fetch(f"http://localhost:{self._port}") + self.assertEqual(self._server.request_count(), 1) + + def testFetchErrors(self) -> None: + with DirectFetcher(TIMEOUT) as f: + with self.assertRaises(HTTPError): + f.fetch(f"http://localhost:{self._port}/not_found") + with self.assertRaises(HTTPError): + f.fetch(f"http://localhost:{self._port}/server_error") + with CachingFetcher("testerrorscache", TIMEOUT) as f: + with self.assertRaises(HTTPError): + f.fetch(f"http://localhost:{self._port}/not_found") + with self.assertRaises(HTTPError): + f.fetch(f"http://localhost:{self._port}/server_error") + + +if __name__ == '__main__': + unittest.main()