Skip to content

Commit

Permalink
only validate telegram keyboard after rendering the template
Browse files Browse the repository at this point in the history
  • Loading branch information
jlmadurga committed Apr 11, 2016
1 parent 2558f2b commit 5171c90
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
9 changes: 8 additions & 1 deletion microbot/validators.py
Expand Up @@ -26,7 +26,14 @@ def validate_pattern(value):

def validate_telegram_keyboard(value):
try:
ast.literal_eval(value)
# TODO: just check array after rendering template. Some cases are not validated
# If template not valid let the other validator work
try:
template = Template(value)
except:
pass
else:
ast.literal_eval(template.render())
except:
raise ValidationError(_("Not correct keyboard: %(value)s. Check https://core.telegram.org/bots/api#replykeyboardmarkup"), params={'value': value})

Expand Down
8 changes: 3 additions & 5 deletions tests/api/test_handler.py
Expand Up @@ -133,7 +133,6 @@ def test_post_handler_validation_error(self):
self.assertNotEqual(None, errors['response']['text_template'][0])
self.assertNotEqual(None, errors['response']['text_template'][1])
self.assertNotEqual(None, errors['response']['keyboard_template'][0])
self.assertNotEqual(None, errors['response']['keyboard_template'][1])

def test_post_handlers_with_no_request_ok(self):
self.handler.request = None
Expand Down Expand Up @@ -267,21 +266,20 @@ def test_put_handler_only_priority_ok(self):
self._test_put_detail_ok(self._handler_detail_url(), data, HandlerDetail, self.bot.pk, self.handler.pk)
self.assertEqual(Handler.objects.get(pk=self.handler.pk).priority, 7)

def test_put_handler_only_reponse_keyboard_ok(self):
keyboard = '[["{{asdasd}}"]]'
def test_put_handler_only_response_keyboard_ok(self):
keyboard = "[['{{asdasas}}']]"
data = {'response': {'keyboard_template': keyboard}}
self._test_put_detail_ok(self._handler_detail_url(), data, HandlerDetail, self.bot.pk, self.handler.pk)
self.assertEqual(Handler.objects.get(pk=self.handler.pk).response.keyboard_template, keyboard)

def test_put_handler_only_reponse_validation_error(self):
def test_put_handler_only_response_validation_error(self):
keyboard = '["{{asdasd"]]'
data = {'response': {'text_template': '<em>{{a',
'keyboard_template': keyboard}}
response = self._test_put_detail_validation_error(self._handler_detail_url(), data, HandlerDetail, self.bot.pk, self.handler.pk)
self.assertIn('Not correct', response.data['response']['text_template'][0])
self.assertIn('Not correct', response.data['response']['text_template'][1])
self.assertIn('Not correct', response.data['response']['keyboard_template'][0])
self.assertIn('Not correct', response.data['response']['keyboard_template'][1])

def test_put_handler_only_request_url_template_ok(self):
url_template = '/github{{env.token}}'
Expand Down
2 changes: 0 additions & 2 deletions tests/api/test_hook.py
Expand Up @@ -71,7 +71,6 @@ def test_post_hooks_validation_error(self):
self.assertNotEqual(None, errors['response']['text_template'][0])
self.assertNotEqual(None, errors['response']['text_template'][1])
self.assertNotEqual(None, errors['response']['keyboard_template'][0])
self.assertNotEqual(None, errors['response']['keyboard_template'][1])

def test_post_hooks_not_auth(self):
data = {'name': self.hook.name, 'response': {'text_template': self.hook.response.text_template,
Expand Down Expand Up @@ -114,7 +113,6 @@ def test_put_hook_validation_error(self):
self.assertNotEqual(None, response.data['response']['text_template'][0])
self.assertNotEqual(None, response.data['response']['text_template'][1])
self.assertNotEqual(None, response.data['response']['keyboard_template'][0])
self.assertNotEqual(None, response.data['response']['keyboard_template'][1])

def test_put_hook_only_name_ok(self):
data = {'name': "new_name",
Expand Down

0 comments on commit 5171c90

Please sign in to comment.