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 [email protected].
To post to this group, send email to [email protected].
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'[email protected]',
r'picture': r'http://testserver/media/foto.jpg',
r'phone': None,
},
{
r'name': u'Arnaldo',
r'email': r'[email protected]',
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'[email protected]',
}), 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'[email protected]',
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'[email protected]',
}), 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'[email protected]',
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'[email protected]',
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'[email protected]',
r'picture': r'http://testserver/media/foto.jpg',
r'phone': None,
},
{
r'name': u'Arnaldo',
r'email': r'[email protected]',
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'[email protected]',
}), 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'[email protected]',
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'[email protected]',
}), 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'[email protected]',
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'[email protected]',
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