from django.urls import reverse from playwright.sync_api import expect from .base import BasePage class CustomerTicketsPage(BasePage): def assert_dock(self, active): dock = self.page.get_by_role('navigation', name='دسترسی سریع مشتری') expect(dock.get_by_role('link')).to_have_count(3) for name in ('خدمات', 'درخواست‌ها', 'پروفایل'): expect(dock.get_by_role('link', name=name, exact=True)).to_be_visible() expect(dock.locator('[aria-current]')).to_have_text(active) for link in dock.get_by_role('link').all(): box = link.bounding_box() assert box['width'] >= 44 and box['height'] >= 44 def follow_dock(self, name, destination): self.page.get_by_role('navigation', name='دسترسی سریع مشتری').get_by_role( 'link', name=name, exact=True ).click() expect(self.page).to_have_url(self.url(reverse(destination))) def assert_history(self, subject=None): expect(self.page.get_by_role('heading', name='درخواست‌های من', exact=True)).to_be_visible() if subject: card = self.page.locator('.tickets-list-card').filter(has_text=subject) expect(card.get_by_role('heading', name=subject, exact=True)).to_be_visible() expect(card).to_contain_text('مشاهده و پیگیری') else: expect(self.page.get_by_role('heading', name='هنوز درخواستی ثبت نشده')).to_be_visible() expect(self.page.get_by_role('link', name='ثبت اولین درخواست')).to_be_visible() assert self.page.evaluate('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1') def start_request(self): self.page.get_by_role('link', name='ثبت درخواست جدید', exact=True).click() expect(self.page).to_have_url(self.url(reverse('tickets:new'))) expect(self.page.locator('.ticket-wizard-page')).to_be_visible()