57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
from django.contrib.auth import get_user_model
|
|
from rest_framework.test import APITestCase
|
|
|
|
from apps.rbac.models import Permission, Role
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class UserManagementApiTests(APITestCase):
|
|
def setUp(self):
|
|
self.admin = User.objects.create_superuser(username="root", password="***")
|
|
self.client.force_authenticate(self.admin)
|
|
self.role = Role.objects.create(name="Operator", slug="operator-t")
|
|
self.role.permissions.add(Permission.objects.create(code="processing.start"))
|
|
|
|
def test_create_user_with_role_ids(self):
|
|
response = self.client.post(
|
|
"/api/v1/users/",
|
|
{
|
|
"username": "newuser",
|
|
"email": "new@example.com",
|
|
"phone": "09120000000",
|
|
"password": "secret123",
|
|
"role_ids": [str(self.role.id)],
|
|
"is_active": True,
|
|
},
|
|
format="json",
|
|
)
|
|
self.assertEqual(response.status_code, 201, response.content)
|
|
user = User.objects.get(username="newuser")
|
|
self.assertTrue(user.check_password("secret123"))
|
|
self.assertTrue(user.user_roles.filter(role=self.role).exists())
|
|
|
|
def test_update_user_role_ids(self):
|
|
user = User.objects.create_user(username="someone", password="***")
|
|
response = self.client.patch(
|
|
f"/api/v1/users/{user.id}/", {"role_ids": [str(self.role.id)]}, format="json"
|
|
)
|
|
self.assertEqual(response.status_code, 200, response.content)
|
|
self.assertTrue(user.user_roles.filter(role=self.role).exists())
|
|
|
|
def test_ban_and_unban(self):
|
|
user = User.objects.create_user(username="toban", password="***")
|
|
response = self.client.patch(f"/api/v1/users/{user.id}/", {"is_active": False}, format="json")
|
|
self.assertEqual(response.status_code, 200, response.content)
|
|
user.refresh_from_db()
|
|
self.assertFalse(user.is_active)
|
|
|
|
def test_reset_password(self):
|
|
user = User.objects.create_user(username="pwuser", password="***")
|
|
response = self.client.post(
|
|
f"/api/v1/users/{user.id}/set-password/", {"new_password": "brandnew1"}, format="json"
|
|
)
|
|
self.assertEqual(response.status_code, 200, response.content)
|
|
user.refresh_from_db()
|
|
self.assertTrue(user.check_password("brandnew1"))
|