There are 3 Python files attached. I have my URL file attached. I'm using django-rest-framework (in case you are wondering what the routers are). When I use ./manage.py test with the first file (file1.py), the tests succeed. When I do the very same thing with the second file, the tests fail. The only thing changed between the files is the addition of this code:
def test_update_member_phone_number(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member-phone-number', kwargs={r'pk': member.id}) The error is this one: ====================================================================== ERROR: test_update_member_picture (main.tests.test_national_team. NationalTeamTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/jpmelos/devel/ideation_admin/ideation_admin/main/tests/test_national_team.py" , line 177, in test_update_member_picture kwargs={r'pk': member.id}) File "/home/jpmelos/devel/ideation_admin/venv/lib/python2.7/site-packages/django/core/urlresolvers.py" , line 551, in reverse return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, ** kwargs)) File "/home/jpmelos/devel/ideation_admin/venv/lib/python2.7/site-packages/django/core/urlresolvers.py" , line 468, in _reverse_with_prefix (lookup_view_s, args, kwargs, len(patterns), patterns)) NoReverseMatch: Reverse for 'nationalteam-member-update-picture' with arguments '()' and keyword arguments '{'pk': 10}' not found. 1 pattern(s) tried: ['national-team/(?P<pk>\\d)/update_picture/$'] As you can see in the exception text, the pattern does seem to match. The error seems to happen in a test method that is not even related to the one added to the tests. What is going on? It doesn't make any sense to me. How come the mere addition of a call to reverse can cause the tests to crash? -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/68cd8a2c-b3aa-4584-b11d-0d52e259dbf4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
# -*- coding: utf-8 -*- import json from django.core.urlresolvers import reverse from main.models import PhoneNumber, TeamMember, Team from main.tests.creator_test_case import CreatorTestCase import os from rest_framework import status class NationalTeamTestCase(CreatorTestCase): def test_retrieve(self): self.create_national_team_member(picture=r'foto.jpg') member = self.create_national_team_member() phone = self.create_phone_number(member=member) url = reverse(r'nationalteam-list') response = self.client.get(url) self.assertEqual(url, r'/national-team/') for member in response.data[r'members']: self.assertIsInstance(member.pop(r'id'), int) self.assertEqual(response.data, { r'members': [ { r'name': u'Arnaldo', r'email': r'arna...@gmail.com', r'picture': r'http://testserver/media/foto.jpg', r'phone': None, }, { r'name': u'Arnaldo', r'email': r'arna...@gmail.com', r'picture': None, r'phone': phone.id, }, ] }) self.assertEqual(response.status_code, status.HTTP_200_OK) for member in TeamMember.objects.all(): member.delete() for team in Team.objects.all(): team.delete() def test_add_member(self): url = reverse(r'nationalteam-list') response = self.client.post(url, json.dumps({ r'name': u'Henrique', r'email': r'henri...@gmail.com', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/') member_id = response.data.pop(r'id') self.assertIsInstance(member_id, int) self.assertEqual(response.data, { r'name': u'Henrique', r'email': r'henri...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_201_CREATED) TeamMember.objects.filter(id=member_id).delete() for team in Team.objects.all(): team.delete() def test_update_member(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.put(url, json.dumps({ r'name': u'Henrique', r'email': r'henri...@gmail.com', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, { r'id': member.id, r'name': u'Henrique', r'email': r'henri...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.delete() for team in Team.objects.all(): team.delete() def test_partial_update_member(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.patch(url, json.dumps({ r'name': u'Arnaldo Jabor', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, { r'id': member.id, r'name': u'Arnaldo Jabor', r'email': r'arna...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.delete() for team in Team.objects.all(): team.delete() def test_destroy_member(self): filename = r'test.jpg' path = os.path.join(os.path.dirname(__file__), r'testdata/', filename) open(path, r'a').close() member = self.create_national_team_member(picture=filename) phone = self.create_phone_number(member=member) url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.delete(url) self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, None) self.assertRaises(PhoneNumber.DoesNotExist, PhoneNumber.objects.get, id=phone.id) self.assertRaises(TeamMember.DoesNotExist, TeamMember.objects.get, id=member.id) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertFalse(os.path.exists(path)) for team in Team.objects.all(): team.delete() def test_add_member_picture(self): new_filename = r'new.jpg' new_path = os.path.join(os.path.dirname(__file__), r'testdata/', new_filename) member = self.create_national_team_member() url = reverse(r'nationalteam-member-update-picture', kwargs={r'pk': member.id}) with open(new_path, r'a+') as new_file: response = self.client.post(url, { r'picture': new_file, }) os.unlink(new_path) self.assertEqual(url, r'/national-team/{pk}/update_picture/'.format( pk=member.id )) self.assertEqual(response.data, { r'picture': r'http://testserver/media/team_members/new.jpg', }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.reload().delete() for team in Team.objects.all(): team.delete() def test_update_member_picture(self): old_filename = r'old.jpg' old_path = os.path.join(os.path.dirname(__file__), r'testdata/', old_filename) open(old_path, r'a').close() new_filename = r'new.jpg' new_path = os.path.join(os.path.dirname(__file__), r'testdata/', new_filename) member = self.create_national_team_member(picture=old_filename) url = reverse(r'nationalteam-member-update-picture', kwargs={r'pk': member.id}) with open(new_path, r'a+') as new_file: response = self.client.post(url, { r'picture': new_file, }) os.unlink(new_path) self.assertEqual(url, r'/national-team/{pk}/update_picture/'.format( pk=member.id )) self.assertEqual(response.data, { r'picture': r'http://testserver/media/team_members/new.jpg', }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertFalse(os.path.exists(old_path)) member.reload().delete() for team in Team.objects.all(): team.delete() def test_member_add_phone_number(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member-phone-number', kwargs={r'pk': member.id}) response = self.client.post(url, json.dumps({ r'ddd': 45, r'number': u'9 9999-8888', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/phone_number/'.format( pk=member.id )) self.assertEqual(response.data, { r'ddi': 55, r'ddd': 45, r'number': u'999998888', }) self.assertEqual(response.status_code, status.HTTP_201_CREATED) member.reload().delete() for team in Team.objects.all(): team.delete()
# -*- coding: utf-8 -*- import json from django.core.urlresolvers import reverse from main.models import PhoneNumber, TeamMember, Team from main.tests.creator_test_case import CreatorTestCase import os from rest_framework import status class NationalTeamTestCase(CreatorTestCase): def test_retrieve(self): self.create_national_team_member(picture=r'foto.jpg') member = self.create_national_team_member() phone = self.create_phone_number(member=member) url = reverse(r'nationalteam-list') response = self.client.get(url) self.assertEqual(url, r'/national-team/') for member in response.data[r'members']: self.assertIsInstance(member.pop(r'id'), int) self.assertEqual(response.data, { r'members': [ { r'name': u'Arnaldo', r'email': r'arna...@gmail.com', r'picture': r'http://testserver/media/foto.jpg', r'phone': None, }, { r'name': u'Arnaldo', r'email': r'arna...@gmail.com', r'picture': None, r'phone': phone.id, }, ] }) self.assertEqual(response.status_code, status.HTTP_200_OK) for member in TeamMember.objects.all(): member.delete() for team in Team.objects.all(): team.delete() def test_add_member(self): url = reverse(r'nationalteam-list') response = self.client.post(url, json.dumps({ r'name': u'Henrique', r'email': r'henri...@gmail.com', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/') member_id = response.data.pop(r'id') self.assertIsInstance(member_id, int) self.assertEqual(response.data, { r'name': u'Henrique', r'email': r'henri...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_201_CREATED) TeamMember.objects.filter(id=member_id).delete() for team in Team.objects.all(): team.delete() def test_update_member(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.put(url, json.dumps({ r'name': u'Henrique', r'email': r'henri...@gmail.com', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, { r'id': member.id, r'name': u'Henrique', r'email': r'henri...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.delete() for team in Team.objects.all(): team.delete() def test_partial_update_member(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.patch(url, json.dumps({ r'name': u'Arnaldo Jabor', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, { r'id': member.id, r'name': u'Arnaldo Jabor', r'email': r'arna...@gmail.com', r'picture': None, r'phone': None, }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.delete() for team in Team.objects.all(): team.delete() def test_destroy_member(self): filename = r'test.jpg' path = os.path.join(os.path.dirname(__file__), r'testdata/', filename) open(path, r'a').close() member = self.create_national_team_member(picture=filename) phone = self.create_phone_number(member=member) url = reverse(r'nationalteam-member', kwargs={r'pk': member.id}) response = self.client.delete(url) self.assertEqual(url, r'/national-team/{pk}/'.format(pk=member.id)) self.assertEqual(response.data, None) self.assertRaises(PhoneNumber.DoesNotExist, PhoneNumber.objects.get, id=phone.id) self.assertRaises(TeamMember.DoesNotExist, TeamMember.objects.get, id=member.id) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertFalse(os.path.exists(path)) for team in Team.objects.all(): team.delete() def test_add_member_picture(self): new_filename = r'new.jpg' new_path = os.path.join(os.path.dirname(__file__), r'testdata/', new_filename) member = self.create_national_team_member() url = reverse(r'nationalteam-member-update-picture', kwargs={r'pk': member.id}) with open(new_path, r'a+') as new_file: response = self.client.post(url, { r'picture': new_file, }) os.unlink(new_path) self.assertEqual(url, r'/national-team/{pk}/update_picture/'.format( pk=member.id )) self.assertEqual(response.data, { r'picture': r'http://testserver/media/team_members/new.jpg', }) self.assertEqual(response.status_code, status.HTTP_200_OK) member.reload().delete() for team in Team.objects.all(): team.delete() def test_update_member_picture(self): old_filename = r'old.jpg' old_path = os.path.join(os.path.dirname(__file__), r'testdata/', old_filename) open(old_path, r'a').close() new_filename = r'new.jpg' new_path = os.path.join(os.path.dirname(__file__), r'testdata/', new_filename) member = self.create_national_team_member(picture=old_filename) url = reverse(r'nationalteam-member-update-picture', kwargs={r'pk': member.id}) with open(new_path, r'a+') as new_file: response = self.client.post(url, { r'picture': new_file, }) os.unlink(new_path) self.assertEqual(url, r'/national-team/{pk}/update_picture/'.format( pk=member.id )) self.assertEqual(response.data, { r'picture': r'http://testserver/media/team_members/new.jpg', }) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertFalse(os.path.exists(old_path)) member.reload().delete() for team in Team.objects.all(): team.delete() def test_member_add_phone_number(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member-phone-number', kwargs={r'pk': member.id}) response = self.client.post(url, json.dumps({ r'ddd': 45, r'number': u'9 9999-8888', }), content_type=r'application/json') self.assertEqual(url, r'/national-team/{pk}/phone_number/'.format( pk=member.id )) self.assertEqual(response.data, { r'ddi': 55, r'ddd': 45, r'number': u'999998888', }) self.assertEqual(response.status_code, status.HTTP_201_CREATED) member.reload().delete() for team in Team.objects.all(): team.delete() def test_update_member_phone_number(self): member = self.create_national_team_member() url = reverse(r'nationalteam-member-phone-number', kwargs={r'pk': member.id})
# -*- coding: utf-8 -*- from django.conf.urls import patterns, url from main.views.national_mentor import NationalMentorViewSet from main.views.national_sponsor import NationalSponsorViewSet from main.views.national_supporter import NationalSupporterViewSet from main.views.national_team import NationalTeamView, \ NationalTeamMemberPictureView, NationalTeamMemberPhoneNumberView from main.views.number import NumberViewSet from main.views.startup import StartupViewSet from main.views.national_university import NationalUniversityViewSet from main.views.program import WorkshopViewSet, CompetitionViewSet from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(r'numbers', NumberViewSet) router.register(r'startups', StartupViewSet) router.register(r'national-mentors', NationalMentorViewSet) router.register(r'national-sponsors', NationalSponsorViewSet) router.register(r'national-supporters', NationalSupporterViewSet) router.register(r'national-universities', NationalUniversityViewSet) router.register(r'workshops', WorkshopViewSet) router.register(r'competitions', CompetitionViewSet) nationalteam_patterns = patterns( r'', url(r'^national-team/$', NationalTeamView.as_view(), name=r'nationalteam-list'), url(r'^national-team/(?P<pk>\d)/$', NationalTeamView.as_view(), name=r'nationalteam-member'), url(r'^national-team/(?P<pk>\d)/update_picture/$', NationalTeamMemberPictureView.as_view(), name=r'nationalteam-member-update-picture'), url(r'^national-team/(?P<pk>\d)/phone_number/$', NationalTeamMemberPhoneNumberView.as_view(), name=r'nationalteam-member-phone-number'), ) urlpatterns = router.urls + nationalteam_patterns