package handlers import ( "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.WaitUntilStateNetworkidle, Timeout: playwright.Float(10000), }) assert.NoError(err, "Failed to load page") // Wait for question to appear err = page.Locator(".question-text").WaitFor(playwright.LocatorWaitForOptions{ State: playwright.WaitForSelectorStateVisible, Timeout: playwright.Float(5000), }) assert.NoError(err, "Question text did not appear") questionText, err := page.Locator(".question-text").TextContent() assert.NoError(err, "Failed to get question text") assert.Contains(questionText, "Zweifel", "Question text mismatch") // Verify all options are present and clickable options := []string{"Haben", "Hast", "Hat", "Habt"} for _, opt := range options { locator := page.Locator("button:has-text('" + opt + "')") err := locator.WaitFor(playwright.LocatorWaitForOptions{ State: playwright.WaitForSelectorStateVisible, Timeout: playwright.Float(3000), }) assert.NoError(err, "Option button '%s' not found", opt) visible, err := locator.IsVisible() assert.NoError(err, "Failed to check visibility for '%s'", opt) assert.True(visible, "Option button '%s' not visible", opt) } // Test 2: Click correct answer err = page.Locator("button:has-text('Hast')").Click() assert.NoError(err) feedback, err := page.Locator("#feedback").TextContent() assert.NoError(err) assert.Contains(feedback, "Correct") // Test 3: Click wrong answer err = page.Locator("button:has-text('Haben')").Click() assert.NoError(err) feedback, err = page.Locator("#feedback").TextContent() assert.NoError(err) assert.Contains(feedback, "Wrong") } type MockRepo struct{} func (m *MockRepo) DBGetDefaultsMap() (map[string]string, error) { return map[string]string{}, nil }