16
16
* SPDX-License-Identifier: Apache-2.0
17
17
***********************************************************************/
18
18
19
- import type { Locator , Page } from '@playwright/test' ;
19
+ import type { Locator } from '@playwright/test' ;
20
20
import type { NavigationBar , ExtensionsPage } from '@podman-desktop/tests-playwright' ;
21
21
import {
22
22
expect as playExpect ,
@@ -26,24 +26,26 @@ import {
26
26
waitForPodmanMachineStartup ,
27
27
isLinux ,
28
28
} from '@podman-desktop/tests-playwright' ;
29
- import { AILabPage } from './model/ai-lab-page' ;
29
+ import type { AILabDashboardPage } from './model/ai-lab-dashboard -page' ;
30
30
import type { AILabRecipesCatalogPage } from './model/ai-lab-recipes-catalog-page' ;
31
- import { AILabExtensionDetailsPage } from './model/podman-extension-ai-lab-details-page' ;
32
31
import type { AILabCatalogPage } from './model/ai-lab-catalog-page' ;
33
- import { handleWebview } from './utils/webviewHandler' ;
34
32
import type { AILabServiceDetailsPage } from './model/ai-lab-service-details-page' ;
35
33
import type { AILabPlaygroundsPage } from './model/ai-lab-playgrounds-page' ;
36
34
import type { AILabPlaygroundDetailsPage } from './model/ai-lab-playground-details-page' ;
35
+ import {
36
+ getExtensionCard ,
37
+ getExtensionVersion ,
38
+ openAILabExtensionDetails ,
39
+ reopenAILabDashboard ,
40
+ waitForExtensionToInitialize ,
41
+ } from './utils/aiLabHandler' ;
37
42
38
43
const AI_LAB_EXTENSION_OCI_IMAGE =
39
44
process . env . EXTENSION_OCI_IMAGE ?? 'ghcr.io/containers/podman-desktop-extension-ai-lab:nightly' ;
40
45
const AI_LAB_EXTENSION_PREINSTALLED : boolean = process . env . EXTENSION_PREINSTALLED === 'true' ;
41
- const AI_LAB_CATALOG_EXTENSION_LABEL : string = 'redhat.ai-lab' ;
42
- const AI_LAB_CATALOG_EXTENSION_NAME : string = 'Podman AI Lab extension' ;
43
46
const AI_LAB_CATALOG_STATUS_ACTIVE : string = 'ACTIVE' ;
44
47
45
- let webview : Page ;
46
- let aiLabPage : AILabPage ;
48
+ let aiLabPage : AILabDashboardPage ;
47
49
const runnerOptions = {
48
50
customFolder : 'ai-lab-tests-pd' ,
49
51
aiLabModelUploadDisabled : isWindows ? true : false ,
@@ -86,36 +88,20 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
86
88
} ) ;
87
89
88
90
test ( 'Extension (card) is installed, present and active' , async ( { navigationBar } ) => {
89
- const extensions = await navigationBar . openExtensions ( ) ;
90
- await playExpect
91
- . poll ( async ( ) => await extensions . extensionIsInstalled ( AI_LAB_CATALOG_EXTENSION_LABEL ) , { timeout : 30000 } )
92
- . toBeTruthy ( ) ;
93
- const extensionCard = await extensions . getInstalledExtension (
94
- AI_LAB_CATALOG_EXTENSION_NAME ,
95
- AI_LAB_CATALOG_EXTENSION_LABEL ,
96
- ) ;
91
+ await waitForExtensionToInitialize ( navigationBar ) ;
92
+ const extensionCard = await getExtensionCard ( navigationBar ) ;
97
93
await playExpect ( extensionCard . status ) . toHaveText ( AI_LAB_CATALOG_STATUS_ACTIVE ) ;
98
94
} ) ;
99
95
100
- test ( `Extension's details show correct status, no error` , async ( { page, navigationBar } ) => {
101
- const extensions = await navigationBar . openExtensions ( ) ;
102
- const extensionCard = await extensions . getInstalledExtension ( 'ai-lab' , AI_LAB_CATALOG_EXTENSION_LABEL ) ;
103
- await extensionCard . openExtensionDetails ( AI_LAB_CATALOG_EXTENSION_NAME ) ;
104
- const details = new AILabExtensionDetailsPage ( page ) ;
105
- await playExpect ( details . heading ) . toBeVisible ( ) ;
106
- await playExpect ( details . status ) . toHaveText ( AI_LAB_CATALOG_STATUS_ACTIVE ) ;
107
- const errorTab = details . tabs . getByRole ( 'button' , { name : 'Error' } ) ;
108
- // we would like to propagate the error's stack trace into test failure message
109
- let stackTrace = '' ;
110
- if ( ( await errorTab . count ( ) ) > 0 ) {
111
- await details . activateTab ( 'Error' ) ;
112
- stackTrace = await details . errorStackTrace . innerText ( ) ;
113
- }
114
- await playExpect ( errorTab , `Error Tab was present with stackTrace: ${ stackTrace } ` ) . not . toBeVisible ( ) ;
96
+ test ( `Extension's details show correct status, no error` , async ( { navigationBar } ) => {
97
+ const aiLabExtensionDetailsPage = await openAILabExtensionDetails ( navigationBar ) ;
98
+ await aiLabExtensionDetailsPage . waitForLoad ( ) ;
99
+ await aiLabExtensionDetailsPage . checkIsActive ( AI_LAB_CATALOG_STATUS_ACTIVE ) ;
100
+ await aiLabExtensionDetailsPage . checkForErrors ( ) ;
115
101
} ) ;
116
- test ( `Verify AI Lab extension is installed` , async ( { runner , page , navigationBar } ) => {
117
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
118
- aiLabPage = new AILabPage ( page , webview ) ;
102
+
103
+ test ( `Verify AI Lab is accessible` , async ( { runner, page, navigationBar } ) => {
104
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
119
105
await aiLabPage . navigationBar . waitForLoad ( ) ;
120
106
} ) ;
121
107
} ) ;
@@ -127,11 +113,8 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
127
113
test . beforeAll (
128
114
'Get AI Lab extension version and open AI Lab navigation bar' ,
129
115
async ( { page, runner, navigationBar } ) => {
130
- const extensions = await navigationBar . openExtensions ( ) ;
131
- extensionVersion = await extensions . getInstalledExtensionVersion ( 'ai-lab' , AI_LAB_CATALOG_EXTENSION_LABEL ) ;
132
-
133
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
134
- aiLabPage = new AILabPage ( page , webview ) ;
116
+ extensionVersion = await getExtensionVersion ( navigationBar ) ;
117
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
135
118
await aiLabPage . navigationBar . waitForLoad ( ) ;
136
119
} ,
137
120
) ;
@@ -227,8 +210,7 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
227
210
let catalogPage : AILabCatalogPage ;
228
211
229
212
test . beforeEach ( `Open AI Lab Catalog` , async ( { runner, page, navigationBar } ) => {
230
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
231
- aiLabPage = new AILabPage ( page , webview ) ;
213
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
232
214
await aiLabPage . navigationBar . waitForLoad ( ) ;
233
215
234
216
catalogPage = await aiLabPage . navigationBar . openCatalog ( ) ;
@@ -270,8 +252,7 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
270
252
) ;
271
253
272
254
test . beforeAll ( `Open AI Lab Catalog` , async ( { runner, page, navigationBar } ) => {
273
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
274
- aiLabPage = new AILabPage ( page , webview ) ;
255
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
275
256
await aiLabPage . navigationBar . waitForLoad ( ) ;
276
257
277
258
catalogPage = await aiLabPage . navigationBar . openCatalog ( ) ;
@@ -362,8 +343,7 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
362
343
const systemPrompt = 'Always respond with: "Hello, I am Chat Bot"' ;
363
344
364
345
test . beforeAll ( `Open AI Lab Catalog` , async ( { runner, page, navigationBar } ) => {
365
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
366
- aiLabPage = new AILabPage ( page , webview ) ;
346
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
367
347
await aiLabPage . navigationBar . waitForLoad ( ) ;
368
348
369
349
catalogPage = await aiLabPage . navigationBar . openCatalog ( ) ;
@@ -447,8 +427,7 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
447
427
let recipesCatalogPage : AILabRecipesCatalogPage ;
448
428
449
429
test . beforeEach ( `Open Recipes Catalog` , async ( { runner, page, navigationBar } ) => {
450
- [ page , webview ] = await handleWebview ( runner , page , navigationBar ) ;
451
- aiLabPage = new AILabPage ( page , webview ) ;
430
+ aiLabPage = await reopenAILabDashboard ( runner , page , navigationBar ) ;
452
431
await aiLabPage . navigationBar . waitForLoad ( ) ;
453
432
454
433
recipesCatalogPage = await aiLabPage . navigationBar . openRecipesCatalog ( ) ;
0 commit comments