"""Miscellaneous tests."""
from unittest import TestCase
from tests.utils import TestCaseWithServer
-from plomtask.http import ParamsParser, PostvarsParser
+from plomtask.http import InputsParser
from plomtask.exceptions import BadFormatException
class TestsSansServer(TestCase):
"""Tests that do not require DB setup or a server."""
- def test_params_parser(self) -> None:
- """Test behavior of ParamsParser."""
- self.assertEqual('',
- ParamsParser({}).get_str('foo'))
- self.assertEqual('bar',
- ParamsParser({}).get_str('foo', 'bar'))
- self.assertEqual('bar',
- ParamsParser({'foo': []}).get_str('foo', 'bar'))
- self.assertEqual('baz',
- ParamsParser({'foo': ['baz']}).get_str('foo', 'bar'))
- self.assertEqual(None,
- ParamsParser({}).get_int_or_none('foo'))
- self.assertEqual(None,
- ParamsParser({'foo': []}).get_int_or_none('foo'))
- self.assertEqual(None,
- ParamsParser({'foo': ['']}).get_int_or_none('foo'))
- self.assertEqual(0,
- ParamsParser({'foo': ['0']}).get_int_or_none('foo'))
+ def test_InputsParser_get_str_or_fail(self) -> None:
+ """Test InputsParser.get_str."""
+ parser = InputsParser({})
with self.assertRaises(BadFormatException):
- ParamsParser({'foo': ['None']}).get_int_or_none('foo')
+ parser.get_str_or_fail('foo')
+ self.assertEqual('bar', parser.get_str_or_fail('foo', 'bar'))
+ parser = InputsParser({'foo': []})
with self.assertRaises(BadFormatException):
- ParamsParser({'foo': ['0.1']}).get_int_or_none('foo')
- self.assertEqual(23,
- ParamsParser({'foo': ['23']}).get_int_or_none('foo'))
+ parser.get_str_or_fail('foo')
+ self.assertEqual('bar', parser.get_str_or_fail('foo', 'bar'))
+ parser = InputsParser({'foo': ['baz']})
+ self.assertEqual('baz', parser.get_str_or_fail('foo', 'bar'))
+ parser = InputsParser({'foo': ['baz', 'quux']})
+ self.assertEqual('baz', parser.get_str_or_fail('foo', 'bar'))
- def test_postvars_parser(self) -> None:
- """Test behavior of PostvarsParser."""
- self.assertEqual([],
- PostvarsParser({}).get_all_str('foo'))
- self.assertEqual([],
- PostvarsParser({'foo': []}).get_all_str('foo'))
- self.assertEqual(['bar'],
- PostvarsParser({'foo': ['bar']}).get_all_str('foo'))
- self.assertEqual(['bar', 'baz'],
- PostvarsParser({'foo': ['bar', 'baz']}).
- get_all_str('foo'))
- self.assertEqual([],
- PostvarsParser({}).get_all_int('foo'))
- self.assertEqual([],
- PostvarsParser({'foo': []}).get_all_int('foo'))
- self.assertEqual([],
- PostvarsParser({'foo': ['']}).get_all_int('foo'))
- self.assertEqual([0],
- PostvarsParser({'foo': ['0']}).get_all_int('foo'))
- self.assertEqual([0, 17],
- PostvarsParser({'foo': ['0', '17']}).
- get_all_int('foo'))
- with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['0.1', '17']}).get_all_int('foo')
- with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['None', '17']}).get_all_int('foo')
- with self.assertRaises(BadFormatException):
- PostvarsParser({}).get_str('foo')
+ def test_InputsParser_get_str(self) -> None:
+ """Test InputsParser.get_str."""
+ parser = InputsParser({})
+ self.assertEqual(None, parser.get_str('foo'))
+ self.assertEqual('bar', parser.get_str('foo', 'bar'))
+ parser = InputsParser({'foo': []})
+ self.assertEqual(None, parser.get_str('foo'))
+ self.assertEqual('bar', parser.get_str('foo', 'bar'))
+ parser = InputsParser({'foo': ['baz']})
+ self.assertEqual('baz', parser.get_str('foo', 'bar'))
+ parser = InputsParser({'foo': ['baz', 'quux']})
+ self.assertEqual('baz', parser.get_str('foo', 'bar'))
+
+ def test_InputsParser_get_all_of_key_prefixed(self) -> None:
+ """Test InputsParser.get_all_of_key_prefixed."""
+ parser = InputsParser({})
+ self.assertEqual({},
+ parser.get_all_of_key_prefixed(''))
+ self.assertEqual({},
+ parser.get_all_of_key_prefixed('foo'))
+ parser = InputsParser({'foo': ['bar']})
+ self.assertEqual({'foo': ['bar']},
+ parser.get_all_of_key_prefixed(''))
+ parser = InputsParser({'x': ['y', 'z']})
+ self.assertEqual({'': ['y', 'z']},
+ parser.get_all_of_key_prefixed('x'))
+ parser = InputsParser({'xx': ['y', 'Z']})
+ self.assertEqual({'x': ['y', 'Z']},
+ parser.get_all_of_key_prefixed('x'))
+ parser = InputsParser({'xx': ['y']})
+ self.assertEqual({},
+ parser.get_all_of_key_prefixed('xxx'))
+ parser = InputsParser({'xxx': ['x'], 'xxy': ['y'], 'xyy': ['z']})
+ self.assertEqual({'x': ['x'], 'y': ['y']},
+ parser.get_all_of_key_prefixed('xx'))
+ parser = InputsParser({'xxx': ['x', 'y'], 'xxy': ['y', 'z']})
+ self.assertEqual({'x': ['x', 'y'], 'y': ['y', 'z']},
+ parser.get_all_of_key_prefixed('xx'))
+
+ def test_InputsParser_get_int_or_none(self) -> None:
+ """Test InputsParser.get_int_or_none."""
+ parser = InputsParser({})
+ self.assertEqual(None, parser.get_int_or_none('foo'))
+ parser = InputsParser({'foo': []})
+ self.assertEqual(None, parser.get_int_or_none('foo'))
+ parser = InputsParser({'foo': ['']})
+ self.assertEqual(None, parser.get_int_or_none('foo'))
+ parser = InputsParser({'foo': ['0']})
+ self.assertEqual(0, parser.get_int_or_none('foo'))
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': []}).get_str('foo')
- self.assertEqual('bar',
- PostvarsParser({'foo': ['bar']}).get_str('foo'))
- self.assertEqual('',
- PostvarsParser({'foo': ['', 'baz']}).get_str('foo'))
+ InputsParser({'foo': ['None']}).get_int_or_none('foo')
with self.assertRaises(BadFormatException):
- PostvarsParser({}).get_int('foo')
+ InputsParser({'foo': ['0.1']}).get_int_or_none('foo')
+ parser = InputsParser({'foo': ['23']})
+ self.assertEqual(23, parser.get_int_or_none('foo'))
+
+ def test_InputsParser_get_float_or_fail(self) -> None:
+ """Test InputsParser.get_float_or_fail."""
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': []}).get_int('foo')
+ InputsParser({}).get_float_or_fail('foo')
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['']}).get_int('foo')
+ InputsParser({'foo': ['']}).get_float_or_fail('foo')
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['bar']}).get_int('foo')
+ InputsParser({'foo': ['bar']}).get_float_or_fail('foo')
+ parser = InputsParser({'foo': ['0']})
+ self.assertEqual(0, parser.get_float_or_fail('foo'))
+ parser = InputsParser({'foo': ['0.1']})
+ self.assertEqual(0.1, parser.get_float_or_fail('foo'))
+ parser = InputsParser({'foo': ['1.23', '456']})
+ self.assertEqual(1.23, parser.get_float_or_fail('foo'))
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['0.1']}).get_int('foo')
- self.assertEqual(0,
- PostvarsParser({'foo': ['0']}).get_int('foo'))
- self.assertEqual(17,
- PostvarsParser({'foo': ['17', '23']}).get_int('foo'))
+ InputsParser({}).get_float_or_fail('foo')
with self.assertRaises(BadFormatException):
- PostvarsParser({}).get_float('foo')
+ InputsParser({'foo': []}).get_float_or_fail('foo')
+
+ def test_InputsParser_get_bool(self) -> None:
+ """Test InputsParser.get_bool."""
+ self.assertEqual(0, InputsParser({}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'val': ['foo']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'val': ['True']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': []}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['None']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['0']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['bar']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['bar',
+ 'baz']}).get_bool('foo'))
+ self.assertEqual(0, InputsParser({'foo': ['False']}).get_bool('foo'))
+ self.assertEqual(1, InputsParser({'foo': ['true']}).get_bool('foo'))
+ self.assertEqual(1, InputsParser({'foo': ['True']}).get_bool('foo'))
+ self.assertEqual(1, InputsParser({'foo': ['1']}).get_bool('foo'))
+ self.assertEqual(1, InputsParser({'foo': ['on']}).get_bool('foo'))
+
+ def test_InputsParser_get_all_str(self) -> None:
+ """Test InputsParser.get_all_str."""
+ parser = InputsParser({})
+ self.assertEqual([], parser.get_all_str('foo'))
+ parser = InputsParser({'foo': []})
+ self.assertEqual([], parser.get_all_str('foo'))
+ parser = InputsParser({'foo': ['bar']})
+ self.assertEqual(['bar'], parser.get_all_str('foo'))
+ parser = InputsParser({'foo': ['bar', 'baz']})
+ self.assertEqual(['bar', 'baz'], parser.get_all_str('foo'))
+
+ def test_InputsParser_get_all_int(self) -> None:
+ """Test InputsParser.get_all_int."""
+ parser = InputsParser({})
+ self.assertEqual([], parser.get_all_int('foo'))
+ parser = InputsParser({'foo': []})
+ self.assertEqual([], parser.get_all_int('foo'))
+ parser = InputsParser({'foo': ['']})
+ parser.get_all_int('foo')
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': []}).get_float('foo')
+ parser.get_all_int('foo', fail_on_empty=True)
+ parser = InputsParser({'foo': ['0']})
+ self.assertEqual([0], parser.get_all_int('foo'))
+ parser = InputsParser({'foo': ['0', '17']})
+ self.assertEqual([0, 17], parser.get_all_int('foo'))
+ parser = InputsParser({'foo': ['0.1', '17']})
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['']}).get_float('foo')
+ parser.get_all_int('foo')
+ parser = InputsParser({'foo': ['None', '17']})
with self.assertRaises(BadFormatException):
- PostvarsParser({'foo': ['bar']}).get_float('foo')
- self.assertEqual(0,
- PostvarsParser({'foo': ['0']}).get_float('foo'))
- self.assertEqual(0.1,
- PostvarsParser({'foo': ['0.1']}).get_float('foo'))
- self.assertEqual(1.23,
- PostvarsParser({'foo': ['1.23', '456']}).
- get_float('foo'))
+ parser.get_all_int('foo')
class TestsWithServer(TestCaseWithServer):
"""Tests against our HTTP server/handler (and database)."""
def test_do_GET(self) -> None:
- """Test / redirect, and unknown targets failing."""
+ """Test GET / redirect, and unknown targets failing."""
self.conn.request('GET', '/')
self.check_redirect('/day')
self.check_get('/foo', 404)