J'ai un django DetailView
que je l'ai écarté pour permettre à l'utilisateur de se désabonner des e-mails en utilisant une chaîne de requête dans la méthode get
:Comment puis-je tester une méthode GET surchargée dans Django CBV?
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)
Cela fonctionne bien lorsque j'utilise le lien d'un e-mail. Toutefois, lorsque j'essaie de tester ce code, le client de test ne suit pas la méthode get
remplacée dans le DetailView
; il passe par une méthode get
spécifique au client/suite test. Comment puis-je tester cette méthode get
remplacée? Voici mon code de test:
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")
Je pense que vous pourriez vouloir vérifier votre instruction if. Obtenir vous donne le contenu du dictionnaire, pas nécessairement vrai ou faux. Vous pouvez vérifier sans la partie "est vrai". Ou encore mieux "if" se désinscrire "request.GET". BTW, vous testez aussi deux fois pour la même condition dans l'autre (pas besoin). – Pynchia
@Pynchia merci - l'URL que j'utilise d'un email contient une chaîne de requête - '? Unsubscribe = True' ou'? Unsubscribe = False'. Le second est de réinscrire les gens. Le problème auquel je suis confronté est que le client de test ne semble pas passer par cette méthode 'get' substituée que j'ai mise dans le' DetailView'! – YPCrumble