hako/e2e/playwright/admin_extractors_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

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