# 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 import io import subprocess import requests import requests_cache import paperdoorknob from testing.fakeserver import FakeGlowficServer TIMEOUT = 8 class TestFetch(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: replies = paperdoorknob.replies( paperdoorknob.clean( paperdoorknob.fetch( f"http://localhost:{self._port}", s, TIMEOUT))) 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: buf = io.BytesIO() paperdoorknob.process( f"http://localhost:{self._port}", s, TIMEOUT, buf, 'pandoc') self.assertEqual(buf.getvalue(), b'''\\documentclass{article} \\begin{document} This is glowfic You \\emph{sure}? Pretty sure. \\end{document} ''') def testPDF(self) -> None: with requests.session() as s: with open("test.tex", 'wb') as out: paperdoorknob.process( f"http://localhost:{self._port}", s, TIMEOUT, out, 'pandoc') subprocess.run(['pdflatex', 'test.tex'], stdin=subprocess.DEVNULL, check=True) if __name__ == '__main__': unittest.main()