--- a/AlluraTesting/alluratest/validation.py
+++ b/AlluraTesting/alluratest/validation.py
@@ -268,7 +268,6 @@
if Config.instance().validation_enabled('inlinejs'):
validate_js(html_or_response)
-
class AntiSpamTestApp(TestApp):
def post(self, *args, **kwargs):
@@ -285,7 +284,29 @@
kwargs['params'] = params
return super(AntiSpamTestApp, self).post(*args, **kwargs)
-class ValidatingTestApp(AntiSpamTestApp):
+class PostParamCheckingTestApp(AntiSpamTestApp):
+
+ def _validate_params(self, params, method):
+ if not params:
+ return
+ # params can be a list or a dict
+ if hasattr(params, 'items'):
+ params = params.items()
+ for k, v in params:
+ if not isinstance(k, basestring):
+ raise TypeError('%s key %s is %s, not str' % (method, k, type(k)))
+ if not isinstance(v, basestring):
+ raise TypeError('%s key %s has value %s of type %s, not str. ' % (method, k, v, type(v)))
+
+ def get(self, *args, **kwargs):
+ self._validate_params(kwargs.get('params'), 'get')
+ return super(PostParamCheckingTestApp, self).get(*args, **kwargs)
+
+ def post(self, *args, **kwargs):
+ self._validate_params(kwargs.get('params'), 'post')
+ return super(PostParamCheckingTestApp, self).post(*args, **kwargs)
+
+class ValidatingTestApp(PostParamCheckingTestApp):
# Subclasses may set this to True to skip validation altogether
validate_skip = False