hako/e2e/playwright/admin_archivers_test.go
Felipe M. d71915a3fb
test(e2e): expand test suite with comprehensive coverage
- Add e2e tests for admin pages (archivers, extractors, rules)
- Add tests for archives, links, navigation, and error handling
- Add search and pagination test coverage
- Implement test web server with Docker container
- Add seed data and helper utilities for tests
- Update webapp components for permission handling
- Generate HTML reports with embedded screenshots

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 12:49:40 +01:00

258 lines
7.6 KiB
Go

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")
}