def testRequestParser_choices_sensitive(self):
        req = Request.blank("/bubble?foo=BAT")

        parser = RequestParser()
        parser.add_argument("foo", choices=["bat"], case_sensitive=True),

        self.assertRaises(InvalidParameterValue, lambda: parser.parse_args(req))
    def testRequestParser_choices(self):
        req = Request.blank("/bubble?foo=bar")

        parser = RequestParser()
        parser.add_argument("foo", choices=["bat"]),

        self.assertRaises(InvalidParameterValue, lambda: parser.parse_args(req))
    def testRequestParser_parse_unicode(self):
        req = Request.blank("/bubble?foo=barß")
        parser = RequestParser()
        parser.add_argument("foo")

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], u"barß")
    def testRequestParser_choices_correct(self):
        req = Request.blank("/bubble?foo=bat")

        parser = RequestParser()
        parser.add_argument("foo", choices=["bat"]),

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], "bat")
    def testRequestParser_noParams_returnsNone(self):
        req = Request.blank('/')

        parser = RequestParser()
        parser.add_argument("foo")

        args = parser.parse_args(req)
        self.assertEqual(args['foo'], None)
    def testRequestParser_parse_append_default(self):
        req = Request.blank("/bubble?")

        parser = RequestParser()
        parser.add_argument("foo", action="append"),

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], None)
    def testRequestParser_ignore(self):
        req = Request.blank("/bubble?foo=bar")

        parser = RequestParser()
        parser.add_argument("foo", type=int, ignore=True)

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], None)
    def testRequestParser_type_is_callable(self):
        req = Request.blank("/bubble?foo=1")

        parser = RequestParser()
        parser.add_argument("foo", type=lambda x: x*2, required=False)

        args = parser.parse_args(req)
        self.assertEqual(args['foo'], "11")
    def testRequestParser_none(self):
        req = Request.blank("/bubble")

        parser = RequestParser()
        parser.add_argument("foo")

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], None)
    def testRequestParser_callable_default(self):
        req = Request.blank("/bubble")

        parser = RequestParser()
        parser.add_argument("foo", default=lambda: "bar")

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], "bar")
    def testRequestParser_default_append(self):
        req = Request.blank("/bubble")
        parser = RequestParser()
        parser.add_argument("foo", default="bar", action="append")

        args = parser.parse_args(req)

        self.assertEquals(args['foo'], "bar")
    def testRequestParser_noParamsWithDefault_returnsDefault(self):
        req = Request.blank('/')

        parser = RequestParser()
        parser.add_argument('foo', default='faa')

        args = parser.parse_args(req)
        self.assertEqual(args['foo'], 'faa')
    def testRequestParser_parse_dest(self):
        req = Request.blank("/bubble?foo=bar")

        parser = RequestParser()
        parser.add_argument("foo", dest="bat")

        args = parser.parse_args(req)
        self.assertEquals(args['bat'], "bar")
    def testRequestParser_parse_append_single(self):
        req = Request.blank("/bubble?foo=bar")

        parser = RequestParser()
        parser.add_argument("foo", action="append"),

        args = parser.parse_args(req)
        self.assertEquals(args['foo'], ["bar"])
    def testRequestParser_json_body(self):
        req = Request.blank('/', POST='{ "foo": "bar" }', environ={
            'CONTENT_TYPE': 'application/json;"',
        })
        parser = RequestParser()
        parser.add_argument("foo", type=lambda x: x*2, required=False)

        args = parser.parse_args(req)
        self.assertEqual(args['foo'], "barbar")
    def testRequestParser_replace_argument(self):
        req = Request.blank("/bubble?foo=baz")
        parser = RequestParser()
        parser.add_argument('foo', type=int)
        parser_copy = parser.copy()
        parser_copy.replace_argument('foo', type=str)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], u'baz')
    def testRequestParser_choices_types_int(self):
        parser = RequestParser()
        parser.add_argument("foo", type=int, choices=[1, 2, 3], location='json')

        req = Request.blank('/stam', POST=json.dumps(dict(foo=5)), environ={
            'CONTENT_TYPE': 'application/json;"',
        })

        self.assertRaises(InvalidParameterValue, parser.parse_args, req)
    def testRequestParser_type_is_decimal(self):
        import decimal

        parser = RequestParser()
        parser.add_argument("foo", type=decimal.Decimal, location="json")

        req = Request.blank('/stam', POST=json.dumps(dict(foo="1.0025")), environ={
            'CONTENT_TYPE': 'application/json;"',
        })
        args = parser.parse_args(req)
        self.assertEquals(args['foo'], decimal.Decimal("1.0025"))
    def test_int_range_choice_types(self):
        parser = RequestParser()
        parser.add_argument("foo", type=int, choices=range(100), location='json')

        req = Request.blank('/stam', POST=json.dumps(dict(foo=101)), environ={
            'CONTENT_TYPE': 'application/json;"',
        })
        self.assertRaises(InvalidParameterValue, parser.parse_args, req)

        req = Request.blank('/stam', POST=json.dumps(dict(foo=99)), environ={
            'CONTENT_TYPE': 'application/json;"',
        })
        args = parser.parse_args(req)
        self.assertEqual(99, args.get('foo'))
    def testRequestParser_copy(self):
        req = Request.blank("/bubble?foo=101&bar=baz")
        parser = RequestParser()
        foo_arg = Argument('foo', type=int)
        parser.args.append(foo_arg)
        parser_copy = parser.copy()

        # Deepcopy should create a clone of the argument object instead of
        # copying a reference to the new args list
        self.assertFalse(foo_arg in parser_copy.args)

        # Args added to new parser should not be added to the original
        bar_arg = Argument('bar')
        parser_copy.args.append(bar_arg)
        self.assertFalse(bar_arg in parser.args)

        args = parser_copy.parse_args(req)
        self.assertEquals(args['foo'], 101)
        self.assertEquals(args['bar'], u'baz')
    def testRequestParser_parse_required(self):
        req = Request.blank("/bubble")

        parser = RequestParser()
        parser.add_argument("foo", required=True)

        message = ''
        try:
            parser.parse_args(req)
        except MissingParameterError as e:
            message = e.message

        self.assertEquals(message, u'Missing required parameter foo in json or params')

        parser = RequestParser()
        parser.add_argument("bar", required=True, location=['values', 'cookies'])

        try:
            parser.parse_args(req)
        except Exception as e:
            message = e.message

        self.assertEquals(message, u"Missing required parameter bar in ['values', 'cookies']")
    def testRequestParser_choices_insensitive(self):
        req = Request.blank("/bubble?foo=BAT")

        parser = RequestParser()
        parser.add_argument("foo", choices=["bat"], case_sensitive=False),

        args = parser.parse_args(req)
        self.assertEquals('bat', args.get('foo'))

        # both choices and args are case_insensitive
        req = Request.blank("/bubble?foo=bat")

        parser = RequestParser()
        parser.add_argument("foo", choices=["BAT"], case_sensitive=False),

        args = parser.parse_args(req)
        self.assertEquals('bat', args.get('foo'))
    def testRequestParser_type_is_bool(self):
        import decimal

        parser = RequestParser()
        parser.add_argument("foo", type=bool)

        args = parser.parse_args(Request.blank('/stam?foo=true'))
        self.assertEquals(args['foo'], True)

        args = parser.parse_args(Request.blank('/stam?foo=True'))
        self.assertEquals(args['foo'], True)

        args = parser.parse_args(Request.blank('/stam?foo=t'))
        self.assertEquals(args['foo'], True)

        args = parser.parse_args(Request.blank('/stam?foo=1'))
        self.assertEquals(args['foo'], True)

        args = parser.parse_args(Request.blank('/stam?foo=f'))
        self.assertEquals(args['foo'], False)

        args = parser.parse_args(Request.blank('/stam?foo=0'))
        self.assertEquals(args['foo'], False)

        args = parser.parse_args(Request.blank('/stam?foo=false'))
        self.assertEquals(args['foo'], False)

        args = parser.parse_args(Request.blank('/stam?foo=False'))
        self.assertEquals(args['foo'], False)