Additional unit tests.

pull/7/head
Ferry Boender 10 years ago
parent 0b9f093a9d
commit b951fa4fce
  1. 88
      test/test.py
  2. 54
      test/test_formdefinition_validate.json
  3. 5
      test/test_webapp.json

@ -212,6 +212,61 @@ class FormDefinitionTest(unittest.TestCase):
self.assertNotIn('val_date', errors) self.assertNotIn('val_date', errors)
self.assertEquals(values['val_date'], datetime.date(2015, 3, 3)) self.assertEquals(values['val_date'], datetime.date(2015, 3, 3))
def testValidateSelectValue(self):
fd = self.fc.get_form_def('test_val_select')
form_values = {"val_select": 'option_a'}
errors, values = fd.validate(form_values)
self.assertNotIn('val_select', errors)
self.assertEquals(values['val_select'], 'option_a')
def testValidateSelectInvalid(self):
fd = self.fc.get_form_def('test_val_select')
form_values = {"val_select": 'option_c'}
errors, values = fd.validate(form_values)
self.assertIn('val_select', errors)
self.assertIn('Invalid value', errors['val_select'][0])
def testValidateCheckbox(self):
fd = self.fc.get_form_def('test_val_checkbox')
form_values = {"val_checkbox": 'on'}
errors, values = fd.validate(form_values)
self.assertNotIn('val_checkbox', errors)
self.assertEquals(values['val_checkbox'], 'on')
def testValidateCheckboxInvalid(self):
fd = self.fc.get_form_def('test_val_checkbox')
form_values = {"val_checkbox": 'true'}
errors, values = fd.validate(form_values)
self.assertIn('val_checkbox', errors)
self.assertIn('Invalid value', errors['val_checkbox'][0])
def testValidateTextMin(self):
fd = self.fc.get_form_def('test_val_text')
form_values = {"val_text": '1234'}
errors, values = fd.validate(form_values)
self.assertIn('val_text', errors)
self.assertIn('Minimum', errors['val_text'][0])
def testValidateTextMax(self):
fd = self.fc.get_form_def('test_val_text')
form_values = {"val_text": '12345678901'}
errors, values = fd.validate(form_values)
self.assertIn('val_text', errors)
self.assertIn('Maximum', errors['val_text'][0])
def testValidateFileMissingFile(self):
fd = self.fc.get_form_def('test_val_file')
form_values = {}
errors, values = fd.validate(form_values)
self.assertIn('val_file', errors)
self.assertIn('Invalid', errors['val_file'][0])
def testValidateFileMissingFileName(self):
fd = self.fc.get_form_def('test_val_file')
form_values = {'val_file': 'foo'}
self.assertRaises(KeyError, fd.validate, form_values)
class WebAppTest(unittest.TestCase): class WebAppTest(unittest.TestCase):
""" """
Test the web app by actually running the server and making web calls to it. Test the web app by actually running the server and making web calls to it.
@ -291,7 +346,8 @@ class WebAppTest(unittest.TestCase):
"date": "2015-01-02", "date": "2015-01-02",
"text": "1234567890", "text": "1234567890",
"password": "12345", "password": "12345",
"radio": "One" "radio": "One",
"checkbox": "on",
} }
import random import random
@ -303,9 +359,14 @@ class WebAppTest(unittest.TestCase):
files = {'file': open('data.csv', 'rb')} files = {'file': open('data.csv', 'rb')}
r = requests.post("http://localhost:8002/submit", data=data, files=files, auth=self.auth_user) r = requests.post("http://localhost:8002/submit", data=data, files=files, auth=self.auth_user)
r_error = '<span class="error">(.*)</span>' self.assertIn('string=12345', r.text)
for match in re.findall(r_error, r.text): self.assertIn('integer=12', r.text)
self.assertEquals(match, u'') self.assertIn('float=0.6', r.text)
self.assertIn('date=2015-01-02', r.text)
self.assertIn('text=1234567890', r.text)
self.assertIn('password=12345', r.text)
self.assertIn('radio=One', r.text)
self.assertIn('checkbox=on', r.text)
def testValidateIncorrectData(self): def testValidateIncorrectData(self):
data = { data = {
@ -317,6 +378,7 @@ class WebAppTest(unittest.TestCase):
"radio": "Ten", "radio": "Ten",
"text": "123456789", "text": "123456789",
"password": "1234", "password": "1234",
"checkbox": "invalidvalue",
} }
import random import random
@ -336,6 +398,7 @@ class WebAppTest(unittest.TestCase):
self.assertIn('Minimum length is 10', r.text) self.assertIn('Minimum length is 10', r.text)
self.assertIn('Minimum length is 5', r.text) self.assertIn('Minimum length is 5', r.text)
self.assertIn('Only file types allowed: csv', r.text) self.assertIn('Only file types allowed: csv', r.text)
self.assertIn('Invalid value', r.text)
def testOutputEscaped(self): def testOutputEscaped(self):
"""Form with 'escaped' output should have HTML entities escaped""" """Form with 'escaped' output should have HTML entities escaped"""
@ -360,7 +423,6 @@ class WebAppTest(unittest.TestCase):
"string": '<foo>' "string": '<foo>'
} }
r = requests.post('http://localhost:8002/submit', data, auth=self.auth_user) r = requests.post('http://localhost:8002/submit', data, auth=self.auth_user)
print r.text
self.assertIn('string=<foo>', r.text) self.assertIn('string=<foo>', r.text)
def testUpload(self): def testUpload(self):
@ -378,7 +440,7 @@ class WebAppTest(unittest.TestCase):
self.assertIn('SAME', r.text) self.assertIn('SAME', r.text)
os.unlink('data.raw') os.unlink('data.raw')
def testStatic(self): def testStaticValid(self):
r = requests.get("http://localhost:8002/static?fname=ssh_server.png", auth=self.auth_user) r = requests.get("http://localhost:8002/static?fname=ssh_server.png", auth=self.auth_user)
self.assertEquals(r.status_code, 200) self.assertEquals(r.status_code, 200)
f_served = b'' f_served = b''
@ -388,6 +450,14 @@ class WebAppTest(unittest.TestCase):
f_orig = file('static/ssh_server.png', 'rb').read() f_orig = file('static/ssh_server.png', 'rb').read()
self.assertEquals(f_orig, f_served) self.assertEquals(f_orig, f_served)
def testStaticInvalidFilename(self):
r = requests.get("http://localhost:8002/static?fname=../../ssh_server.png", auth=self.auth_user)
self.assertEquals(r.status_code, 403)
def testStaticInvalidNotFound(self):
r = requests.get("http://localhost:8002/static?fname=nosuchfile.png", auth=self.auth_user)
self.assertEquals(r.status_code, 404)
def testHiddenField(self): def testHiddenField(self):
r = requests.get('http://localhost:8002/form?form_name=hidden_field', auth=self.auth_user) r = requests.get('http://localhost:8002/form?form_name=hidden_field', auth=self.auth_user)
self.assertIn('class="hidden"', r.text) self.assertIn('class="hidden"', r.text)
@ -432,6 +502,12 @@ class WebAppSingleTest(unittest.TestCase):
r = requests.get("http://localhost:8002/") r = requests.get("http://localhost:8002/")
self.assertIn('only_form', r.text) self.assertIn('only_form', r.text)
def testStaticDisabled(self):
"""
"""
r = requests.get("http://localhost:8002/static?fname=nosuchfile.png")
self.assertEquals(r.status_code, 501)
if __name__ == '__main__': if __name__ == '__main__':
logging.basicConfig(level=logging.FATAL, logging.basicConfig(level=logging.FATAL,

@ -69,6 +69,60 @@
"max": "2015-03-05" "max": "2015-03-05"
} }
] ]
},
{
"name": "test_val_select",
"title": "title",
"description": "description",
"script": "test.sh",
"fields": [
{
"name": "val_select",
"type": "select",
"options": [
["option_a", "Option A"],
["option_b", "Option B"]
]
}
]
},
{
"name": "test_val_checkbox",
"title": "title",
"description": "description",
"script": "test.sh",
"fields": [
{
"name": "val_checkbox",
"type": "checkbox"
}
]
},
{
"name": "test_val_text",
"title": "title",
"description": "description",
"script": "test.sh",
"fields": [
{
"name": "val_text",
"type": "text",
"minlen": 5,
"maxlen": 10
}
]
},
{
"name": "test_val_file",
"title": "title",
"description": "description",
"script": "test.sh",
"fields": [
{
"name": "val_file",
"type": "file"
}
]
} }
] ]
} }

@ -132,6 +132,11 @@
"required": true, "required": true,
"minlen": 5 "minlen": 5
}, },
{
"name": "checkbox",
"title": "A checkbox input field",
"type": "checkbox"
},
{ {
"name": "file", "name": "file",
"title": "A file upload field", "title": "A file upload field",

Loading…
Cancel
Save