# HG changeset patch # User Brian Neal # Date 1310176848 0 # Node ID 452835f4429ffac882083c33f45004cf2755e1ce # Parent 53fdaf0da53903ef2571358de2edf84f4eea0828 Fixing #225; for some reason MySQL finds the user 'John' when searching for 'John ' (note trailing space). This doesn't happen on SQLite. This causes a NoReverseMatch when searching for 'John ' in the member search. The solution is to call strip() on the form field contents in the clean_username() method of the search form. diff -r 53fdaf0da539 -r 452835f4429f gpp/bio/forms.py --- a/gpp/bio/forms.py Tue Jul 05 21:40:56 2011 +0000 +++ b/gpp/bio/forms.py Sat Jul 09 02:00:48 2011 +0000 @@ -116,7 +116,7 @@ js = settings.GPP_THIRD_PARTY_JS['jquery-ui'] def clean_username(self): - username = self.cleaned_data['username'] + username = self.cleaned_data['username'].strip() try: User.objects.get(username=username, is_active=True) except User.DoesNotExist: diff -r 53fdaf0da539 -r 452835f4429f gpp/bio/tests/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/bio/tests/__init__.py Sat Jul 09 02:00:48 2011 +0000 @@ -0,0 +1,1 @@ +from view_tests import * diff -r 53fdaf0da539 -r 452835f4429f gpp/bio/tests/view_tests.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/bio/tests/view_tests.py Sat Jul 09 02:00:48 2011 +0000 @@ -0,0 +1,78 @@ +""" +View tests for the bio application. + +""" +import datetime + +from django.contrib.auth.models import User +from django.test import TestCase +from django.core.urlresolvers import reverse, NoReverseMatch + + +class MemberSearchTest(TestCase): + + USERNAME = u'John' + + def setUp(self): + user = User.objects.create_user(self.USERNAME, '', 'password') + user.save() + + self.username = 'test_user' + self.pw = 'password' + self.user = User.objects.create_user(self.username, '', self.pw) + self.user.save() + self.assertTrue(self.client.login(username=self.username, + password=self.pw)) + + def tearDown(self): + self.client.logout() + + def testValidName(self): + """ + Test a valid username. + """ + + response = self.client.post(reverse('bio-member_search'), + {'username': self.USERNAME}, + follow=True) + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('bio-view_profile', + kwargs={'username': self.USERNAME})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 200) + + def testInvalidName(self): + """ + Test a invalid username. + """ + + response = self.client.post(reverse('bio-member_search'), + {'username': self.USERNAME + '!'}) + + self.assertEqual(response.status_code, 200) + self.assertContains(response, "That username does not exist.") + + def testTrailingSpace(self): + """ + Test a username with a trailing space. + """ + + try: + response = self.client.post(reverse('bio-member_search'), + {'username': self.USERNAME + ' '}, + follow=True) + except NoReverseMatch: + self.fail('bit by a MySQL bug?') + + self.assertEqual(len(response.redirect_chain), 1) + if response.redirect_chain: + self.assertEqual(response.redirect_chain[0][0], + 'http://testserver' + reverse('bio-view_profile', + kwargs={'username': self.USERNAME})) + self.assertEqual(response.redirect_chain[0][1], 302) + + self.assertEqual(response.status_code, 200)