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?