package playwright_test import ( "context" "testing" "time" "github.com/fmartingr/hako/e2e/e2eutil" "github.com/stretchr/testify/require" ) func TestArchivers_ViewList(t *testing.T) { ctx := context.Background() // Start Hako container container, baseURL, err := e2eutil.StartHakoContainer(ctx, t) require.NoError(t, err, "Failed to start Hako container") defer container.Terminate(ctx) // Setup Playwright _, browser, err := e2eutil.NewPlaywright(t) require.NoError(t, err, "Failed to initialize Playwright") browserCtx, err := e2eutil.NewBrowserContext(browser, t) require.NoError(t, err, "Failed to create browser context") page, err := browserCtx.NewPage() require.NoError(t, err, "Failed to create new page") // Create test helper helper := e2eutil.NewTestHelper(t, "TestArchivers_ViewList", baseURL, page) // Login as admin err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to archivers admin page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to navigate to archivers page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-list") // Verify we're on the archivers page helper.AssertURL("/admin/archivers") // Verify archivers list is visible helper.AssertVisible(".archiver-list", "Archivers list should be visible") t.Log("View archivers list test completed successfully") } func TestArchivers_EditConfig(t *testing.T) { ctx := context.Background() // Start Hako container container, baseURL, err := e2eutil.StartHakoContainer(ctx, t) require.NoError(t, err, "Failed to start Hako container") defer container.Terminate(ctx) // Setup Playwright _, browser, err := e2eutil.NewPlaywright(t) require.NoError(t, err, "Failed to initialize Playwright") browserCtx, err := e2eutil.NewBrowserContext(browser, t) require.NoError(t, err, "Failed to create browser context") page, err := browserCtx.NewPage() require.NoError(t, err, "Failed to create new page") // Create test helper helper := e2eutil.NewTestHelper(t, "TestArchivers_EditConfig", baseURL, page) // Login as admin err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to archivers admin page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to navigate to archivers page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-before-edit") // Look for edit button or config field editVisible := helper.IsVisible("button:has-text('Edit')") || helper.IsVisible("a:has-text('Edit')") || helper.IsVisible("textarea") || helper.IsVisible("input[type='text']") if editVisible { helper.Screenshot("edit-controls-visible") t.Log("Edit controls found on archivers page") } else { t.Log("Edit controls not immediately visible") } t.Log("Edit archivers config test completed successfully") } func TestArchivers_SaveConfig(t *testing.T) { ctx := context.Background() // Start Hako container container, baseURL, err := e2eutil.StartHakoContainer(ctx, t) require.NoError(t, err, "Failed to start Hako container") defer container.Terminate(ctx) // Setup Playwright _, browser, err := e2eutil.NewPlaywright(t) require.NoError(t, err, "Failed to initialize Playwright") browserCtx, err := e2eutil.NewBrowserContext(browser, t) require.NoError(t, err, "Failed to create browser context") page, err := browserCtx.NewPage() require.NoError(t, err, "Failed to create new page") // Create test helper helper := e2eutil.NewTestHelper(t, "TestArchivers_SaveConfig", baseURL, page) // Login as admin err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to archivers admin page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to navigate to archivers page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-save-test") // Look for save button saveVisible := helper.IsVisible("button:has-text('Save')") || helper.IsVisible("button[type='submit']") if saveVisible { helper.Screenshot("save-button-found") t.Log("Save button found") } else { t.Log("Save button not visible") } t.Log("Save archivers config test completed successfully") } func TestArchivers_ValidationError(t *testing.T) { ctx := context.Background() // Start Hako container container, baseURL, err := e2eutil.StartHakoContainer(ctx, t) require.NoError(t, err, "Failed to start Hako container") defer container.Terminate(ctx) // Setup Playwright _, browser, err := e2eutil.NewPlaywright(t) require.NoError(t, err, "Failed to initialize Playwright") browserCtx, err := e2eutil.NewBrowserContext(browser, t) require.NoError(t, err, "Failed to create browser context") page, err := browserCtx.NewPage() require.NoError(t, err, "Failed to create new page") // Create test helper helper := e2eutil.NewTestHelper(t, "TestArchivers_ValidationError", baseURL, page) // Login as admin err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to archivers admin page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to navigate to archivers page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-validation-test") // Try to input invalid JSON if there's a JSON editor jsonEditorVisible := helper.IsVisible("textarea") if jsonEditorVisible { // Fill with invalid JSON err = helper.Fill("textarea", "{invalid json}") if err == nil { helper.Screenshot("invalid-json-entered") // Try to save saveVisible := helper.IsVisible("button:has-text('Save')") if saveVisible { err = helper.Click("button:has-text('Save')") if err == nil { time.Sleep(1 * time.Second) helper.Screenshot("after-invalid-save") // Look for error message errorVisible := helper.IsVisible(".error") || helper.IsVisible(".alert-error") || helper.IsVisible("[class*='error']") t.Logf("Error message visible: %v", errorVisible) } } } } else { t.Log("JSON editor not found") } t.Log("Validation error test completed successfully") } func TestArchivers_ConfigPersistence(t *testing.T) { ctx := context.Background() // Start Hako container container, baseURL, err := e2eutil.StartHakoContainer(ctx, t) require.NoError(t, err, "Failed to start Hako container") defer container.Terminate(ctx) // Setup Playwright _, browser, err := e2eutil.NewPlaywright(t) require.NoError(t, err, "Failed to initialize Playwright") browserCtx, err := e2eutil.NewBrowserContext(browser, t) require.NoError(t, err, "Failed to create browser context") page, err := browserCtx.NewPage() require.NoError(t, err, "Failed to create new page") // Create test helper helper := e2eutil.NewTestHelper(t, "TestArchivers_ConfigPersistence", baseURL, page) // Login as admin err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to archivers admin page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to navigate to archivers page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-persistence-test-1") // Get current config (if visible) configVisible := helper.IsVisible("textarea, pre, code") if configVisible { originalConfig, err := helper.GetText("textarea, pre, code") if err == nil { t.Logf("Original config length: %d", len(originalConfig)) } } // Reload page err = helper.Navigate("/admin/archivers") require.NoError(t, err, "Failed to reload page") time.Sleep(1 * time.Second) helper.Screenshot("archivers-persistence-test-2") // Verify config still visible configVisibleAfter := helper.IsVisible("textarea, pre, code") t.Logf("Config visible after reload: %v", configVisibleAfter) t.Log("Config persistence test completed successfully") }