feat: Implement per-case query and messaging functionality with UI updates and tests
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import pytest
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.urls import reverse
|
||||
|
||||
from atlas.models import CaseCollection, CaseDetail, CaseReviewMessage
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_collection_case_query_messaging_enabled_default_true():
|
||||
collection = CaseCollection.objects.create(name="Default messaging collection")
|
||||
|
||||
assert collection.case_query_messaging_enabled is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_collection_case_review_thread_returns_404_when_messaging_disabled(create_case, client):
|
||||
user_model = get_user_model()
|
||||
author = user_model.objects.create_user(username="author-thread", password="testpass")
|
||||
|
||||
collection = CaseCollection.objects.create(
|
||||
name="Thread disabled",
|
||||
case_query_messaging_enabled=False,
|
||||
)
|
||||
collection.author.add(author)
|
||||
|
||||
case = create_case
|
||||
CaseDetail.objects.create(collection=collection, case=case, sort_order=0)
|
||||
attempt = collection.get_or_create_cid_user_exam(user_user=author)
|
||||
|
||||
client.force_login(author)
|
||||
url = reverse(
|
||||
"atlas:collection_case_review_thread",
|
||||
kwargs={
|
||||
"exam_id": collection.pk,
|
||||
"cid_user_exam_id": attempt.pk,
|
||||
"case_id": case.pk,
|
||||
},
|
||||
)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_collection_user_messages_returns_404_when_messaging_disabled(create_case, client):
|
||||
user_model = get_user_model()
|
||||
author = user_model.objects.create_user(username="author-user-messages", password="testpass")
|
||||
learner = user_model.objects.create_user(username="learner-user-messages", password="testpass")
|
||||
|
||||
collection = CaseCollection.objects.create(
|
||||
name="User messages disabled",
|
||||
case_query_messaging_enabled=False,
|
||||
)
|
||||
collection.author.add(author)
|
||||
|
||||
case = create_case
|
||||
CaseDetail.objects.create(collection=collection, case=case, sort_order=0)
|
||||
collection.get_or_create_cid_user_exam(user_user=learner)
|
||||
|
||||
client.force_login(author)
|
||||
url = reverse(
|
||||
"atlas:collection_user_messages",
|
||||
kwargs={"exam_id": collection.pk, "user_pk": learner.pk},
|
||||
)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_user_messages_inbox_ignores_disabled_collection_messages(create_case, client):
|
||||
user_model = get_user_model()
|
||||
moderator = user_model.objects.create_user(username="moderator", password="testpass")
|
||||
learner = user_model.objects.create_user(username="learner", password="testpass")
|
||||
|
||||
enabled_collection = CaseCollection.objects.create(
|
||||
name="Enabled messaging collection",
|
||||
case_query_messaging_enabled=True,
|
||||
)
|
||||
disabled_collection = CaseCollection.objects.create(
|
||||
name="Disabled messaging collection",
|
||||
case_query_messaging_enabled=False,
|
||||
)
|
||||
enabled_collection.author.add(moderator)
|
||||
disabled_collection.author.add(moderator)
|
||||
|
||||
case = create_case
|
||||
CaseDetail.objects.create(collection=enabled_collection, case=case, sort_order=0)
|
||||
CaseDetail.objects.create(collection=disabled_collection, case=case, sort_order=0)
|
||||
|
||||
enabled_attempt = enabled_collection.get_or_create_cid_user_exam(user_user=learner)
|
||||
disabled_attempt = disabled_collection.get_or_create_cid_user_exam(user_user=learner)
|
||||
|
||||
CaseReviewMessage.objects.create(
|
||||
cid_user_exam=enabled_attempt,
|
||||
case=case,
|
||||
author=learner,
|
||||
message_type=CaseReviewMessage.MessageType.QUERY,
|
||||
message="Enabled message",
|
||||
requires_acknowledgement=True,
|
||||
)
|
||||
CaseReviewMessage.objects.create(
|
||||
cid_user_exam=disabled_attempt,
|
||||
case=case,
|
||||
author=learner,
|
||||
message_type=CaseReviewMessage.MessageType.QUERY,
|
||||
message="Disabled message",
|
||||
requires_acknowledgement=True,
|
||||
)
|
||||
|
||||
client.force_login(moderator)
|
||||
response = client.get(reverse("atlas:user_messages_inbox"))
|
||||
|
||||
assert response.status_code == 200
|
||||
assert "Enabled messaging collection" in response.content.decode()
|
||||
assert "Disabled messaging collection" not in response.content.decode()
|
||||
Reference in New Issue
Block a user