New_Micro_Learning/frontend/e2e/manager-phase3.spec.ts

50 خطوط
2.8 KiB
TypeScript

import { expect, test } from '@playwright/test'
import type { Page } from '@playwright/test'
async function signInAsManager(page: Page) {
await page.goto('http://127.0.0.1:5173/login')
await page.getByLabel(/ایمیل|Email/).fill('manager@microlearn.test')
await page.getByLabel(/رمز عبور|Password/).fill('password')
await page.getByRole('button', { name: /ورود|Sign in/ }).click()
await expect(page).toHaveURL(/\/manager\/overview$/)
}
test('manager assignment wizard exposes the complete five-step scoped flow', async ({ page }) => {
await signInAsManager(page)
await page.goto('http://127.0.0.1:5173/manager/assignments')
await expect(page.getByRole('heading', { level: 1, name: /تخصیص آموزش|Assign learning/ })).toBeVisible()
await page.getByRole('button', { name: /تخصیص جدید|New assignment/ }).click()
for (const heading of [/مخاطب|Audience/, /آموزش|Learning/, /مهلت|Deadline/, /اعلان|Notification/]) {
await expect(page.getByRole('heading', { level: 2, name: heading })).toBeVisible()
await page.getByRole('button', { name: /ادامه|Continue/ }).click()
}
await expect(page.getByRole('heading', { level: 2, name: /بازبینی|Review/ })).toBeVisible()
await expect(page.getByText(/تخصیص‌های فعال تکراری|Duplicate active assignments/)).toBeVisible()
await expect(page.getByRole('button', { name: /تأیید و تخصیص|Confirm and assign/ })).toBeEnabled()
})
test('manager assignments remain free of page-level overflow at target widths', async ({ page }) => {
await signInAsManager(page)
for (const viewport of [{ width: 375, height: 812 }, { width: 768, height: 1024 }, { width: 1440, height: 1000 }]) {
await page.setViewportSize(viewport)
await page.goto('http://127.0.0.1:5173/manager/assignments')
await expect(page.getByRole('heading', { level: 1, name: /تخصیص آموزش|Assign learning/ })).toBeVisible()
await page.getByRole('button', { name: /تخصیص جدید|New assignment/ }).click()
await expect(page.getByRole('heading', { level: 2, name: /مخاطب|Audience/ })).toBeVisible()
const layout = await page.evaluate(() => ({
clientWidth: document.documentElement.clientWidth,
scrollWidth: document.documentElement.scrollWidth,
offenders: [...document.querySelectorAll<HTMLElement>('body *')]
.filter(element => element.getBoundingClientRect().right > document.documentElement.clientWidth + 1 || element.getBoundingClientRect().left < -1)
.slice(0, 8)
.map(element => ({ className: element.className, tag: element.tagName, left: Math.round(element.getBoundingClientRect().left), right: Math.round(element.getBoundingClientRect().right) })),
}))
expect(layout, JSON.stringify({ viewport, layout })).toMatchObject({ scrollWidth: layout.clientWidth, offenders: [] })
}
})