Я не могу создать тесты, в которых участвуют группы авторизации

Салюты,

Я создавал тесты для тестирования веб-

Я облазил весь интернет в поисках решения.

Я создавал фикстуру для группы, которая позволяет пользователям создавать записи в блогах. Это серия тестов, которые я создавал для целей авторизации. Я использовал как фикстуры Pytest, так и фабрики с похожими результатами.

Вот тестовый класс:

import pytest
import factory
from django.contrib.auth import get_user_model
from posts.models import Post
from members.models import Member
from factories import MemberFactory, PostFactory
from faker import Faker
from django.contrib.auth.models import Group

# Create your tests here.
User = get_user_model()
fake = Faker()





#Fixture
@pytest.fixture(scope="session")
def contributor_group(db):
    return Group.objects.create("Contributor")



@pytest.fixture(scope="session")
def authorized_user(db):
    authorized_user = MemberFactory()
    return authorized_user


 

# Post Tests
class TestPosts:
#Disallows user to create a post if they're not a contributor
    @pytest.mark.django_db
    def test_is_not_contributor(db):
        reg = MemberFactory()
        
        assert reg.has_post_permissions() is False
#Allows a user to create a post if they're a contributor.     
    @pytest.mark.django_db
    def test_can_post(db):
        contributor_group.
        print(authorized_user)
        
        print(contributor_group)
        print(authorized_user.has_post_permissions())
        assert authorized_user.has_post_permissions() is True

Я также создал фабрики для них обоих.

import factory
from faker import Faker
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth import get_user_model
from posts.models import Post
from members.models import Member
fake = Faker()
User = get_user_model()

class MemberFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User
        

    username = factory.Faker('user_name')
    email = factory.Faker('email')
    password = 'password'
    is_active = True
    is_superuser = False
    
    @classmethod
    def has_post_permissions(self):
        self.has_post_permissions()

    


class PostFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Post

    title = fake.text(150)
    author = factory.SubFactory(MemberFactory)
    content = fake.text()

Я создал группу «Соавтор». Группу с помощью страницы администратора разработки. Я не могу понять, почему группы регистрируют классы групп и пользователей. Я даже пытался создать MemberFactory, но в итоге получил тот же результат. Я хотел бы знать, как я могу интегрировать группы авторизации в мои тесты. Я не могу понять этого.

Заранее спасибо.

Вы должны тестировать разрешение, создавая объект, чтобы полностью проверить функциональность вашего представления, также вот кое-что, что вы можете улучшить:

test_permissions.py

import pytest

from myapp.models import Post

from django.urls import reverse
from django.test import Client
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType

User = get_user_model()


@pytest.mark.django_db
class TestPermissions:

    def test_post_add_contributor_group_permission(db):
        client = Client()

        user = User.objects.create_user(
            username="testuser",
            email="test@example.com",
            password="pass123"
        )

        post_data = {
            "title": "Post Title",
            "content": "post content",
            "author": user.id
        }

        group = Group.objects.create(name="Contributor")
        client.login(username="testuser", password="pass123")

        # Send request without permission
        response = client.post(reverse("post-add"), post_data)
        assert response.status_code == 200
        assert Post.objects.all().count() == 0

        # Add permission to group, group to user and resend request
        content_type = ContentType.objects.get_for_model(Post)
        permission = Permission.objects.get(
            content_type=content_type,
            codename__icontains="add"
        )
        group.permissions.add(permission)
        user.groups.add(group)

        response = client.post(reverse("post-add"), post_data)

        assert response.status_code == 200
        assert Post.objects.all().count() == 1

views.py

def create_post(request):
    if request.method == "POST":
        title = request.POST.get("title")
        content = request.POST.get("content")
        user_id = request.POST.get("author")

        if request.user.has_perm("myapp.add_post"):
            Post.objects.create(
                title=title,
                content=content,
                author=User.objects.get(pk=user_id)
            )
        else:
            pass

    return render(request, "post_create.html")

Вернуться на верх