def test_override(self): """ Из нескольких значений аргумента в запросе сохранится последнее переданное """ request = Request({'prop': 1}, {'prop': 2}) self.assertEqual(2, request.get('prop')) request.set('prop', 3) self.assertEqual(3, request.get('prop')) request.update({'prop': 4}) self.assertEqual(4, request.get('prop'))
class RequestTests(unittest.TestCase): def setUp(self): """ Каждый тест получает пустой объект запроса """ self.request = Request() def test_getter(self): """ Запрос инициализируется любым количеством словарей """ request = Request({'a': 1}, {'b': 2}, {'c': 3}, {'d': 4}) self.assertEqual(1, request.get('a')) self.assertEqual(2, request.get('b')) self.assertEqual(3, request.get('c')) self.assertEqual(4, request.get('d')) def test_getter_type_casting(self): """ Автоматическое приведение аргументов к нужному типу """ request = Request({'b': '2'}) self.assertEqual('2', request.get('b')) self.assertEqual(2, request.get('b', cast_type=int)) def test_getter_type_casting_exception(self): """ Выброс исключения при невозможности приведения аргументов к нужному типу """ request = Request({'a': '1abc'}) self.assertRaises(Request.ArgumentTypeError, request.get, 'a', cast_type=int) self.assertEqual('1abc', request.get('a')) def test_getter_default(self): request = Request({'a': 1}, {'b': 2}, {'c': 3}, {'d': 4}) self.assertRaises(Request.RequiredArgumentIsMissing, request.get, 'x') self.assertEqual("xxx", request.get('x', "xxx")) self.assertEqual("xxx", request.get('x', default="xxx")) self.assertEqual(None, request.get('x', None)) self.assertEqual(None, request.get('x', default=None)) def test_setter(self): """ Сеттер добавляет в запрос новый аргумент """ self.request.set('argument', True) self.assertEqual(True, self.request.get('argument')) def test_update_from_dictionary(self): """ Запрос можно обновить данными из словаря """ self.request.update({'a': 1, 'b': 2}) self.assertEqual(1, self.request.get('a')) self.assertEqual(2, self.request.get('b')) def test_update_from_non_dictionary(self): """ Попытка обновить запрос не из словаря вызывает исключение """ self.assertRaises(TypeError, self.request.update, 1) self.assertRaises(TypeError, self.request.update, []) def test_missing_argument_with_default_value(self): """ Запрос отсутствующего аргумента с указанием дефолтного значения возвращает переданное дефолтное значение """ self.assertEqual( 2, self.request.get('missing_argument_with_default_value', 2)) def test_missing_argument(self): """ Запрос отсутствующего аргумента без указания дефолтного значения вызывает исключение """ self.assertRaises(Request.RequiredArgumentIsMissing, self.request.get, 'missing_argument') def test_override(self): """ Из нескольких значений аргумента в запросе сохранится последнее переданное """ request = Request({'prop': 1}, {'prop': 2}) self.assertEqual(2, request.get('prop')) request.set('prop', 3) self.assertEqual(3, request.get('prop')) request.update({'prop': 4}) self.assertEqual(4, request.get('prop')) def test_ajax_type_detection(self): """ Ajax запрос определяется по заголовку HTTP_X_REQUESTED_WITH """ request = Request(environ={"HTTP_X_REQUESTED_WITH": "XMLHttpRequest"}) self.assertEqual(Request.Types.AJAX, request.type()) def test_pjax_type_detection(self): """ Pjax запрос определяется по двум заголовкам HTTP_X_REQUESTED_WITH и HTTP_X_PJAX """ request = Request(environ={ "HTTP_X_PJAX": True, "HTTP_X_REQUESTED_WITH": "XMLHttpRequest" }) self.assertEqual(Request.Types.PJAX, request.type()) def test_json_rpc_type_detection(self): """ JsonRPC запрос определяется по наличию аргумента q в запросе и только по нему одному """ request = Request({"q": "{}"}) self.assertEqual(Request.Types.JSON_RPC, request.type()) request = Request({"q": "{}"}, environ={"HTTP_X_REQUESTED_WITH": "XMLHttpRequest"}) self.assertEqual(Request.Types.JSON_RPC, request.type()) def test_static_type_detection(self): """ Любой запрос не являющийся Ajax, Pjax, Json_RPC является STATIC """ request = Request() self.assertEqual(Request.Types.STATIC, request.type())
class RequestTests(unittest.TestCase): def setUp(self): """ Каждый тест получает пустой объект запроса """ self.request = Request() def test_getter(self): """ Запрос инициализируется любым количеством словарей """ request = Request({'a': 1}, {'b': 2}, {'c': 3}, {'d': 4}) self.assertEqual(1, request.get('a')) self.assertEqual(2, request.get('b')) self.assertEqual(3, request.get('c')) self.assertEqual(4, request.get('d')) def test_getter_type_casting(self): """ Автоматическое приведение аргументов к нужному типу """ request = Request({'b': '2'}) self.assertEqual('2', request.get('b')) self.assertEqual(2, request.get('b', cast_type=int)) def test_getter_type_casting_exception(self): """ Выброс исключения при невозможности приведения аргументов к нужному типу """ request = Request({'a': '1abc'}) self.assertRaises(Request.ArgumentTypeError, request.get, 'a', cast_type=int) self.assertEqual('1abc', request.get('a')) def test_getter_default(self): request = Request({'a': 1}, {'b': 2}, {'c': 3}, {'d': 4}) self.assertRaises(Request.RequiredArgumentIsMissing, request.get, 'x') self.assertEqual("xxx", request.get('x', "xxx")) self.assertEqual("xxx", request.get('x', default="xxx")) self.assertEqual(None, request.get('x', None)) self.assertEqual(None, request.get('x', default=None)) def test_setter(self): """ Сеттер добавляет в запрос новый аргумент """ self.request.set('argument', True) self.assertEqual(True, self.request.get('argument')) def test_update_from_dictionary(self): """ Запрос можно обновить данными из словаря """ self.request.update({'a': 1, 'b': 2}) self.assertEqual(1, self.request.get('a')) self.assertEqual(2, self.request.get('b')) def test_update_from_non_dictionary(self): """ Попытка обновить запрос не из словаря вызывает исключение """ self.assertRaises(TypeError, self.request.update, 1) self.assertRaises(TypeError, self.request.update, []) def test_missing_argument_with_default_value(self): """ Запрос отсутствующего аргумента с указанием дефолтного значения возвращает переданное дефолтное значение """ self.assertEqual(2, self.request.get('missing_argument_with_default_value', 2)) def test_missing_argument(self): """ Запрос отсутствующего аргумента без указания дефолтного значения вызывает исключение """ self.assertRaises(Request.RequiredArgumentIsMissing, self.request.get, 'missing_argument') def test_override(self): """ Из нескольких значений аргумента в запросе сохранится последнее переданное """ request = Request({'prop': 1}, {'prop': 2}) self.assertEqual(2, request.get('prop')) request.set('prop', 3) self.assertEqual(3, request.get('prop')) request.update({'prop': 4}) self.assertEqual(4, request.get('prop')) def test_ajax_type_detection(self): """ Ajax запрос определяется по заголовку HTTP_X_REQUESTED_WITH """ request = Request(environ={"HTTP_X_REQUESTED_WITH": "XMLHttpRequest"}) self.assertEqual(Request.Types.AJAX, request.type()) def test_pjax_type_detection(self): """ Pjax запрос определяется по двум заголовкам HTTP_X_REQUESTED_WITH и HTTP_X_PJAX """ request = Request(environ={"HTTP_X_PJAX": True, "HTTP_X_REQUESTED_WITH": "XMLHttpRequest"}) self.assertEqual(Request.Types.PJAX, request.type()) def test_json_rpc_type_detection(self): """ JsonRPC запрос определяется по наличию аргумента q в запросе и только по нему одному """ request = Request({"q": "{}"}) self.assertEqual(Request.Types.JSON_RPC, request.type()) request = Request({"q": "{}"}, environ={"HTTP_X_REQUESTED_WITH": "XMLHttpRequest"}) self.assertEqual(Request.Types.JSON_RPC, request.type()) def test_static_type_detection(self): """ Любой запрос не являющийся Ajax, Pjax, Json_RPC является STATIC """ request = Request() self.assertEqual(Request.Types.STATIC, request.type())