@@ -4,15 +4,19 @@ import (
44 "context"
55 "errors"
66 "regexp"
7+ "strings"
78 "testing"
89
10+ toolchainv1alpha1 "github.com/codeready-toolchain/api/api/v1alpha1"
911 "github.com/codeready-toolchain/toolchain-e2e/testsupport"
10- "github.com/codeready-toolchain/toolchain-e2e/testsupport/cleanup"
1112 sandboxui "github.com/codeready-toolchain/toolchain-e2e/testsupport/devsandbox-dashboard"
1213 "github.com/playwright-community/playwright-go"
1314 "github.com/spf13/viper"
1415 "github.com/stretchr/testify/assert"
1516 "github.com/stretchr/testify/require"
17+ "k8s.io/apimachinery/pkg/runtime"
18+ "k8s.io/client-go/tools/clientcmd"
19+ "sigs.k8s.io/controller-runtime/pkg/client"
1620)
1721
1822// TestFreshSignup tests the complete fresh signup flow:
@@ -27,7 +31,7 @@ func TestFreshSignup(t *testing.T) {
2731 // Ensure the user signup is not present in the system
2832 env := viper .GetString ("ENVIRONMENT" )
2933 username := viper .GetString ("SSO_USERNAME" )
30- ensureNoUserSignup (t , env , username )
34+ ensureNoUserSignup (t , page , env , username )
3135
3236 // Step 2: Verify homepage layout on first access
3337 verifyHomepage (t , page )
@@ -39,8 +43,9 @@ func TestFreshSignup(t *testing.T) {
3943 verifyDevSandboxAccess (t , page , env , testName )
4044}
4145
42- func ensureNoUserSignup (t * testing.T , env , username string ) {
43- if env == sandboxui .TestEnv {
46+ func ensureNoUserSignup (t * testing.T , page playwright.Page , env , username string ) {
47+ switch env {
48+ case sandboxui .TestEnv :
4449 awaitilities := testsupport .WaitForDeployments (t )
4550 hostAwait := awaitilities .Host ()
4651 userSignup , err := sandboxui .WaitForUserSignup (t , hostAwait , username )
@@ -51,6 +56,18 @@ func ensureNoUserSignup(t *testing.T, env, username string) {
5156 // delete user signup
5257 err := sandboxui .DeleteUserSignup (t , hostAwait , userSignup )
5358 require .NoError (t , err )
59+ reloadPage (t , page )
60+ }
61+ case sandboxui .ProdEnv :
62+ client , err := newClient (t , viper .GetString ("KUBECONFIG" ))
63+ require .NoError (t , err )
64+
65+ userSignup := sandboxui .GetUserSignupWithClient (t , client , username )
66+
67+ if userSignup != nil {
68+ // delete user signup
69+ sandboxui .DeleteUserSignupWithClient (t , client , userSignup )
70+ reloadPage (t , page )
5471 }
5572 }
5673}
@@ -126,17 +143,15 @@ func performSignup(t *testing.T, page playwright.Page, env, username string) {
126143 err = tryItButton .Click ()
127144 require .NoError (t , err )
128145
129- if env == sandboxui .TestEnv {
130- // add signup to cleanup
131- awaitilities := testsupport .WaitForDeployments (t )
132- hostAwait := awaitilities .Host ()
133- userSignup , err := sandboxui .WaitForUserSignup (t , hostAwait , username )
134- require .NoError (t , err )
135- cleanup .AddCleanTasks (t , hostAwait .Client , userSignup )
136- }
146+ t .Cleanup (func () {
147+ ensureNoUserSignup (t , nil , env , username )
148+ })
137149
138150 // wait for loading icon to disappear
139- err = loadingIcon .WaitFor (playwright.LocatorWaitForOptions {State : playwright .WaitForSelectorStateHidden })
151+ err = loadingIcon .WaitFor (playwright.LocatorWaitForOptions {
152+ State : playwright .WaitForSelectorStateHidden ,
153+ Timeout : playwright .Float (60000 ), // 1 minute timeout
154+ })
140155 require .NoError (t , err )
141156
142157 // wait for network to be idle (ensures all updates are complete)
@@ -188,23 +203,60 @@ func verifyDevSandboxAccess(t *testing.T, page playwright.Page, env, testName st
188203 devSandboxPage , err := sandboxui .ClickAndWaitForPopup (t , page , tryItBtn , testName )
189204 require .NoError (t , err )
190205
191- img := devSandboxPage .GetByRole ("img" , playwright.PageGetByRoleOptions {
192- Name : imgName ,
193- })
194- err = img .WaitFor (playwright.LocatorWaitForOptions {
195- Timeout : playwright .Float (30000 ),
196- })
197- require .NoError (t , err )
206+ if env == sandboxui .ProdEnv {
207+ // Wait for auth redirect to complete
208+ if strings .Contains (devSandboxPage .URL (), "/oauth/authorize" ) {
209+ err := devSandboxPage .WaitForURL ("**/k8s/cluster/projects/**" , playwright.PageWaitForURLOptions {
210+ Timeout : playwright .Float (180000 ), // 3 minutes
211+ })
212+ require .NoError (t , err )
213+ }
198214
199- h := devSandboxPage .GetByRole ("heading" , playwright.PageGetByRoleOptions {})
200- hText , err := h .TextContent ()
201- require .NoError (t , err )
202- require .Contains (t , hText , logMessage )
215+ // Find welcome text and wait for it to be visible
216+ welcomeText := devSandboxPage .GetByText ("Welcome to the new OpenShift experience!" )
217+ err = welcomeText .WaitFor (playwright.LocatorWaitForOptions {
218+ State : playwright .WaitForSelectorStateVisible ,
219+ Timeout : playwright .Float (180000 ), // 3 minutes
220+ })
221+ require .NoError (t , err )
222+ } else {
223+ img := devSandboxPage .GetByRole ("img" , playwright.PageGetByRoleOptions {
224+ Name : imgName ,
225+ })
226+ err = img .WaitFor (playwright.LocatorWaitForOptions {
227+ Timeout : playwright .Float (30000 ),
228+ })
229+ require .NoError (t , err )
203230
204- list := devSandboxPage .GetByRole ("list" , playwright.PageGetByRoleOptions {})
205- listText , err := list .TextContent ()
206- require .NoError (t , err )
207- require .Contains (t , listText , "DevSandbox" )
231+ h := devSandboxPage .GetByRole ("heading" , playwright.PageGetByRoleOptions {})
232+ hText , err := h .TextContent ()
233+ require .NoError (t , err )
234+ require .Contains (t , hText , logMessage )
235+
236+ list := devSandboxPage .GetByRole ("list" , playwright.PageGetByRoleOptions {})
237+ listText , err := list .TextContent ()
238+ require .NoError (t , err )
239+ require .Contains (t , listText , "DevSandbox" )
240+ }
208241
209242 require .NoError (t , devSandboxPage .Close ())
210243}
244+
245+ func newClient (t * testing.T , kubeconfigPath string ) (client.Client , error ) {
246+ require .NotEmpty (t , kubeconfigPath )
247+
248+ cfg , err := clientcmd .BuildConfigFromFlags ("" , kubeconfigPath )
249+ require .NoError (t , err )
250+
251+ s := runtime .NewScheme ()
252+ require .NoError (t , toolchainv1alpha1 .AddToScheme (s ))
253+
254+ return client .New (cfg , client.Options {Scheme : s })
255+ }
256+
257+ func reloadPage (t * testing.T , page playwright.Page ) {
258+ if page != nil {
259+ _ , err := page .Reload ()
260+ require .NoError (t , err )
261+ }
262+ }
0 commit comments