Как я могу установить ldap_user в тесте django?
У нас есть django приложение с LDAP аутентификацией (django-auth-ldap). В пользовательском разрешении мы проверяем, содержит ли request.ldap_user.group_names определенную группу (в зависимости от request.data). Ручное тестирование показало, что оно работает. Теперь мы хотим написать автоматизированный тест, но продолжаем получать "AttributeError: 'User' object has no attribute 'ldap_user' and we can not find anywhere how we can set the ldap_user and the ldap_user group names.
".Вот тест на данный момент:
import pytest
from django.urls import reverse
from django.test import Client
from django.contrib.auth.models import User
import requests
client = Client()
url_create_artifact = reverse("artifacts/create-list")
@pytest.mark.django_db()
def test_post_artifacts_create_logged_in():
component = Component()
component.id = "test_component"
component.ldap_group = "test_group"
component.save()
user = User.objects.create(username="test_user")
user.set_password("1234")
user.save()
client.login(username="test_user", password="1234")
response = client.post(
url_create_artifact,
{
"component_id": "test_component"
},
)
assert response.status_code == 200
Это пользовательское разрешение:
from rest_framework.permissions import BasePermission, SAFE_METHODS
from django.shortcuts import get_object_or_404
class CustomPermission(BasePermission):
def has_permission(self, request, view):
component_id = request.data["component_id"]
component = get_object_or_404(klass=Component, id=component_id)
user = request.user
if user.is_authenticated:
user_ldap_groups = request.user.ldap_user.group_names
component_ldap_group = component.ldap_group
return component_ldap_group in user_ldap_groups
else:
return False
Наше представление начинается с
from rest_framework.authentication import SessionAuthentication
from our_app.permissions import ApplicationPermission
from rest_framework import viewsets
class ArtifactSetCreate(viewsets.GenericViewSet):
authentication_classes = [SessionAuthentication]
permission_classes = [CustomPermission]
[...]
urls.py содержит
from rest_framework import routers
from our_app.views import ArtifactViewSetCreate
router = routers.DefaultRouter()
router.register(r"artifact/create", ArtifactViewSetCreate, basename="artifacts/create")