From: David Kerkeslager Date: Fri, 13 Dec 2019 21:19:30 +0000 (-0500) Subject: Document build system, add tests X-Git-Url: https://code.kerkeslager.com/?p=fwx;a=commitdiff_plain;h=efbd07c61f4afe427be01f014538f8b951b84cad Document build system, add tests --- diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..b10ab86 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,4 @@ +To release: + + python setup.py bdist_wheel + python -m twine upload dist/fwx--py3-none-any.whl diff --git a/test_fwx.py b/test_fwx.py new file mode 100644 index 0000000..672be96 --- /dev/null +++ b/test_fwx.py @@ -0,0 +1,135 @@ +import unittest +from unittest import mock + +import phial + +class RequestTests(unittest.TestCase): + def test_GET(self): + request = phial.Request({ + 'REQUEST_METHOD': 'GET', + 'QUERY_STRING': 'foo=bar&baz=qux', + }) + + self.assertEqual(request.GET['foo'], ['bar']) + self.assertEqual(request.GET['baz'], ['qux']) + + def test_parameters(self): + request = phial.Request({ + 'REQUEST_METHOD': 'GET', + 'QUERY_STRING': 'foo=bar&baz=qux', + }) + + self.assertEqual(request.parameters['foo'], ['bar']) + self.assertEqual(request.parameters['baz'], ['qux']) + +class ResponseTests(unittest.TestCase): + def test_content_can_be_positional_argument(self): + response = phial.Response('Hello, world\n', content_type='text/plain') + + self.assertEqual(response.content, 'Hello, world\n') + + def test_content_can_be_keyword_argument(self): + response = phial.Response(content='Hello, world\n', content_type='text/plain') + + self.assertEqual(response.content, 'Hello, world\n') + + def test_status_defaults_to_200(self): + response = phial.Response( + content_type='text/plain', + content='Hello, world\n', + ) + + self.assertEqual(response.status, 200) + + def test_headers(self): + response = phial.Response( + content_type='text/plain', + content='Hello, world\n', + ) + + self.assertEqual( + response.headers, + ( + ('Content-Type', 'text/plain'), + ), + ) + +class HTMLResponseTests(unittest.TestCase): + def test_sets_content_type(self): + response = phial.HTMLResponse('Hello, world') + self.assertEqual(response.content_type, 'text/html') + +class JSONResponseTests(unittest.TestCase): + def test_sets_content_type(self): + response = phial.JSONResponse({ 'foo': 'bar', 'baz': 42 }) + self.assertEqual(response.content_type, 'application/json') + + def test_sets_content(self): + response = phial.JSONResponse({ 'foo': 'bar', 'baz': 42 }) + self.assertEqual(response.content, '{"foo": "bar", "baz": 42}') + + def test_sets_content_json(self): + response = phial.JSONResponse({ 'foo': 'bar', 'baz': 42 }) + self.assertEqual(response.content_json, {"foo": "bar", "baz": 42}) + +class TextResponseTests(unittest.TestCase): + def test_sets_content_type(self): + response = phial.TextResponse('Hello, world\n') + self.assertEqual(response.content_type, 'text/plain') + +class RedirectResponse(unittest.TestCase): + def test_takes_location_as_positional_argument(self): + response = phial.RedirectResponse('/location') + self.assertEqual(response.location, '/location') + + def test_takes_location_as_keyword_argument(self): + response = phial.RedirectResponse(location='/location') + self.assertEqual(response.location, '/location') + + def test_permanent_defaults_to_true(self): + response = phial.RedirectResponse('/location') + self.assertEqual(response.permanent, True) + + def test_status(self): + self.assertEqual( + phial.RedirectResponse('/location', permanent=True).status, + 308, + ) + self.assertEqual( + phial.RedirectResponse('/location', permanent=False).status, + 307, + ) + + def test_headers(self): + self.assertEqual( + phial.RedirectResponse('/location').headers, + (('Location','/location'),), + ) + + def test_content(self): + self.assertEqual( + phial.RedirectResponse('/location').content, + (b'',), + ) + +class _get_status_Tests(unittest.TestCase): + def test_basic(self): + self.assertEqual(phial._get_status(mock.MagicMock(status=200)), '200 OK') + self.assertEqual(phial._get_status(mock.MagicMock(status=307)), '307 Temporary Redirect') + self.assertEqual(phial._get_status(mock.MagicMock(status=308)), '308 Permanent Redirect') + +class _get_content_Tests(unittest.TestCase): + def test_bytes(self): + self.assertEqual( + phial._get_content(mock.MagicMock(content=b'Hello, world\n')), + (b'Hello, world\n',), + ) + + def test_str(self): + self.assertEqual( + phial._get_content(mock.MagicMock(content='Hello, world\n')), + (b'Hello, world\n',), + ) + +if __name__ == '__main__': + unittest.main()