Files
customerTicket/tests/test_staff_inline_sharing.py
T
2026-10-04 16:42:19 +03:30

36 lines
2.4 KiB
Python

import pytest
from django.urls import reverse
from apps.tickets.sharing import revoke_staff_share, share_staff_message, staff_message_context
from tests.test_staff_sharing import make_sharing_case
pytestmark = pytest.mark.django_db
def test_inline_sharing_keeps_each_messages_recipients_and_history_separate(client):
case = make_sharing_case()
other_message = case["ticket"].ticket_messages.get(body="مکاتبه محرمانه قبل")
selected_grant = share_staff_message(case["selected"], case["sender"], case["recipient"], "رسید منتخب")
other_grant = share_staff_message(other_message, case["sender"], case["outsider"], "مکاتبه دیگر")
client.force_login(case["recipient"])
assert client.get(reverse("staff_tickets:shared_message", args=[selected_grant.public_id]), follow=True).status_code == 200
assert client.post(reverse("staff_tickets:read_shares", args=[case["ticket"].public_id]), {"message_ids": [str(case["selected"].public_id)]}).status_code == 200
client.force_login(case["sender"])
response = client.get(reverse("staff_tickets:detail", args=[case["ticket"].public_id]))
selected = next(item for item in response.context["conversation"] if item.pk == case["selected"].pk)
before = next(item for item in response.context["conversation"] if item.pk == other_message.pk)
assert [grant.pk for grant in selected.staff_message_shares] == [selected_grant.pk]
assert selected.staff_message_shares[0].first_viewed_at is not None
assert [grant.pk for grant in before.staff_message_shares] == [other_grant.pk]
assert {event.metadata["action"] for event in selected.staff_share_events} == {"created", "opened"}
assert all(event.metadata["message_public_id"] == str(selected.public_id) for event in selected.staff_share_events)
assert all(event.metadata["user"] == case["recipient"].pk for event in selected.staff_share_events)
assert revoke_staff_share(selected_grant, case["sender"])
staff_message_context(case["ticket"], case["sender"], [case["selected"]])
assert case["selected"].staff_message_shares[0].revoked_at is not None
assert {event.metadata["action"] for event in case["selected"].staff_share_events} == {"created", "opened", "revoked"}
context = staff_message_context(case["ticket"], case["customer"], [other_message])
assert not context["can_share_message"]
assert not hasattr(other_message, "staff_message_shares")