]> git.scottworley.com Git - paperdoorknob/blobdiff - fetch_test.py
Cleaner Fetcher interface
[paperdoorknob] / fetch_test.py
diff --git a/fetch_test.py b/fetch_test.py
new file mode 100644 (file)
index 0000000..6bdf69e
--- /dev/null
@@ -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()