pedagogy: tests and fixs for uv moderation form

This commit is contained in:
Antoine Bartuccio 2019-06-20 14:22:06 +02:00
parent 806084e707
commit 171d9a4381
Signed by: klmp200
GPG Key ID: E7245548C53F904B
2 changed files with 241 additions and 4 deletions

View File

@ -28,7 +28,7 @@ from django.core.management import call_command
from core.models import User from core.models import User
from pedagogy.models import UV, UVComment from pedagogy.models import UV, UVComment, UVCommentReport
def create_uv_template(user_id, code="IFC1", exclude_list=[]): def create_uv_template(user_id, code="IFC1", exclude_list=[]):
@ -727,3 +727,232 @@ class UVSearchTest(TestCase):
# Search with credit type # Search with credit type
response = self.client.get(reverse("pedagogy:guide"), {"credit_type": "TM"}) response = self.client.get(reverse("pedagogy:guide"), {"credit_type": "TM"})
self.assertNotContains(response, text="PA00") self.assertNotContains(response, text="PA00")
class UVModerationFormTest(TestCase):
"""
Test moderation view
Assert access rights and if the form works well
"""
def setUp(self):
call_command("populate")
self.krophil = User.objects.get(username="krophil")
# Prepare a comment
comment_kwargs = create_uv_comment_template(self.krophil.id)
comment_kwargs["author"] = self.krophil
comment_kwargs["uv"] = UV.objects.get(id=comment_kwargs["uv"])
self.comment_1 = UVComment(**comment_kwargs)
self.comment_1.save()
# Prepare another comment
comment_kwargs = create_uv_comment_template(self.krophil.id)
comment_kwargs["author"] = self.krophil
comment_kwargs["uv"] = UV.objects.get(id=comment_kwargs["uv"])
self.comment_2 = UVComment(**comment_kwargs)
self.comment_2.save()
# Prepare a comment report for comment 1
self.report_1 = UVCommentReport(
comment=self.comment_1, reporter=self.krophil, reason="C'est moche"
)
self.report_1.save()
self.report_1_bis = UVCommentReport(
comment=self.comment_1, reporter=self.krophil, reason="C'est moche 2"
)
self.report_1_bis.save()
# Prepare a comment report for comment 2
self.report_2 = UVCommentReport(
comment=self.comment_2, reporter=self.krophil, reason="C'est moche"
)
self.report_2.save()
def test_access_authorized_success(self):
# Test with root
self.client.login(username="root", password="plop")
response = self.client.get(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 200)
# Test with pedagogy admin
self.client.login(username="tutu", password="plop")
response = self.client.get(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 200)
def test_access_unauthorized_fail(self):
# Test with anonymous user
response = self.client.get(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 403)
# Test with unsubscribed user
self.client.login(username="guy", password="plop")
response = self.client.get(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 403)
# Test with subscribed user
self.client.login(username="sli", password="plop")
response = self.client.get(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 403)
def test_do_nothing(self):
self.client.login(username="root", password="plop")
response = self.client.post(reverse("pedagogy:moderation"))
self.assertEquals(response.status_code, 302)
# Test that nothing has changed
self.assertTrue(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_1.id).exists())
self.assertTrue(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
self.assertTrue(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_2.id).exists())
def test_delete_comment(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"), {"accepted_reports": [self.report_1.id]}
)
self.assertEquals(response.status_code, 302)
# Test that the comment and it's associated report has been deleted
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertFalse(UVComment.objects.filter(id=self.comment_1.id).exists())
# Test that the bis report has been deleted
self.assertFalse(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
# Test that the other comment and report still exists
self.assertTrue(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_2.id).exists())
def test_delete_comment_bulk(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"),
{"accepted_reports": [self.report_1.id, self.report_2.id]},
)
self.assertEquals(response.status_code, 302)
# Test that comments and their associated reports has been deleted
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertFalse(UVComment.objects.filter(id=self.comment_1.id).exists())
self.assertFalse(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertFalse(UVComment.objects.filter(id=self.comment_2.id).exists())
# Test that the bis report has been deleted
self.assertFalse(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
def test_delete_comment_with_bis(self):
# Test case if two reports targets the same comment and are both deleted
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"),
{"accepted_reports": [self.report_1.id, self.report_1_bis.id]},
)
self.assertEquals(response.status_code, 302)
# Test that the comment and it's associated report has been deleted
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertFalse(UVComment.objects.filter(id=self.comment_1.id).exists())
# Test that the bis report has been deleted
self.assertFalse(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
def test_delete_report(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"), {"denied_reports": [self.report_1.id]}
)
self.assertEquals(response.status_code, 302)
# Test that the report has been deleted and that the comment still exists
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_1.id).exists())
# Test that the bis report is still there
self.assertTrue(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
# Test that the other comment and report still exists
self.assertTrue(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_2.id).exists())
def test_delete_report_bulk(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"),
{
"denied_reports": [
self.report_1.id,
self.report_1_bis.id,
self.report_2.id,
]
},
)
self.assertEquals(response.status_code, 302)
# Test that every reports has been deleted
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertFalse(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
self.assertFalse(UVCommentReport.objects.filter(id=self.report_2.id).exists())
# Test that comments still exists
self.assertTrue(UVComment.objects.filter(id=self.comment_1.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_2.id).exists())
def test_delete_mixed(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"),
{
"accepted_reports": [self.report_2.id],
"denied_reports": [self.report_1.id],
},
)
self.assertEquals(response.status_code, 302)
# Test that report 2 and his comment has been deleted
self.assertFalse(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertFalse(UVComment.objects.filter(id=self.comment_2.id).exists())
# Test that report 1 has been deleted and it's comment still exists
self.assertFalse(UVCommentReport.objects.filter(id=self.report_1.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_1.id).exists())
# Test that report 1 bis is still there
self.assertTrue(
UVCommentReport.objects.filter(id=self.report_1_bis.id).exists()
)
def test_delete_mixed_with_bis(self):
self.client.login(username="root", password="plop")
response = self.client.post(
reverse("pedagogy:moderation"),
{
"accepted_reports": [self.report_1.id],
"denied_reports": [self.report_1_bis.id],
},
)
self.assertEquals(response.status_code, 302)
# Test that report 1 and 1 bis has been deleted
self.assertFalse(
UVCommentReport.objects.filter(
id__in=[self.report_1.id, self.report_1_bis.id]
).exists()
)
# Test that comment 1 has been deleted
self.assertFalse(UVComment.objects.filter(id=self.comment_1.id).exists())
# Test that report and comment 2 still exists
self.assertTrue(UVCommentReport.objects.filter(id=self.report_2.id).exists())
self.assertTrue(UVComment.objects.filter(id=self.comment_2.id).exists())

View File

@ -34,7 +34,7 @@ from django.views.generic import (
from django.core import serializers from django.core import serializers
from django.utils import html from django.utils import html
from django.http import HttpResponse from django.http import HttpResponse
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
@ -248,9 +248,17 @@ class UVModerationFormView(FormView):
def form_valid(self, form): def form_valid(self, form):
form_clean = form.clean() form_clean = form.clean()
for report in form_clean.get("accepted_reports", []): for report in form_clean.get("accepted_reports", []):
report.comment.delete() # Delete the related comment try:
report.comment.delete() # Delete the related comment
except ObjectDoesNotExist:
# To avoid errors when two reports points the same comment
pass
for report in form_clean.get("denied_reports", []): for report in form_clean.get("denied_reports", []):
report.delete() # Delete the report itself try:
report.delete() # Delete the report itself
except ObjectDoesNotExist:
# To avoid errors when two reports points the same comment
pass
return super(UVModerationFormView, self).form_valid(form) return super(UVModerationFormView, self).form_valid(form)
def get_success_url(self): def get_success_url(self):