15
15
*
16
16
* SPDX-License-Identifier: Apache-2.0
17
17
***********************************************************************/
18
- import { Page , Locator , expect as playExpect } from '@playwright/test' ;
19
- import { AuthenticationPage , NavigationBar , PodmanDesktopRunner , RunnerTestContext , SSOExtensionPage , SettingsExtensionsPage , WelcomePage } from '@podman-desktop/tests-playwright' ;
18
+ import { Page , expect as playExpect } from '@playwright/test' ;
20
19
import { afterAll , beforeAll , describe , test , beforeEach } from 'vitest' ;
20
+ import { AuthenticationPage , ExtensionCardPage , NavigationBar , PodmanDesktopRunner , RunnerTestContext , WelcomePage } from '@podman-desktop/tests-playwright' ;
21
+ import { SSOExtensionPage } from './model/pages/sso-extension-page' ;
21
22
22
23
let pdRunner : PodmanDesktopRunner ;
23
24
let page : Page ;
24
25
let navBar : NavigationBar ;
25
26
let extensionInstalled = false ;
27
+ let extensionCard : ExtensionCardPage ;
26
28
const imageName = 'ghcr.io/redhat-developer/podman-desktop-redhat-account-ext:latest' ;
27
- const extensionName = 'Red Hat Authentication ' ;
29
+ const extensionLabel = 'redhat.redhat-authentication ' ;
28
30
const extensionLabelName = 'redhat-authentication' ;
29
31
const authProviderName = 'Red Hat SSO' ;
30
- const extensionStatusLabel = 'Extension Status Label' ;
31
- const extensionDetailsLabel = 'Extension Details' ;
32
32
const activeExtensionStatus = 'ACTIVE' ;
33
33
const disabledExtensionStatus = 'DISABLED' ;
34
34
@@ -45,6 +45,7 @@ beforeAll(async () => {
45
45
const welcomePage = new WelcomePage ( page ) ;
46
46
await welcomePage . handleWelcomePage ( true ) ;
47
47
navBar = new NavigationBar ( page ) ;
48
+ extensionCard = new ExtensionCardPage ( page , extensionLabelName , extensionLabel ) ;
48
49
} ) ;
49
50
50
51
afterAll ( async ( ) => {
@@ -53,43 +54,41 @@ afterAll(async () => {
53
54
54
55
describe ( 'Red Hat Authentication extension verification' , async ( ) => {
55
56
56
- test ( 'Go to settings and check if extension is already installed' , async ( ) => {
57
- const settingsBar = await navBar . openSettings ( ) ;
58
- const extensions = await settingsBar . getCurrentExtensions ( ) ;
59
- if ( await extensionExists ( extensions , extensionName ) ) {
57
+ test ( 'Go to extensions and check if extension is already installed' , async ( ) => {
58
+ const extensions = await navBar . openExtensions ( ) ;
59
+ if ( await extensions . extensionIsInstalled ( extensionLabel ) ) {
60
60
extensionInstalled = true ;
61
61
}
62
62
} ) ;
63
63
64
64
test . runIf ( extensionInstalled ) (
65
65
'Uninstalled previous version of sso extension' ,
66
66
async ( ) => {
67
- await removeExtension ( extensionName ) ;
67
+ await removeExtension ( ) ;
68
68
} ,
69
69
60000 ,
70
70
) ;
71
71
72
72
test ( 'Extension can be installed using OCI image' , async ( ) => {
73
- const settingsBar = await navBar . openSettings ( ) ;
74
- const settingsExtensionPage = await settingsBar . openTabPage ( SettingsExtensionsPage ) ;
75
- await playExpect ( settingsExtensionPage . heading ) . toBeVisible ( ) ;
76
- await settingsExtensionPage . installExtensionFromOCIImage ( imageName ) ;
73
+ const extensions = await navBar . openExtensions ( ) ;
74
+ await extensions . installExtensionFromOCIImage ( imageName ) ;
75
+ await playExpect ( extensionCard . card ) . toBeVisible ( ) ;
77
76
} , 200000 ) ;
78
77
79
- test ( 'Extension record is added under installed extensions' , async ( ) => {
80
- const settingsBar = await navBar . openSettings ( ) ;
81
- const settingsExtensionPage = await settingsBar . openTabPage ( SettingsExtensionsPage ) ;
82
- const extension = settingsExtensionPage . getExtensionRowFromTable ( extensionLabelName ) ;
83
- await playExpect ( extension ) . toBeVisible ( ) ;
84
- await extension . scrollIntoViewIfNeeded ( ) ;
85
- const extensionDetails = extension . getByRole ( 'cell' , { name : extensionDetailsLabel } ) ;
86
- await playExpect ( extensionDetails . getByLabel ( extensionStatusLabel ) ) . toHaveText ( activeExtensionStatus ) ;
78
+ test ( 'Extension card is present and active' , async ( ) => {
79
+ const extensions = await navBar . openExtensions ( ) ;
80
+ playExpect ( await extensions . extensionIsInstalled ( extensionLabel ) ) . toBeTruthy ( ) ;
81
+ const extensionCard = await extensions . getInstalledExtension ( extensionLabelName , extensionLabel ) ;
82
+ await playExpect ( extensionCard . status ) . toHaveText ( activeExtensionStatus ) ;
87
83
} ) ;
88
84
89
- test ( 'Extension appears under Settings bar extensions' , async ( ) => {
90
- const settingsBar = await navBar . openSettings ( ) ;
91
- const extensions = await settingsBar . getCurrentExtensions ( ) ;
92
- await playExpect . poll ( async ( ) => await extensionExists ( extensions , extensionName ) , { timeout : 30000 } ) . toBeTruthy ( ) ;
85
+ test ( 'Extension Details show correct status' , async ( ) => {
86
+ const extensions = await navBar . openExtensions ( ) ;
87
+ const extensionCard = await extensions . getInstalledExtension ( extensionLabelName , extensionLabel ) ;
88
+ await extensionCard . openExtensionDetails ( ) ;
89
+ const details = new SSOExtensionPage ( page ) ;
90
+ await playExpect ( details . heading ) . toBeVisible ( ) ;
91
+ await playExpect ( details . status ) . toHaveText ( activeExtensionStatus ) ;
93
92
} ) ;
94
93
95
94
test ( 'SSO provider is available in Authentication Page' , async ( ) => {
@@ -104,58 +103,44 @@ describe('Red Hat Authentication extension verification', async () => {
104
103
105
104
describe ( 'Red Hat Authentication extension handling' , async ( ) => {
106
105
test ( 'Extension can be disabled' , async ( ) => {
106
+ const extensions = await navBar . openExtensions ( ) ;
107
+ playExpect ( await extensions . extensionIsInstalled ( extensionLabel ) ) . toBeTruthy ( ) ;
108
+ const extensionCard = await extensions . getInstalledExtension ( extensionLabelName , extensionLabel ) ;
109
+ await playExpect ( extensionCard . status ) . toHaveText ( activeExtensionStatus ) ;
110
+ await extensionCard . disableExtension ( ) ;
111
+ await playExpect ( extensionCard . status ) . toHaveText ( disabledExtensionStatus ) ;
112
+
107
113
const settingsBar = await navBar . openSettings ( ) ;
108
- const settingsExtensionPage = await settingsBar . openTabPage ( SettingsExtensionsPage ) ;
109
- const extension = settingsExtensionPage . getExtensionRowFromTable ( extensionLabelName ) ;
110
- await extension . scrollIntoViewIfNeeded ( ) ;
111
- await settingsExtensionPage . getExtensionStopButton ( extension ) . click ( ) ;
112
- const extensionDetails = extension . getByRole ( 'cell' , { name : extensionDetailsLabel } ) ;
113
- await playExpect ( extensionDetails . getByLabel ( extensionStatusLabel ) ) . toHaveText ( disabledExtensionStatus ) ;
114
-
115
- await navBar . openSettings ( ) ;
116
114
const authPage = await settingsBar . openTabPage ( AuthenticationPage ) ;
117
115
await playExpect ( authPage . heading ) . toHaveText ( 'Authentication' ) ;
118
116
const provider = authPage . getProvider ( authProviderName ) ;
119
117
await playExpect ( provider ) . toHaveCount ( 0 ) ;
120
118
} ) ;
121
119
122
120
test ( 'Extension can be re-enabled correctly' , async ( ) => {
121
+ const extensions = await navBar . openExtensions ( ) ;
122
+ playExpect ( await extensions . extensionIsInstalled ( extensionLabel ) ) . toBeTruthy ( ) ;
123
+ const extensionCard = await extensions . getInstalledExtension ( extensionLabelName , extensionLabel ) ;
124
+ await playExpect ( extensionCard . status ) . toHaveText ( disabledExtensionStatus ) ;
125
+ await extensionCard . enableExtension ( ) ;
126
+ await playExpect ( extensionCard . status ) . toHaveText ( activeExtensionStatus ) ;
127
+
123
128
const settingsBar = await navBar . openSettings ( ) ;
124
- const settingsExtensionPage = await settingsBar . openTabPage ( SettingsExtensionsPage ) ;
125
- const extension = settingsExtensionPage . getExtensionRowFromTable ( extensionLabelName ) ;
126
- await extension . scrollIntoViewIfNeeded ( ) ;
127
- await settingsExtensionPage . getExtensionStartButton ( extension ) . click ( ) ;
128
- const extensionDetails = extension . getByRole ( 'cell' , { name : extensionDetailsLabel } ) ;
129
- await playExpect ( extensionDetails . getByLabel ( extensionStatusLabel ) ) . toHaveText ( activeExtensionStatus ) ;
130
-
131
- await navBar . openSettings ( ) ;
132
129
const authPage = await settingsBar . openTabPage ( AuthenticationPage ) ;
133
130
await playExpect ( authPage . heading ) . toHaveText ( 'Authentication' ) ;
134
131
await playExpect ( authPage . getProvider ( authProviderName ) ) . toHaveCount ( 1 ) ;
135
132
} ) ;
136
133
} ) ;
137
134
138
135
test ( 'SSO extension can be removed' , async ( ) => {
139
- await removeExtension ( extensionName ) ;
136
+ await removeExtension ( ) ;
140
137
} ) ;
141
138
} ) ;
142
139
143
- async function extensionExists ( extensionList : Locator [ ] , extensionName : string ) : Promise < boolean > {
144
- for ( const extension of extensionList ) {
145
- if ( ( await extension . getByText ( extensionName , { exact : true } ) . count ( ) ) > 0 ) {
146
- return true ;
147
- }
148
- }
149
- return false ;
150
- }
151
-
152
- async function removeExtension ( extensionName : string ) : Promise < void > {
153
- const settingsBar = await navBar . openSettings ( ) ;
154
- let extensions = await settingsBar . getCurrentExtensions ( ) ;
155
- const authPage = await settingsBar . openTabPage ( SSOExtensionPage ) ;
156
- const settingsExtensionPage = await authPage . removeExtension ( ) ;
157
- await playExpect ( settingsExtensionPage . heading ) . toBeVisible ( ) ;
158
-
159
- extensions = await settingsBar . getCurrentExtensions ( ) ;
160
- await playExpect . poll ( async ( ) => await extensionExists ( extensions , extensionName ) , { timeout : 15000 } ) . toBeFalsy ( ) ;
140
+ async function removeExtension ( ) : Promise < void > {
141
+ const extensions = await navBar . openExtensions ( ) ;
142
+ const extensionCard = await extensions . getInstalledExtension ( extensionLabelName , extensionLabel ) ;
143
+ await extensionCard . disableExtension ( ) ;
144
+ await extensionCard . removeExtension ( ) ;
145
+ await playExpect . poll ( async ( ) => await extensions . extensionIsInstalled ( extensionLabel ) , { timeout : 15000 } ) . toBeFalsy ( ) ;
161
146
}
0 commit comments