fc9f2ed6af
- Improved bulk edit options for user groups with success alerts. - Updated trainee selection count display. - Refined HTMX responses for user actions, providing better feedback. - Enhanced checkbox toggle functionality for trainee selection.
139 lines
4.1 KiB
Python
139 lines
4.1 KiB
Python
from bs4 import BeautifulSoup
|
|
from django.urls import reverse
|
|
from generic.models import UserProfile, UserGrades
|
|
from django.contrib.auth.models import Group
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def create_cid_manager(db, django_user_model):
|
|
user = django_user_model.objects.create_user(
|
|
"cidmanager", "test@test.com", "password"
|
|
)
|
|
g = Group.objects.create(name="cid_user_manager")
|
|
g.save()
|
|
user.groups.add(g)
|
|
return
|
|
|
|
|
|
@pytest.fixture
|
|
def create_user_grades(db):
|
|
for i in range(1, 6):
|
|
UserGrades.objects.create(name=f"ST{i}")
|
|
|
|
|
|
@pytest.fixture
|
|
def create_users(db, django_user_model, create_user_grades):
|
|
users = [
|
|
("user1", "ST1", "email@email.com"),
|
|
("user2", "ST1", "email@email.com"),
|
|
("user3", "ST2", "email@email.com"),
|
|
("user4", "ST3", "email@email.com"),
|
|
]
|
|
|
|
for name, grade, email in users:
|
|
user = django_user_model.objects.create_user(name, email, "password")
|
|
|
|
user.userprofile.grade = UserGrades.objects.get(name=grade)
|
|
user.userprofile.peninsula_trainee = True
|
|
user.userprofile.save()
|
|
|
|
|
|
def test_trainee_stuff(client, create_cid_manager, create_users):
|
|
print(UserProfile.objects.all().count())
|
|
|
|
assert UserProfile.objects.all().count() == 5
|
|
print(UserProfile.objects.filter(peninsula_trainee=True))
|
|
assert UserProfile.objects.filter(peninsula_trainee=True).count() == 4
|
|
|
|
response = client.get(reverse(f"trainees"))
|
|
assert response.status_code == 403
|
|
|
|
client.login(username="user1", password="password")
|
|
|
|
response = client.get(reverse(f"trainees"))
|
|
assert response.status_code == 403
|
|
|
|
client.login(username="cidmanager", password="password")
|
|
|
|
response = client.get(reverse(f"trainees"))
|
|
assert response.status_code == 200
|
|
|
|
trainee_rows = BeautifulSoup(response.content, "html.parser").find_all(
|
|
"tr", {"class": "trainee"}
|
|
)
|
|
print(trainee_rows)
|
|
|
|
assert (
|
|
len(trainee_rows) == UserProfile.objects.filter(peninsula_trainee=True).count()
|
|
)
|
|
|
|
|
|
def test_bulk_edit_groups(client, create_cid_manager, create_users):
|
|
from generic.models import UserUserGroup
|
|
from django.contrib.auth import get_user_model
|
|
User = get_user_model()
|
|
|
|
client.login(username="cidmanager", password="password")
|
|
|
|
group = UserUserGroup.objects.create(name="Test Group")
|
|
|
|
user1 = User.objects.get(username="user1")
|
|
user2 = User.objects.get(username="user2")
|
|
|
|
# Bulk add to group
|
|
response = client.post(
|
|
reverse("generic:users_bulk_edit"),
|
|
data={"selection": [user1.pk, user2.pk]},
|
|
HTTP_HX_REQUEST="true",
|
|
HTTP_HX_TRIGGER=f"add-group--{group.id}"
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert "Group added" in response.content.decode()
|
|
assert "alert alert-success" in response.content.decode()
|
|
|
|
user1.refresh_from_db()
|
|
user2.refresh_from_db()
|
|
assert group in user1.user_groups.all()
|
|
assert group in user2.user_groups.all()
|
|
|
|
# Bulk remove from group
|
|
response = client.post(
|
|
reverse("generic:users_bulk_edit"),
|
|
data={"selection": [user1.pk, user2.pk]},
|
|
HTTP_HX_REQUEST="true",
|
|
HTTP_HX_TRIGGER=f"remove-group--{group.id}"
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert "Group removed" in response.content.decode()
|
|
assert "alert alert-success" in response.content.decode()
|
|
|
|
user1.refresh_from_db()
|
|
user2.refresh_from_db()
|
|
assert group not in user1.user_groups.all()
|
|
assert group not in user2.user_groups.all()
|
|
|
|
|
|
def test_user_not_trainee_htmx(client, create_cid_manager, create_users):
|
|
from django.contrib.auth import get_user_model
|
|
User = get_user_model()
|
|
|
|
client.login(username="cidmanager", password="password")
|
|
user2 = User.objects.get(username="user2")
|
|
assert user2.userprofile.peninsula_trainee is True
|
|
|
|
# Call view via HTMX
|
|
response = client.get(
|
|
reverse("generic:user_not_trainee", kwargs={"user_id": user2.pk}),
|
|
HTTP_HX_REQUEST="true"
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert response.content == b""
|
|
|
|
user2.refresh_from_db()
|
|
assert user2.userprofile.peninsula_trainee is False
|