- 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>
146 lines
4.4 KiB
Go
146 lines
4.4 KiB
Go
package playwright_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fmartingr/hako/e2e/e2eutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestExtractors_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, "TestExtractors_ViewList", baseURL, page)
|
|
|
|
// Login as admin
|
|
err = helper.LoginAsAdmin()
|
|
require.NoError(t, err, "Failed to login")
|
|
|
|
// Navigate to extractors admin page
|
|
err = helper.Navigate("/admin/extractors")
|
|
require.NoError(t, err, "Failed to navigate to extractors page")
|
|
time.Sleep(1 * time.Second)
|
|
helper.Screenshot("extractors-list")
|
|
|
|
// Verify we're on the extractors page
|
|
helper.AssertURL("/admin/extractors")
|
|
|
|
// Verify extractors list is visible
|
|
extractorsVisible := helper.IsVisible(".extractor-list")
|
|
|
|
require.True(t, extractorsVisible, "Extractors list should be visible")
|
|
|
|
t.Log("View extractors list test completed successfully")
|
|
}
|
|
|
|
func TestExtractors_StatusDisplay(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, "TestExtractors_StatusDisplay", baseURL, page)
|
|
|
|
// Login as admin
|
|
err = helper.LoginAsAdmin()
|
|
require.NoError(t, err, "Failed to login")
|
|
|
|
// Navigate to extractors admin page
|
|
err = helper.Navigate("/admin/extractors")
|
|
require.NoError(t, err, "Failed to navigate to extractors page")
|
|
time.Sleep(1 * time.Second)
|
|
helper.Screenshot("extractors-status")
|
|
|
|
// Check for status indicators (Available/Unavailable)
|
|
statusVisible := helper.IsVisible(".status-available") ||
|
|
helper.IsVisible(".status-unavailable") ||
|
|
helper.IsVisible("[class*='status']") ||
|
|
helper.IsVisible("td:has-text('Available')") ||
|
|
helper.IsVisible("td:has-text('Unavailable')")
|
|
|
|
t.Logf("Status indicators visible: %v", statusVisible)
|
|
|
|
if statusVisible {
|
|
helper.Screenshot("extractors-with-status")
|
|
}
|
|
|
|
t.Log("Extractors status display test completed successfully")
|
|
}
|
|
|
|
func TestExtractors_SupportedTypes(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, "TestExtractors_SupportedTypes", baseURL, page)
|
|
|
|
// Login as admin
|
|
err = helper.LoginAsAdmin()
|
|
require.NoError(t, err, "Failed to login")
|
|
|
|
// Navigate to extractors admin page
|
|
err = helper.Navigate("/admin/extractors")
|
|
require.NoError(t, err, "Failed to navigate to extractors page")
|
|
time.Sleep(1 * time.Second)
|
|
helper.Screenshot("extractors-supported-types")
|
|
|
|
// Check for MIME type information
|
|
mimeTypesVisible := helper.IsVisible("td:has-text('text/')") ||
|
|
helper.IsVisible("td:has-text('application/')") ||
|
|
helper.IsVisible("td:has-text('image/')") ||
|
|
helper.IsVisible(".mime-types") ||
|
|
helper.IsVisible("[class*='mime']")
|
|
|
|
t.Logf("MIME types information visible: %v", mimeTypesVisible)
|
|
|
|
if mimeTypesVisible {
|
|
helper.Screenshot("extractors-with-mime-types")
|
|
}
|
|
|
|
t.Log("Extractors supported types test completed successfully")
|
|
}
|