jeudi 26 mars 2015

How can I test an overridden GET method in Django CBV?

I have a django DetailView that I've overridden to allow the user to unsubscribe from emails using a query string in the get method:



class MemberProfileView(DetailView):
template_name = "profile.html"
model = Member

def get(self, request, *args, **kwargs):
if request.GET.get('unsubscribe') is True:
request.user.email_me = False
request.user.save()
elif request.GET.get('unsubscribe') is False:
request.user.email_me = True
request.user.save()
self.object = self.get_object()
context = self.get_context_data(object=self.get_object)
return self.render_to_response(context)


This works fine when I use the link from an email. However, when I try to test this code, the test client doesn't follow the overridden get method in the DetailView; it goes through a get method specific to the test client/suite. How do I test this overridden get method? Here is my test code:



def test_unsubscribe_link(self):
url = reverse('profile_page', args=[self.member.pk])
self.assertTrue(self.member.email_me)
response = self.client.get(url, {'unsubscribe': True})
self.assertFalse(self.member.email_me)
self.assertEqual(response.status_code, 200)
self.assertContains(response.content, "Email me reminder notifications: No")

Aucun commentaire:

Enregistrer un commentaire