package playwright_test import ( "context" "fmt" "testing" "time" "github.com/fmartingr/hako/e2e/e2eutil" "github.com/stretchr/testify/require" ) func TestArchive_AutomaticCreation(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_AutomaticCreation", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) helper.Screenshot("link-created") // Navigate to link details to see archive status err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) helper.Screenshot("link-details-archive") // Verify archive section exists helper.AssertVisible(".archive-status, .archive-history, [class*='archive']", "Archive information should be visible") t.Log("Archive automatic creation test completed successfully") } func TestArchive_ViewHistory(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_ViewHistory", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) // Navigate to link details err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) helper.Screenshot("archive-history") // Verify archive history is visible helper.AssertVisible(".archive-history, .archive-list, [class*='archive']", "Archive history should be visible") // Wait for archive to process (with timeout) t.Log("Waiting for archive to complete...") time.Sleep(10 * time.Second) helper.Screenshot("archive-after-wait") t.Log("Archive view history test completed successfully") } func TestArchive_StatusDisplay(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_StatusDisplay", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) // Navigate to link details err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) helper.Screenshot("archive-status") // Check for status indicators // Status could be: pending, processing, completed, failed statusVisible := helper.IsVisible(".status-pending") || helper.IsVisible(".status-processing") || helper.IsVisible(".status-completed") || helper.IsVisible(".status-failed") || helper.IsVisible("[class*='status']") t.Logf("Archive status indicator visible: %v", statusVisible) helper.Screenshot("archive-status-indicators") t.Log("Archive status display test completed successfully") } func TestArchive_Rearchive(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_Rearchive", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) // Navigate to link details err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) helper.Screenshot("before-rearchive") // Wait for initial archive to complete time.Sleep(10 * time.Second) // Look for re-archive button rearchiveVisible := helper.IsVisible("button:has-text('Re-archive')") || helper.IsVisible("button:has-text('Archive again')") || helper.IsVisible("[class*='rearchive']") if rearchiveVisible { // Click re-archive button err = helper.Click("button:has-text('Re-archive'), button:has-text('Archive again')") if err == nil { time.Sleep(2 * time.Second) helper.Screenshot("after-rearchive-trigger") t.Log("Re-archive button clicked successfully") } else { t.Logf("Re-archive button not clickable: %v", err) } } else { t.Log("Re-archive button not found (may not be visible yet)") } helper.Screenshot("rearchive-test-complete") t.Log("Archive re-archive test completed successfully") } func TestArchive_ViewFiles(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_ViewFiles", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) // Navigate to link details err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) // Wait for archive to complete t.Log("Waiting for archive to complete...") time.Sleep(15 * time.Second) helper.Screenshot("archive-completed") // Look for files list filesVisible := helper.IsVisible(".archive-files") || helper.IsVisible(".file-list") || helper.IsVisible("[class*='files']") t.Logf("Archive files visible: %v", filesVisible) helper.Screenshot("archive-files-view") t.Log("Archive view files test completed successfully") } func TestArchive_PreviewHTML(t *testing.T) { ctx := context.Background() // Start test web server testServer, testServerURL, err := e2eutil.StartTestWebServer(ctx, t) require.NoError(t, err, "Failed to start test web server") defer testServer.Terminate(ctx) // 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, "TestArchive_PreviewHTML", baseURL, page) // Login err = helper.LoginAsAdmin() require.NoError(t, err, "Failed to login") // Navigate to home err = helper.Navigate("/home") require.NoError(t, err, "Failed to navigate to home") // Create a link testURL := fmt.Sprintf("%s/index.html", testServerURL) err = helper.CreateLink(testURL) require.NoError(t, err, "Failed to create link") time.Sleep(2 * time.Second) // Navigate to link details err = helper.Click("a[href*='/links/']") require.NoError(t, err, "Failed to navigate to link details") time.Sleep(1 * time.Second) // Wait for archive to complete t.Log("Waiting for archive to complete...") time.Sleep(15 * time.Second) helper.Screenshot("ready-for-preview") // Look for preview button/link for HTML file previewVisible := helper.IsVisible("a:has-text('Preview')") || helper.IsVisible("button:has-text('Preview')") || helper.IsVisible("[class*='preview']") if previewVisible { t.Log("Preview button found") helper.Screenshot("preview-button-found") } else { t.Log("Preview button not found yet") } t.Log("Archive preview HTML test completed successfully") }