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")