2017-07-31 1 views
0

J'essaye d'écrire quelques tests en utilisant le client de test Django pour vérifier mes personnalisations de l'admin Bergeronnette. J'ai essayé:comment tester les pages d'administration de Wagtail à l'aide du client de test django?

self.user = get_user_model().objects.create(
    username='addy', is_staff=True 
) 
self.client.force_login(self.user) 
response = self.client.get(f'/admin/pages/{self.thing.id}/edit/') 

Mais je finis toujours en voyant un HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/admin/login/?next=/admin/pages/6/edit/">

Suis-je manque un attribut essentiel à l'utilisateur que Bergeronnette veut en ordet de les laisser voir pages Bergeronnette-admin?

Répondre

2

Wagtail n'utilise pas l'indicateur is_staff pour déterminer l'accès à l'administrateur - vous devez attribuer à votre utilisateur l'autorisation wagtailadmin.access_admin à la place.

Voir https://github.com/wagtail/wagtail/blob/c6666c6de5e83bf94d18324858c121e6584ba47d/wagtail/wagtailsites/tests.py#L258 pour un exemple de configuration d'un utilisateur de test avec les autorisations appropriées.

+0

une nette amélioration! Je reçois maintenant un 403 au lieu d'un 302. encore pas tout à fait raison. avez même essayé 'user_permissions.add (* Permission.objects.all())' – hwjp

+0

Pour permettre à votre utilisateur d'accéder à/admin/pages//edit /, vous devez configurer les enregistrements GroupPagePermission: https: // github .com/bergeronnette/bergeronnette/blob/14a36f29c0e20a992a57f965b5757567ffe1e796/bergeronnette/wagtailcore/models.py # L1594. Vous pouvez également en faire un superutilisateur en définissant is_admin = True. – gasman

0

est ici ce qui a fonctionné pour moi à la fin:

self.user = get_user_model().objects.create_superuser(
    username='addy', email='[email protected]', password='passwood321' 
) 

Juste is_staff était mise ne suffit pas. Merci à @gasman ci-dessus, les utilisateurs n'ont pas d'attribut is_admin. ils ont is_superuser, de sorte que ce code fonctionne aussi bien (et est probablement mieux, car il n'a pas besoin d'un e-mail sans objet ou mot de passe):

self.user = get_user_model().objects.create(username='addy', is_superuser=True) 
self.client.force_login(self.user)