Tout d'abord, utilisez path() et re_path(), je pense que url() est déprécié ou même supprimé.
En regardant votre modèle de regex, il semble que vous ayez fait id
y slug
optionnel, ce qui n'a pas beaucoup de sens, mais c'est bon.
Maintenant, vous voulez vérifier toutes les regex possibles pour id
y slug
mais le total des correspondances possibles est infini car n'importe quel nombre peut correspondre. id
et tout correspondra slug
donc ce n'est pas possible.
Je pense que pour votre premier cas, dans vos vues, vous allez chercher un objet avec ce id
dans votre base de données, puis d'en afficher les détails sur la page que vous rendez. Par conséquent, dans votre méthode setUp(), vous devez créer quelques objets de vos modèles, par exemple :
def setUp(self):
MyModel.objects.create(id=1)
MyModel.objects.create(id=5)
...
Maintenant, dans votre test, vérifiez ces identifiants :
def test_logged_user_get_details(self):
response = self.client.get(reverse('details', args=(1,)), follow=True) # for first object
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse('details', args=(5,)), follow=True) # for second object
self.assertEqual(response.status_code, 200)
Vérifiez également si un identifiant n'existe pas :
response = self.client.get(reverse('details', args=(2,)), follow=True) # for object that doesn't exists
self.assertEqual(response.status_code, 404)
Puisque le nom du test suggère que seul l'utilisateur connecté peut accéder à la page web donnée, votre configuration devrait contenir ceci (en supposant que vous utilisez l'authentification de django) :
self.user = User.objects.create_user('test', 'test@email.com', 'testtest')
Ensuite, dans chaque test qui nécessite une connexion, faites d'abord ceci :
self.client.force_login(self.user)
Comme vous l'avez dit dans votre question, vous souhaitez vérifier toutes les correspondances possibles de l'expression rationnelle, ce qui n'est pas possible, mais pour une raison quelconque, si vous souhaitez vérifier plusieurs id
ou slug
vous pouvez utiliser une boucle :
for i in range(1,n): # define n
response = self.client.get(reverse('details', args=(i,)), follow=True)
self.assertEqual(response.status_code, 200)
Pour moi, faire quelque chose comme ça n'a aucun sens, mais comme je ne connais pas complètement le fonctionnement de votre application, cela pourrait vous être utile.