Spaces:
Running
Running
| import { test, expect } from '@playwright/test'; | |
| // Zakładamy, że aplikacja będzie używać tzw. Testing Tokens z Clerk | |
| // albo, że frontend zostanie uruchomiony w trybie omijającym auth na czas testów (Mock). | |
| const FRONTEND_URL = process.env.E2E_BASE_URL || 'http://localhost:5173'; | |
| test.describe('Kreator Nowego Projektu (Wizard UI)', () => { | |
| // Omijamy prawdziwe logowanie dla testów UI, symulując ciasteczka lub mockując API | |
| // Tutaj zakładamy, że w środowisku CI ominiemy Clerk Auth dla ścieżek testowych. | |
| test.beforeEach(async ({ page }) => { | |
| // Przechodzimy bezpośrednio do kreatora projektu | |
| // Jeśli testy będa blokowane przez Clerk, należy zaimplementować clerk.signIn() za pomocą Testing Tokenu | |
| await page.goto(`${FRONTEND_URL}/dashboard/new`); | |
| await page.waitForTimeout(1000); | |
| }); | |
| test('Krok 1: Walidacja i wpisanie NIPu firmy', async ({ page }) => { | |
| // Szukamy pola na NIP | |
| const nipInput = page.locator('input[name="nip"], input[placeholder*="NIP"]'); | |
| // Upewniamy się, że pole jest widoczne | |
| if (await nipInput.isVisible()) { | |
| await nipInput.fill('1234567890'); | |
| const nextButton = page.locator('button:has-text("Dalej"), button:has-text("Pobierz dane")'); | |
| await expect(nextButton).toBeEnabled(); | |
| await nextButton.click(); | |
| // Oczekujemy że pojawi się informacja o pobranej firmie z GUS lub przejście do kolejnego kroku | |
| await expect(page.locator('text=/GUS|Krok 2/i')).toBeVisible({ timeout: 10000 }); | |
| } else { | |
| console.log('UWAGA: Auth Clerk zablokował dostęp. Skonfiguruj E2E_CLERK_TOKEN w GitHub Actions.'); | |
| } | |
| }); | |
| test('Krok 2: Opis projektu powinen wymagać minimum 50 znaków', async ({ page }) => { | |
| const descInput = page.locator('textarea[name="description"], textarea[placeholder*="Opisz swój projekt"]'); | |
| if (await descInput.isVisible()) { | |
| await descInput.fill('Za krótki opis'); | |
| const nextButton = page.locator('button:has-text("Dalej"), button:has-text("Analizuj")'); | |
| await nextButton.click(); | |
| // Oczekujemy błędu walidacji formularza | |
| await expect(page.locator('text=/zbyt krótki|wymagane minimum/i')).toBeVisible(); | |
| } | |
| }); | |
| test('Mokowanie odpowiedzi AI Matchera (Zapobieganie timeoutom E2E)', async ({ page }) => { | |
| // Interceptujemy żądania do backendu (AI Matcher), żeby test był szybki i deterministyczny | |
| await page.route('**/api/projects/match**', async route => { | |
| const json = { | |
| programs: [ | |
| { name: "MOCK: Ścieżka SMART", description: "Dotacja na B+R", match_score: 95 } | |
| ] | |
| }; | |
| await route.fulfill({ json }); | |
| }); | |
| // Tu kontynuujemy test... | |
| }); | |
| }); | |