package handlers import ( "fmt" "testing" "github.com/playwright-community/playwright-go" "github.com/stretchr/testify/assert" ) func TestQuestionFlow(t *testing.T) { assert := assert.New(t) // Use running server serverURL := "http://localhost:9000" // Setup Playwright pw, err := playwright.Run() assert.NoError(err) defer pw.Stop() browser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{ Headless: playwright.Bool(true), // Change to false for debugging }) assert.NoError(err) defer browser.Close() page, err := browser.NewPage() assert.NoError(err) // Test 1: Load page and verify question _, err = page.Goto(serverURL, playwright.PageGotoOptions{ WaitUntil: playwright.WaitUntilStateDomcontentloaded, Timeout: playwright.Float(2000), }) assert.NoError(err, "Failed to load page") // Wait for main content to load err = page.Locator("body").WaitFor(playwright.LocatorWaitForOptions{ State: playwright.WaitForSelectorStateVisible, Timeout: playwright.Float(2000), }) assert.NoError(err, "Page content did not load") // Verify question text exists and contains expected content questionLocator := page.Locator("[data-testid='question']") visible, err := questionLocator.IsVisible() if err != nil || !visible { assert.FailNow("Question text not visible", err) } questionText, err := questionLocator.TextContent() if err != nil { assert.FailNow("Failed to get question text", err) } assert.Contains(questionText, "Zweifel", "Question text should contain 'Zweifel'") // Set reasonable timeout for light site page.SetDefaultTimeout(2000) // Verify options using test IDs for i := 1; i <= 4; i++ { testID := fmt.Sprintf("option%d", i) locator := page.Locator(fmt.Sprintf("[data-testid='%s']", testID)) visible, err := locator.IsVisible() if err != nil { assert.FailNowf("Option check failed", "Option %d: %v", i, err) } assert.True(visible, "Option %d not visible", i) } // Test correct answer (option2 is correct per test data) err = page.Locator("[data-testid='option2']").Click() assert.NoError(err) feedback := page.Locator("[data-testid='feedback']") text, err := feedback.TextContent() assert.NoError(err) assert.Contains(text, "Correct") // Test wrong answer err = page.Locator("[data-testid='option1']").Click() assert.NoError(err) text, err = feedback.TextContent() assert.NoError(err) assert.Contains(text, "Wrong") } type MockRepo struct{} func (m *MockRepo) DBGetDefaultsMap() (map[string]string, error) { return map[string]string{}, nil }