mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-04 02:53:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from datetime import datetime, timedelta
 | 
						|
 | 
						|
import pytest
 | 
						|
from django.contrib.auth.models import Permission
 | 
						|
from django.test import Client
 | 
						|
from django.urls import reverse
 | 
						|
from django.utils.timezone import localtime
 | 
						|
from model_bakery import baker
 | 
						|
from pytest_django.asserts import assertRedirects
 | 
						|
 | 
						|
from core.models import BanGroup, User, UserBan
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def operator(db) -> User:
 | 
						|
    return baker.make(
 | 
						|
        User,
 | 
						|
        user_permissions=Permission.objects.filter(
 | 
						|
            codename__in=["view_userban", "add_userban", "delete_userban"]
 | 
						|
        ),
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "expires_at",
 | 
						|
    [None, localtime().replace(second=0, microsecond=0) + timedelta(days=7)],
 | 
						|
)
 | 
						|
def test_ban_user(client: Client, operator: User, expires_at: datetime):
 | 
						|
    client.force_login(operator)
 | 
						|
    user = baker.make(User)
 | 
						|
    ban_group = BanGroup.objects.first()
 | 
						|
    data = {
 | 
						|
        "user": user.id,
 | 
						|
        "ban_group": ban_group.id,
 | 
						|
        "reason": "Being naughty",
 | 
						|
    }
 | 
						|
    if expires_at is not None:
 | 
						|
        data["expires_at"] = expires_at.strftime("%Y-%m-%d %H:%M")
 | 
						|
    response = client.post(reverse("rootplace:ban_create"), data)
 | 
						|
    assertRedirects(response, expected_url=reverse("rootplace:ban_list"))
 | 
						|
    bans = list(user.bans.all())
 | 
						|
    assert len(bans) == 1
 | 
						|
    assert bans[0].expires_at == expires_at
 | 
						|
    assert bans[0].reason == "Being naughty"
 | 
						|
    assert bans[0].ban_group == ban_group
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.django_db
 | 
						|
def test_remove_ban(client: Client, operator: User):
 | 
						|
    client.force_login(operator)
 | 
						|
    user = baker.make(User)
 | 
						|
    ban = baker.make(UserBan, user=user)
 | 
						|
    assert user.bans.exists()
 | 
						|
    response = client.post(reverse("rootplace:ban_remove", kwargs={"ban_id": ban.id}))
 | 
						|
    assertRedirects(response, expected_url=reverse("rootplace:ban_list"))
 | 
						|
    assert not user.bans.exists()
 |