Files
customerTicket/tests/test_dispatch_presentation.py
T

47 lines
2.9 KiB
Python

import pytest
from django.contrib.auth.models import Permission
from django.urls import reverse
from apps.accounts.models import User
from apps.customers.models import ContactGroup, CustomerProfile
from apps.staff.models import OrganizationalUnit, StaffProfile
from apps.tickets.dispatch_presentation import dispatch_form_options
from apps.tickets.models import TicketCategory
pytestmark = pytest.mark.django_db
def test_dispatch_options_count_only_eligible_members_and_preserve_unit_scope(client):
unit = OrganizationalUnit.objects.create(name="واحد مجاز", slug="dispatch-options")
other = OrganizationalUnit.objects.create(name="واحد دیگر", slug="dispatch-options-other")
unit.permissions.add(Permission.objects.get(codename="dispatch_group_tickets"))
user = User.objects.create_user(username="dispatch-options", account_type="STAFF")
StaffProfile.objects.create(user=user, primary_unit=unit)
group = ContactGroup.objects.create(unit=unit, name="گروه مجاز")
hidden_group = ContactGroup.objects.create(unit=other, name="گروه پنهان")
category = TicketCategory.objects.create(unit=unit, title="مجاز", slug="options-category")
hidden_category = TicketCategory.objects.create(unit=other, title="پنهان", slug="options-hidden-category")
for index, (mobile, active) in enumerate([("09120000091", True), ("", True), (None, True), ("09120000092", False)]):
contact = User.objects.create_user(username=f"options-customer-{index}", mobile=mobile, is_active=active, account_type="CUSTOMER")
profile = CustomerProfile.objects.create(user=contact)
profile.groups.add(group)
client.force_login(user)
response = client.get(reverse("staff_tickets:dispatch_create"))
assert response.status_code == 200
options = response.context["dispatch_options"]
assert options["units"] == [{"id": unit.pk, "name": unit.name, "operations": ["BULK"]}]
assert options["groups"] == [{"id": group.pk, "name": group.name, "unit_id": unit.pk, "recipient_count": 1}]
assert category.pk in [item["id"] for item in options["categories"]]
assert hidden_category.pk not in [item["id"] for item in options["categories"]]
assert hidden_group.pk not in [item["id"] for item in options["groups"]]
assert "?v=" in response.content.decode().split("dispatch-workspace.js", 1)[1]
def test_dispatch_options_include_global_category_fallback_for_units_without_categories():
unit = OrganizationalUnit.objects.create(name="بدون دسته‌بندی", slug="dispatch-options-fallback")
user = User.objects.create_superuser(username="options-admin", account_type="STAFF")
global_category = TicketCategory.objects.create(title="عمومی", slug="options-global", unit=None)
options = dispatch_form_options(user, [unit], ContactGroup.objects.none())
assert {"id": global_category.pk, "title": global_category.title, "unit_id": None} in options["categories"]
assert options["groups"] == []