canina/tests/e2e/storefront/order-tracking.spec.ts

64 lines
3.1 KiB
TypeScript

import { test, expect } from '../../fixtures';
test.describe('سناریوی پیگیری سفارشات (Order Tracking Flow & Edge Cases)', () => {
test('استعلام کد رهگیری نامعتبر -> راستی‌آزمایی پیام خطا -> ثبت و استعلام سفارش معتبر', async ({ page }) => {
// 1. ورود به صفحه /track
await page.goto('/track', { waitUntil: 'domcontentloaded' });
await expect(page).toHaveURL(/\/track/);
// 2. راستی‌آزمایی وجود المان‌های ورودی و دکمه استعلام
const trackingInput = page.locator('input[placeholder*="شماره سفارش"]');
await expect(trackingInput).toBeVisible({ timeout: 20000 });
const trackBtn = page.getByRole('button', { name: 'رهگیری آنی' });
await expect(trackBtn).toBeVisible();
// 3. تست منفی (Negative Test): استعلام کد رهگیری نامعتبر/ساختگی
await trackingInput.fill('INVALID-TRACK-99999');
await trackBtn.click();
// راستی‌آزمایی پیام صریح خطای عدم یافت سفارش (نه فقط پاس شدن بدون بررسی)
const notFoundMessage = page.locator('p').filter({ hasText: 'سفارشی یافت نشد. لطفاً شماره سفارش صحیح را وارد کنید.' });
await expect(notFoundMessage).toBeVisible({ timeout: 10000 });
// 4. تزریق یک سفارش به استیت لوکال zustand (کلید canina-cart)
await page.evaluate(() => {
const mockOrder = {
id: 'CN-88888',
trackingNumber: 'IR-POST-88888',
date: new Date().toISOString(),
items: [{ product: { id: 'p1', name: 'مکمل کلسیم و مفاصل سگ Canina' }, quantity: 2 }],
total: 1500000,
status: 'processing',
};
const cartState = {
state: {
items: [],
orders: [mockOrder],
isOpen: false,
isSubscribed: false,
charityDonation: 0,
coupon: null,
},
version: 0,
};
localStorage.setItem('canina-cart', JSON.stringify(cartState));
});
// بارگذاری مجدد صفحه برای لود سفارش تزریق شده در zustand
await page.reload({ waitUntil: 'domcontentloaded' });
// 5. استعلام شماره سفارش معتبر و بررسی تایم‌لاین و محتویات فاکتور
await trackingInput.fill('CN-88888');
await trackBtn.click();
// راستی‌آزمایی تایم‌لاین مراحل
await expect(page.locator('h4').filter({ hasText: 'ثبت سفارش' })).toBeVisible({ timeout: 10000 });
await expect(page.locator('h4').filter({ hasText: 'آماده‌سازی در انبار' })).toBeVisible();
// راستی‌آزمایی محتویات اقلام فاکتور و کد مرسوله
await expect(page.locator('p').filter({ hasText: 'IR-POST-88888' })).toBeVisible();
await expect(page.locator('span').filter({ hasText: 'مکمل کلسیم و مفاصل سگ Canina' })).toBeVisible();
});
});