Skip to content

Commit

Permalink
apps/userdashboard: updates tests
Browse files Browse the repository at this point in the history
  • Loading branch information
hklarner committed Aug 10, 2023
1 parent cc832cb commit 82d101a
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 34 deletions.
Empty file added tests/ai_reports/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions tests/ai_reports/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from pytest_factoryboy import register

from .factories import AiReportFactory

register(AiReportFactory)
16 changes: 16 additions & 0 deletions tests/ai_reports/factories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import random

import factory

from apps.ai_reports.models import AiReport
from tests.factories import CommentFactory


class AiReportFactory(factory.django.DjangoModelFactory):
class Meta:
model = AiReport

category = factory.Faker("word")
explanation = factory.Faker("sentence", nb_words=6)
confidence = random.random()
comment = factory.SubFactory(CommentFactory)
2 changes: 2 additions & 0 deletions tests/userdashboard/conftest.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from pytest_factoryboy import register

from tests.ai_reports.factories import AiReportFactory
from tests.ideas.factories import IdeaFactory
from tests.moderatorfeedback.factories import ModeratorCommentFeedbackFactory

register(IdeaFactory)
register(ModeratorCommentFeedbackFactory)
register(AiReportFactory)
57 changes: 43 additions & 14 deletions tests/userdashboard/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,13 @@ def test_moderator_can_mark_comment_read(apiclient, comment_factory, idea):


@pytest.mark.django_db
def test_queryset_and_filters(apiclient, report_factory, comment_factory, idea_factory):
def test_queryset_and_filters(
apiclient,
report_factory,
ai_report_factory,
comment_factory,
idea_factory,
):
idea = idea_factory(module__project__pk=1)
other_idea = idea_factory(module__project__pk=2)
project = idea.project
Expand All @@ -121,9 +127,10 @@ def test_queryset_and_filters(apiclient, report_factory, comment_factory, idea_f
)
comment_5 = comment_factory(content_object=other_idea)

# comment_1 with 2 reports
# comment_1 with 2 reports and 1 ai report
report_factory(content_object=comment_1)
report_factory(content_object=comment_1)
ai_report_factory(comment=comment_1)
# comment_2 with 1 report, is read
report_factory(content_object=comment_2)
# comment_3 with 1 report
Expand All @@ -141,35 +148,57 @@ def test_queryset_and_filters(apiclient, report_factory, comment_factory, idea_f
response = apiclient.get(url)
assert response.status_code == 200
assert len(response.data) == 2
comment_pks = [comment["pk"] for comment in response.data]
assert comment_pks == [comment_1.pk, comment_3.pk]
assert [comment["pk"] for comment in response.data] == [comment_1.pk, comment_3.pk]

# test default sorting is most reported (second sorting -created)
filter_string = "?is_reviewed=all"
response = apiclient.get(url + filter_string)
assert response.status_code == 200
assert len(response.data) == 4
comment_pks = [comment["pk"] for comment in response.data]
assert comment_pks == [comment_1.pk, comment_3.pk, comment_2.pk, comment_4.pk]

filter_string = "?is_reviewed=all&has_reports=False"
assert [comment["pk"] for comment in response.data] == [
comment_1.pk,
comment_3.pk,
comment_2.pk,
comment_4.pk,
]

filter_string = "?is_reviewed=all&reported_by=users"
response = apiclient.get(url + filter_string)
assert response.status_code == 200
assert len(response.data) == 3
assert [comment["pk"] for comment in response.data] == [
comment_1.pk,
comment_3.pk,
comment_2.pk,
]

filter_string = "?is_reviewed=all&reported_by=ai"
response = apiclient.get(url + filter_string)
assert response.status_code == 200
assert len(response.data) == 1
comment_pks = [comment["pk"] for comment in response.data]
assert comment_pks == [comment_4.pk]
assert [comment["pk"] for comment in response.data] == [comment_1.pk]

filter_string = "?has_reports=False"
filter_string = "?is_reviewed=all&reported_by=off"
response = apiclient.get(url + filter_string)
assert response.status_code == 200
assert len(response.data) == 0
assert len(response.data) == 4
assert [comment["pk"] for comment in response.data] == [
comment_1.pk,
comment_3.pk,
comment_2.pk,
comment_4.pk,
]

filter_string = "?is_reviewed=all&ordering=created"
response = apiclient.get(url + filter_string)
assert response.status_code == 200
assert len(response.data) == 4
comment_pks = [comment["pk"] for comment in response.data]
assert comment_pks == [comment_2.pk, comment_1.pk, comment_3.pk, comment_4.pk]
assert [comment["pk"] for comment in response.data] == [
comment_2.pk,
comment_1.pk,
comment_3.pk,
comment_4.pk,
]


@pytest.mark.django_db
Expand Down
51 changes: 31 additions & 20 deletions tests/userdashboard/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,46 @@


@pytest.mark.django_db
def test_num_reports(apiclient, report_factory, comment_factory, idea):
comment_1 = comment_factory(content_object=idea)
report_factory(content_object=comment_1)
def test_num_reports(
apiclient,
report_factory,
ai_report_factory,
comment_factory,
idea,
):
comments = comment_factory.create_batch(size=4, content_object=idea)
comments = {comment.pk: comment for comment in comments}
pks = list(comments)

comment_2 = comment_factory(content_object=idea)
report_factory(content_object=comment_2)
report_factory(content_object=comment_2)
n_user_reports = [1, 3, 0, 0]
num_user_reports_created = dict(zip(pks, n_user_reports))
for pk, size in num_user_reports_created.items():
report_factory.create_batch(size=size, content_object=comments[pk])

comment_3 = comment_factory(content_object=idea)
has_ai_report = [True, False, True, False]
ai_reports_created = dict(zip(comments, has_ai_report))
for pk, has_ai_report in ai_reports_created.items():
if has_ai_report:
ai_report_factory(comment=comments[pk])

num_reports_created = {
i: num_user_reports_created[i] + int(ai_reports_created[i]) for i in pks
}

project = idea.project
moderator = project.moderators.first()
apiclient.login(username=moderator.email, password="password")
url = reverse("moderationcomments-list", kwargs={"project_pk": project.pk})
response = apiclient.get(url)

assert response.status_code == 200
assert len(response.data) == 3
comment_1_data = [
comment for comment in response.data if comment["pk"] == comment_1.pk
][0]
comment_2_data = [
comment for comment in response.data if comment["pk"] == comment_2.pk
][0]
comment_3_data = [
comment for comment in response.data if comment["pk"] == comment_3.pk
][0]
assert comment_1_data["num_reports"] == 1
assert comment_2_data["num_reports"] == 2
assert comment_3_data["num_reports"] == 0
assert len(response.data) == 4

num_reports_received = {
comment["pk"]: comment["num_reports"] for comment in response.data
}

assert num_reports_created == num_reports_received


@pytest.mark.django_db
Expand Down

0 comments on commit 82d101a

Please sign in to comment.