fix some bugs

This commit is contained in:
javad committed 2026-09-15 09:50:17 +03:30
1 parent b8b3aba855
commit 963fd839dc
22 files changed
+570 -33

No files matched your search

+72 -1
View File
@@ -12,12 +12,83 @@ from apps.attachments.models import AttachmentPolicy
from apps.customers.models import ContactGroup, CustomerProfile
from apps.notifications.models import NotificationJob
from apps.staff.models import OrganizationalUnit, StaffProfile
from apps.tickets.models import GroupDispatch, Ticket, TicketCategory, TicketTag
from apps.tickets.models import GroupDispatch, Ticket, TicketCategory, TicketEvent, TicketTag
from apps.tickets.policies import TicketPolicy
from apps.tickets.selectors import staff_ticket_rows
from apps.tickets.services import create_ticket, dispatch_group_tickets, refresh_group_dispatch_status
@pytest.mark.django_db
def test_dispatch_owner_can_resolve_all_open_group_tickets_from_report_or_ticket(client):
unit = OrganizationalUnit.objects.create(name="حل گروهی", slug="resolve-dispatch")
unit.permissions.add(*Permission.objects.filter(
content_type__app_label="tickets",
codename__in=("view_ticket", "dispatch_group_tickets", "change_ticket"),
))
staff = make_staff("dispatch-resolver", unit)
first = make_contact("resolve-first", "09120000401")
second = make_contact("resolve-second", "09120000402")
group = ContactGroup.objects.create(name="گروه قابل حل", unit=unit)
first.customer_profile.groups.add(group)
second.customer_profile.groups.add(group)
category = TicketCategory.objects.create(unit=unit, title="پیگیری گروه", slug="resolve-group")
dispatch, tickets = dispatch_group_tickets(
user=staff, unit=unit, contact_group=group, category=category,
subject="پیگیری پاسخ گروه", body="لطفاً پاسخ دهید.",
)
tickets[1].status = Ticket.Status.CLOSED
tickets[1].closed_at = timezone.now()
tickets[1].save(update_fields=["status", "closed_at", "updated_at"])
client.force_login(staff)
report = client.get(reverse("staff_tickets:dispatch_detail", args=[dispatch.public_id]))
report_text = report.content.decode()
assert report.context["open_ticket_count"] == 1
assert "حل‌شدن همه تیکت‌ها (1)" in report_text
ticket_page = client.get(reverse("staff_tickets:detail", args=[tickets[0].public_id]))
assert "وابسته به ارسال گروهی" in ticket_page.content.decode()
assert dispatch.subject in ticket_page.content.decode()
assert "حل‌شدن تمامی تیکت‌های گروه (1)" in ticket_page.content.decode()
response = client.post(
reverse("staff_tickets:dispatch_resolve", args=[dispatch.public_id]),
{"return_ticket": tickets[0].public_id},
)
assert response.status_code == 302
assert response.url == reverse("staff_tickets:detail", args=[tickets[0].public_id])
tickets[0].refresh_from_db()
tickets[1].refresh_from_db()
assert tickets[0].status == Ticket.Status.RESOLVED
assert tickets[0].resolved_at is not None
assert tickets[1].status == Ticket.Status.CLOSED
assert TicketEvent.objects.filter(
ticket=tickets[0], event_type=TicketEvent.Type.STATUS_CHANGED,
metadata__group_dispatch_id=dispatch.pk,
).exists()
@pytest.mark.django_db
def test_dispatch_bulk_resolve_requires_change_ticket_permission(client):
unit = OrganizationalUnit.objects.create(name="گروه فقط مشاهده", slug="read-only-dispatch")
unit.permissions.add(*Permission.objects.filter(
content_type__app_label="tickets", codename__in=("view_ticket", "dispatch_group_tickets")
))
staff = make_staff("read-only-dispatcher", unit)
customer = make_contact("read-only-recipient", "09120000403")
group = ContactGroup.objects.create(name="گروه فقط خواندنی", unit=unit)
customer.customer_profile.groups.add(group)
category = TicketCategory.objects.create(unit=unit, title="فقط مشاهده", slug="read-only-group")
dispatch, tickets = dispatch_group_tickets(
user=staff, unit=unit, contact_group=group, category=category,
subject="عملیات فقط مشاهده", body="متن عملیات",
)
client.force_login(staff)
assert client.get(reverse("staff_tickets:dispatch_detail", args=[dispatch.public_id])).context["can_resolve_dispatch"] is False
client.post(reverse("staff_tickets:dispatch_resolve", args=[dispatch.public_id]))
tickets[0].refresh_from_db()
assert tickets[0].status != Ticket.Status.RESOLVED
def make_staff(username, unit):
user = User.objects.create_user(username=username, account_type=User.AccountType.STAFF)
StaffProfile.objects.create(user=user, display_name=username, primary_unit=unit)