Testing an Update a Post function

I'm not really sure about how to update blog posts based on my code. I've been using method-based views.

def create_post(request):
    form_class = PostForm
    template = 'addpost.html'

    
    if request.method == "POST":
        form = form_class(request.POST)
        title = request.POST.get("title")
        content = request.POST.get("content")
        user_id = request.POST.get("author")

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

    return render(request, template)

def edit_post(request):
    form_class = PostForm
    template = 'editpost.html'

    if request.method == "PATCH":
        form = form_class(request.PATCH)
        Title = request.PATCH.GET("title")
        Content = request.PATCH.GET("content")
        User_id = request.PATCH.GET("author")

    if request.user.has_perm("posts.update_post") and (User_id == User.pk):
        Post.objects.update(
            title=Title,
            content=Content,
            author=User.objects.get(pk=User_id)
        )
    else:
        pass

    return render(request, template)

For the update_post method, do I use PATCH, UPDATE, or a POST request in this scenario? Keep in mind that I'm also using this method for testing purposes as well.

Here's the Pytest Code:

class TestPermissions:
    @pytest.mark.django_db
    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")

        response = client.post(reverse("add_post"), post_data)

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

        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("add_post"), post_data)

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


    @pytest.mark.django_db
    def test_post_update_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")

        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("add_post"), post_data)

        updated_data = {
            "title": "Updated Post Title",
            "content": "Updated Post Content",
            "author": user.id
        }
        response = client.patch('edit_post//1', updated_data)

        assert response.status_code == 200

I have been using both patch and update without any success. Is there anyone who can give me a clue here as to make updates?

Back to Top