validators are now decorators instead

This commit is contained in:
Martin
2016-11-13 19:38:45 +01:00
parent 66b1787722
commit d854ff9798
7 changed files with 172 additions and 55 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ class TestEndpoints(flask_testing.TestCase):
self.assertEqual('spider_man', designer['path'])
def test_create_designer_missing_data(self):
data = {}
data = {'name': 'Only name'}
response = self.client.post(
'/designers/', data=json.dumps(data), content_type='application/json')
self.assert400(response)
-23
View File
@@ -1,23 +0,0 @@
import unittest2
from api.validators import ValidationError, validate_keys_exists, validate_territory, validate_number
class TestValidation(unittest2.TestCase):
def test_validate_keys_exists(self):
obj = {'a': 1, 'b': 2}
self.assertRaises(ValidationError, validate_keys_exists, obj, 'c')
self.assertRaises(
ValidationError, validate_keys_exists, obj, 'a', 'b', 'c')
self.assertTrue(validate_keys_exists(obj, 'a'))
self.assertTrue(validate_keys_exists(obj, 'a', 'b'))
def test_validate_territory(self):
self.assertTrue(validate_territory('SE'))
self.assertRaises(ValidationError, validate_territory, 'unknown')
def test_validate_number(self):
self.assertRaises(ValidationError, validate_number, 'foo')
self.assertRaises(ValidationError, validate_number, 'foo', 12)
self.assertTrue(validate_number(12))
self.assertTrue(validate_number(12, 45))
+75
View File
@@ -1,8 +1,11 @@
# coding=UTF-8
import flask_testing
import json
import base64
from api import create_app
from flask import Flask
from api.validators import ValidationError, validate_exists, validate_number, validate_territory, validate_jsonschema
class TestHttpBasicAuth(flask_testing.TestCase):
@@ -35,3 +38,75 @@ class TestHttpBasicAuth(flask_testing.TestCase):
def test_basic_auth_disabled(self):
response = self.client.get('/')
self.assert200(response)
class TestValidators(flask_testing.TestCase):
def create_app(self):
app = Flask(__name__)
@app.errorhandler(ValidationError)
def on_error(error):
return error.message, 400
return app
def test_validate_exists(self):
app = self.app
@app.route('/', methods=['GET'])
@validate_exists('a', 'b')
def index():
return 'ok'
self.assertEqual(b'No b is specified', self.client.get('/?a=1').data)
self.assertEqual(b'ok', self.client.get('/?a=1&b=2').data)
def test_validate_number(self):
app = self.app
@app.route('/', methods=['GET'])
@validate_number('age')
def index():
return 'ok'
self.assertEqual(b'No age is specified', self.client.get('/').data)
self.assertEqual(b'age is not a number',
self.client.get('/?age=aaa').data)
self.assertEqual(b'ok', self.client.get('/?age=1').data)
def test_validate_territory(self):
app = self.app
@app.route('/', methods=['GET'])
@validate_territory('territory')
def index():
return 'ok'
self.assertEqual(b'No territory is specified',
self.client.get('/').data)
self.assertEqual(b'abc is not a valid territory',
self.client.get('/?territory=abc').data)
self.assertEqual(b'ok', self.client.get('/?territory=SE').data)
def test_validate_jsonschema(self):
app = self.app
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "number"}
},
"required": ["name", "age"]
}
@app.route('/', methods=['POST'])
@validate_jsonschema(schema)
def index():
return 'ok'
self.assertEqual(b'Payload is not valid json',
self.client.post('/').data)
self.assertEqual(b"'name' is a required property", self.client.post(
'/', data=json.dumps({'foo': 'bar'}), content_type='application/json').data)
self.assertEqual(b"'abc' is not of type 'number'", self.client.post(
'/', data=json.dumps({'name': 'bar', 'age': 'abc'}), content_type='application/json').data)