fix some bugs
This commit is contained in:
1 parent
b8b3aba855
commit
963fd839dc
22 files changed
+570
-33
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user