90 lines
3.8 KiB
Python
90 lines
3.8 KiB
Python
from pathlib import Path
|
|
|
|
from django.urls import reverse
|
|
from playwright.sync_api import expect
|
|
|
|
from tests.e2e.pages.base import BasePage
|
|
|
|
|
|
class DispatchWorkspacePage(BasePage):
|
|
@property
|
|
def review_dialog(self):
|
|
return self.page.get_by_role("dialog", name="بررسی نهایی ارسال گروهی")
|
|
|
|
def _activate(self, control, destination, *, hidden=False):
|
|
control.click()
|
|
if hidden:
|
|
expect(destination).to_be_hidden()
|
|
else:
|
|
expect(destination).to_be_visible()
|
|
|
|
def open_composer(self):
|
|
self.goto(reverse("staff_tickets:dispatch_create"))
|
|
self.page.get_by_role("tab", name="ارسال جدید").wait_for(state="visible")
|
|
|
|
def open_history(self):
|
|
self.page.get_by_role("tab", name="سوابق ارسال").click()
|
|
|
|
def return_to_composer(self):
|
|
self.page.get_by_role("tab", name="ارسال جدید").click()
|
|
|
|
def compose(self, unit, group, category, subject, body):
|
|
self.page.get_by_label("واحد ارسالکننده").select_option(str(unit.pk))
|
|
self.page.get_by_label("گروه مخاطبان", exact=False).select_option(str(group.pk))
|
|
self.page.get_by_label("دستهبندی", exact=False).select_option(str(category.pk))
|
|
self.page.get_by_label("موضوع استعلام یا پیام", exact=False).fill(subject)
|
|
self.page.get_by_label("متن پیام", exact=False).fill(body)
|
|
|
|
def review(self):
|
|
self._activate(self.page.get_by_role("button", name="بررسی و ادامه"), self.review_dialog)
|
|
|
|
def cancel_review(self):
|
|
self._activate(self.review_dialog.get_by_role("button", name="بازگشت و ویرایش"), self.review_dialog, hidden=True)
|
|
|
|
def send(self):
|
|
self._activate(
|
|
self.review_dialog.get_by_role("button", name="تأیید و ارسال گروهی"),
|
|
self.page.get_by_role("heading", name="وضعیت پیامک، مشاهده و پاسخ"),
|
|
)
|
|
|
|
def open_report(self, dispatch):
|
|
self.goto(reverse("staff_tickets:dispatch_detail", args=[dispatch.public_id]))
|
|
|
|
def filter_recipients(self, label):
|
|
self.page.get_by_label("نمایش مخاطبان").select_option(label=label)
|
|
|
|
def search_recipient(self, text):
|
|
self.page.get_by_role("searchbox", name="جستجوی مخاطب").fill(text)
|
|
|
|
def reset_recipients(self):
|
|
self.page.get_by_role("button", name="پاک کردن فیلتر", exact=True).click()
|
|
|
|
def visible_recipients(self):
|
|
return self.page.locator("[data-recipient-row]:visible")
|
|
|
|
def open_conversation(self):
|
|
self.page.locator(".dispatch-reply-link").first.click()
|
|
|
|
def review_opening(self):
|
|
self._activate(self.page.get_by_role("link", name="بازگشایی همه پاسخها", exact=True),
|
|
self.page.get_by_role("heading", name="تأیید بازگشایی همه پاسخها"))
|
|
|
|
def confirm_opening(self):
|
|
self._activate(self.page.get_by_role("button", name="تأیید و بازگشایی همه پاسخها"),
|
|
self.page.get_by_role("heading", name="پاسخها بازگشایی شدهاند"))
|
|
|
|
def choose_response_mode(self, label):
|
|
self.page.get_by_role("radio", name=label, exact=True).check()
|
|
|
|
@property
|
|
def opening_sms(self):
|
|
return self.page.get_by_role("checkbox", name="اطلاعرسانی بازگشایی با پیامک", exact=True)
|
|
|
|
def expect_fits_viewport(self):
|
|
assert self.page.evaluate("document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1")
|
|
|
|
def save_screenshot(self, name):
|
|
directory = Path("test-results/dispatch-design")
|
|
directory.mkdir(parents=True, exist_ok=True)
|
|
self.page.screenshot(path=str(directory / name), full_page=True)
|