55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
import random
|
|
import string
|
|
|
|
from django.contrib.auth.models import Permission, User
|
|
|
|
|
|
class TestUserAuthenticationMixin:
|
|
model_name = ""
|
|
|
|
def create_user(self):
|
|
self.password = "".join(
|
|
[random.choice(string.ascii_letters) for _ in range(16)]
|
|
)
|
|
self.user = User.objects.create(
|
|
username="vader",
|
|
email="darth@vader.com",
|
|
is_staff=True,
|
|
is_active=True,
|
|
)
|
|
self.user.set_password(self.password)
|
|
self.user.save()
|
|
self.setup_user_permissions()
|
|
|
|
def login(self):
|
|
response = self.client.post(
|
|
"/api/v1/auth/login/",
|
|
{
|
|
"username": self.user.username,
|
|
"password": self.password,
|
|
},
|
|
)
|
|
|
|
jwt_token = response.data.get("access")
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {jwt_token}")
|
|
|
|
def setup_user_permissions(self):
|
|
self.create_permission = Permission.objects.get(
|
|
codename=f"add_{self.model_name}"
|
|
)
|
|
self.delete_permission = Permission.objects.get(
|
|
codename=f"delete_{self.model_name}"
|
|
)
|
|
self.list_permission = Permission.objects.get(
|
|
codename=f"view_{self.model_name}"
|
|
)
|
|
self.update_permission = Permission.objects.get(
|
|
codename=f"change_{self.model_name}"
|
|
)
|
|
|
|
# Grant access and permissions
|
|
self.user.user_permissions.add(self.create_permission)
|
|
self.user.user_permissions.add(self.delete_permission)
|
|
self.user.user_permissions.add(self.list_permission)
|
|
self.user.user_permissions.add(self.update_permission)
|