From 4b2d609a0efcc1d9b2f1a08f954d067ad1d9cd1e Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 14 May 2025 13:18:54 -0600 Subject: test: use playwright to test out an OIDC login --- test/integration/ci.go | 12 ++++++++++++ test/integration/container.go | 8 ++------ test/integration/container_test.go | 16 ++++++++++++++++ test/integration/ui.go | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 test/integration/ci.go create mode 100644 test/integration/ui.go (limited to 'test/integration') diff --git a/test/integration/ci.go b/test/integration/ci.go new file mode 100644 index 0000000..5d34685 --- /dev/null +++ b/test/integration/ci.go @@ -0,0 +1,12 @@ +package test + +import ( + "testing" + + "github.com/xlgmokha/x/pkg/env" +) + +func isGitlabCI(t *testing.T) bool { + t.Logf("CI? %v", env.Fetch("CI", "")) + return env.Fetch("CI", "") == "true" +} diff --git a/test/integration/container.go b/test/integration/container.go index 5ce8266..3929697 100644 --- a/test/integration/container.go +++ b/test/integration/container.go @@ -60,7 +60,8 @@ func containerOptions(t *testing.T, envVars map[string]string) []testcontainers. })) } else { issuer, port := normalizeIssuer(t, envVars["OIDC_ISSUER"]) - envVars["OIDC_ISSUER"] = issuer + // envVars["OIDC_ISSUER"] = issuer + t.Logf("issuer: %v, port: %v\n", issuer, port) options = append(options, testcontainers.WithExposedPorts("8080/tcp", "9901/tcp", "10000/tcp")) options = append(options, testcontainers.WithHostPortAccess(port)) @@ -68,8 +69,3 @@ func containerOptions(t *testing.T, envVars map[string]string) []testcontainers. return options } - -func isGitlabCI(t *testing.T) bool { - t.Logf("CI? %v", env.Fetch("CI", "")) - return env.Fetch("CI", "") == "true" -} diff --git a/test/integration/container_test.go b/test/integration/container_test.go index 2d68236..6d48beb 100644 --- a/test/integration/container_test.go +++ b/test/integration/container_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/oauth2-proxy/mockoidc" + playwright "github.com/playwright-community/playwright-go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" @@ -78,4 +79,19 @@ func TestContainer(t *testing.T) { assert.NotEmpty(t, "listener_0", body["configs"]) }) + + WithUI(t, func(browser playwright.Browser) { + page, err := browser.NewPage() + require.NoError(t, err) + + t.Run("initiates an OIDC login", func(t *testing.T) { + require.NoError(t, page.Context().ClearCookies()) + response, err := page.Goto(envoyEndpoint + "/") + require.NoError(t, err) + assert.True(t, response.Ok()) + + require.NoError(t, page.GetByText("Login").Click()) + assert.Equal(t, srv.AuthorizationEndpoint()+"?client_id="+srv.Config().ClientID, page.URL()) + }) + }) } diff --git a/test/integration/ui.go b/test/integration/ui.go new file mode 100644 index 0000000..1af0744 --- /dev/null +++ b/test/integration/ui.go @@ -0,0 +1,33 @@ +package test + +import ( + "testing" + + playwright "github.com/playwright-community/playwright-go" + "github.com/stretchr/testify/require" + "github.com/xlgmokha/x/pkg/env" + "github.com/xlgmokha/x/pkg/x" +) + +func WithUI(t *testing.T, callback x.Visitor[playwright.Browser]) { + t.Run("UI", func(t *testing.T) { + if isGitlabCI(t) { + t.Skip() + } + _ = playwright.Install() + + driver, err := playwright.Run() + require.NoError(t, err) + + browser, err := driver.Firefox.Launch(playwright.BrowserTypeLaunchOptions{ + Headless: playwright.Bool(env.Fetch("HEADLESS", "true") == "true"), + SlowMo: playwright.Float(1000), + }) + require.NoError(t, err) + + defer browser.Close() + defer driver.Stop() + + callback(browser) + }) +} -- cgit v1.2.3