From 0ac7183875bd827078d41ee2d576d48d713f022a Mon Sep 17 00:00:00 2001 From: Daryl Date: Thu, 30 Jun 2016 10:31:46 +1200 Subject: [PATCH] Add test for saving a query, fix shared checkbox issue My browser sends 'on' when a checkbox is ticked, django ORM only recognises '1', 'true' or 't' as valid 'True' responses. This throws an error ValidationError at /helpdesk/save_query/ [u"'on' value must be either True or False."] This could be fixed with " value='1'" in the template, but testing that is harder My fix is to add a check in the view. 2 more lines, but easier to unittest. Core devs need to make a call as to which solution is best. D --- helpdesk/tests/test_savequery.py | 26 ++++++++++++++++++++++++++ helpdesk/views/staff.py | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 helpdesk/tests/test_savequery.py diff --git a/helpdesk/tests/test_savequery.py b/helpdesk/tests/test_savequery.py new file mode 100644 index 00000000..df95b9e7 --- /dev/null +++ b/helpdesk/tests/test_savequery.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from django.core.urlresolvers import reverse +from django.test import TestCase +from helpdesk.models import Ticket, Queue +from helpdesk.tests.helpers import get_staff_user, reload_urlconf + +class TestSavingSharedQuery(TestCase): + def setUp(self): + q = Queue(title='Q1', slug='q1') + q.save() + self.q = q + + def test_cansavequery(self): + """Can a query be saved""" + url = reverse('helpdesk_savequery') + self.client.login(username=get_staff_user().get_username(), + password='password') + response = self.client.post(url, + data={'title': 'ticket on my queue', + 'queue':self.q, + 'shared':'on', + 'query_encoded':'KGRwMApWZmlsdGVyaW5nCnAxCihkcDIKVnN0YXR1c19faW4KcDMKKGxwNApJMQphSTIKYUkzCmFzc1Zzb3J0aW5nCnA1ClZjcmVhdGVkCnA2CnMu'}) + self.assertEqual(response.status_code, 302) + self.assertTrue('tickets/?saved_query=1' in response.url) + + diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 0a652ebb..7d86c420 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -1213,6 +1213,8 @@ run_report = staff_member_required(run_report) def save_query(request): title = request.POST.get('title', None) shared = request.POST.get('shared', False) + if shared == 'on': # django only translates '1', 'true', 't' into True + shared = True query_encoded = request.POST.get('query_encoded', None) if not title or not query_encoded: