Example #1
0
    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'))
Example #2
0
    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'))
Example #3
0
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())
Example #4
0
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())