import unittest
import io
import subprocess
-import requests
-import requests_cache
import paperdoorknob
from testing.fakeserver import FakeGlowficServer
+from fetch import DirectFetcher
+from texify import DirectTexifier, PandocTexifier, VerifyingTexifier
TIMEOUT = 8
-class TestFetch(unittest.TestCase):
+class TestPaperDoorknob(unittest.TestCase):
def setUp(self) -> None:
self._server = self.enterContext(FakeGlowficServer())
self._port = self._server.port()
- def testFetch(self) -> None:
- with requests.session() as s:
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 1)
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 2)
-
- def testFetchCaching(self) -> None:
- with requests_cache.CachedSession() as s:
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 1)
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 1)
-
- def testFetchPersistentCaching(self) -> None:
- with requests_cache.CachedSession() as s:
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 1)
- with requests_cache.CachedSession() as s:
- paperdoorknob.fetch(f"http://localhost:{self._port}", s, TIMEOUT)
- self.assertEqual(self._server.request_count(), 1)
-
def testReplies(self) -> None:
- with requests.session() as s:
+ with DirectFetcher(TIMEOUT) as f:
replies = paperdoorknob.replies(
paperdoorknob.clean(
- paperdoorknob.fetch(
- f"http://localhost:{self._port}",
- s,
- TIMEOUT)))
+ paperdoorknob.parse(
+ f.fetch(f"http://localhost:{self._port}"))))
self.assertEqual([r.text.strip() for r in replies],
["This is glowfic", "You sure?", "Pretty sure."])
- def testFetchErrors(self) -> None:
- with requests.session() as s:
- with self.assertRaises(requests.HTTPError):
- paperdoorknob.fetch(
- f"http://localhost:{self._port}/not_found", s, TIMEOUT)
- with self.assertRaises(requests.HTTPError):
- paperdoorknob.fetch(
- f"http://localhost:{self._port}/server_error", s, TIMEOUT)
-
def testProcess(self) -> None:
- with requests.session() as s:
+ texifier = PandocTexifier('pandoc')
+ with DirectFetcher(TIMEOUT) as f:
buf = io.BytesIO()
paperdoorknob.process(
- f"http://localhost:{self._port}",
- s,
- TIMEOUT,
- buf,
- 'pandoc')
+ f"http://localhost:{self._port}", f, texifier, buf)
self.assertEqual(buf.getvalue(), b'''\\documentclass{article}
\\begin{document}
This is glowfic
\\end{document}
''')
+ def testDirectTexifier(self) -> None:
+ texifier = VerifyingTexifier(
+ PandocTexifier('pandoc'), DirectTexifier())
+ with DirectFetcher(TIMEOUT) as f:
+ buf = io.BytesIO()
+ paperdoorknob.process(
+ f"http://localhost:{self._port}", f, texifier, buf)
+
def testPDF(self) -> None:
- with requests.session() as s:
+ texifier = PandocTexifier('pandoc')
+ with DirectFetcher(TIMEOUT) as f:
with open("test.tex", 'wb') as out:
paperdoorknob.process(
- f"http://localhost:{self._port}", s, TIMEOUT, out, 'pandoc')
+ f"http://localhost:{self._port}", f, texifier, out)
subprocess.run(['pdflatex', 'test.tex'],
stdin=subprocess.DEVNULL, check=True)