system-prompts-and-models-o.../salesflow-saas/frontend/e2e/subscriber-journey.spec.ts
Cursor Agent 8c3d91c070
fix(dealix): resolve Python deps, SQLAlchemy metadata, JWT, and frontend CI
- Align httpx, litellm, langchain, openai, mem0ai, crewai, numpy, requests, pydantic
- Rename SequenceEvent ORM attribute to event_metadata (DB column stays metadata)
- Use PyJWT instead of python-jose in security and auth service
- Mem0: MemoryConfig + graceful fallback when init fails (CI without keys)
- Frontend: I18nProvider in root layout, fix dashboard LeadScoreCard props, Section id,
  kpi-card useRef, en.json nameAr parity, e2e assertion for premium landing
- README: troubleshooting for connection refused and local E2E Playwright install

Co-authored-by: VoXc2 <VoXc2@users.noreply.github.com>
2026-04-12 10:32:05 +00:00

57 lines
2.3 KiB
TypeScript

import { test, expect } from "@playwright/test";
/**
* مسار زائر → صفحات الثقة → تسجيل/دخول — كما يراه منشأة تريد الاشتراك الآن.
* لا يعتمد على API حقيقي للخلفية (فقط واجهة Next).
*/
test.describe("Subscriber journey (public shell)", () => {
test.beforeEach(async ({ page, context }) => {
await context.clearCookies();
await page.addInitScript(() => localStorage.clear());
});
test("home shows Dealix value and navigation affordances", async ({ page }) => {
await page.goto("/");
await expect(page.getByText("Dealix", { exact: false }).first()).toBeVisible();
await expect(page.getByText(/هل تواجه هذه التحديات/)).toBeVisible();
});
test("landing page loads CTA toward app", async ({ page }) => {
await page.goto("/landing");
await expect(page.getByRole("heading", { level: 1 })).toBeVisible();
});
test("marketers hub lists resources and strategy link", async ({ page }) => {
await page.goto("/marketers");
await expect(page.getByRole("heading", { name: /مسوّق|Dealix|بوابة/ })).toBeVisible();
await expect(page.getByRole("link", { name: /استراتيجية|الخطة|الاستراتيجية/ })).toBeVisible();
});
test("strategy page loads", async ({ page }) => {
await page.goto("/strategy");
await expect(page.locator("main, article, body").first()).toBeVisible();
});
test("login preserves next param in URL for post-auth redirect intent", async ({ page }) => {
await page.goto("/login?next=%2Fdashboard");
await expect(page).toHaveURL(/\/login/);
await expect(page.getByRole("heading", { name: /تسجيل الدخول/ })).toBeVisible();
});
test("register page is reachable from marketing flow", async ({ page }) => {
await page.goto("/register");
await expect(page.getByRole("heading", { name: /إنشاء حساب/ })).toBeVisible();
});
test("unauthenticated dashboard still guards to login", async ({ page }) => {
await page.goto("/dashboard");
await page.waitForTimeout(1500);
const url = page.url();
if (/\/login/.test(url)) {
await expect(page).toHaveURL(/\/login/);
return;
}
await expect(page.getByText(/لوحة القيادة والمراقبة/)).toHaveCount(0);
});
});