@@ -3,6 +3,11 @@ import type {Locator, Page} from '@playwright/test';
3
3
import { PageModel } from '../../models/PageModel' ;
4
4
import { tenantPage } from '../../utils/constants' ;
5
5
6
+ import { QueryEditor , QueryTabs } from './queryEditor/models/QueryEditor' ;
7
+ import { SaveQueryDialog } from './queryEditor/models/SaveQueryDialog' ;
8
+ import { UnsavedChangesModal } from './queryEditor/models/UnsavedChangesModal' ;
9
+ import { SavedQueriesTable } from './savedQueries/models/SavedQueriesTable' ;
10
+
6
11
export const VISIBILITY_TIMEOUT = 10 * 1000 ;
7
12
8
13
export enum NavigationTabs {
@@ -11,6 +16,11 @@ export enum NavigationTabs {
11
16
}
12
17
13
18
export class TenantPage extends PageModel {
19
+ queryEditor : QueryEditor ;
20
+ saveQueryDialog : SaveQueryDialog ;
21
+ savedQueriesTable : SavedQueriesTable ;
22
+ unsavedChangesModal : UnsavedChangesModal ;
23
+
14
24
private navigation : Locator ;
15
25
private radioGroup : Locator ;
16
26
private diagnosticsContainer : Locator ;
@@ -25,6 +35,11 @@ export class TenantPage extends PageModel {
25
35
this . diagnosticsContainer = page . locator ( '.kv-tenant-diagnostics' ) ;
26
36
this . emptyState = page . locator ( '.empty-state' ) ;
27
37
this . emptyStateTitle = this . emptyState . locator ( '.empty-state__title' ) ;
38
+
39
+ this . queryEditor = new QueryEditor ( page ) ;
40
+ this . saveQueryDialog = new SaveQueryDialog ( page ) ;
41
+ this . savedQueriesTable = new SavedQueriesTable ( page ) ;
42
+ this . unsavedChangesModal = new UnsavedChangesModal ( page ) ;
28
43
}
29
44
30
45
async isDiagnosticsVisible ( ) {
@@ -46,4 +61,48 @@ export class TenantPage extends PageModel {
46
61
await tabInput . waitFor ( { state : 'visible' , timeout : VISIBILITY_TIMEOUT } ) ;
47
62
await tabInput . click ( ) ;
48
63
}
64
+
65
+ async saveQuery ( queryText : string , name ?: string ) : Promise < string > {
66
+ const queryName = name || `Query ${ Date . now ( ) } ` ;
67
+ await this . queryEditor . setQuery ( queryText ) ;
68
+ await this . queryEditor . clickSaveButton ( ) ;
69
+ await this . saveQueryDialog . setQueryName ( queryName ) ;
70
+ await this . saveQueryDialog . clickSave ( ) ;
71
+ return queryName ;
72
+ }
73
+
74
+ async editAsNewQuery ( queryText : string , name ?: string ) : Promise < string > {
75
+ const queryName = name || `Query ${ Date . now ( ) } ` ;
76
+ await this . queryEditor . setQuery ( queryText ) ;
77
+ await this . queryEditor . clickEditButton ( ) ;
78
+ await this . queryEditor . clickSaveAsNewEditButton ( ) ;
79
+ await this . saveQueryDialog . setQueryName ( queryName ) ;
80
+ await this . saveQueryDialog . clickSave ( ) ;
81
+ return queryName ;
82
+ }
83
+
84
+ async openSavedQuery ( queryName : string ) : Promise < void > {
85
+ // Wait before switching to saved query tabs
86
+ // https://github.com/microsoft/monaco-editor/issues/4702
87
+ await this . page . waitForTimeout ( 500 ) ;
88
+ await this . queryEditor . queryTabs . selectTab ( QueryTabs . Saved ) ;
89
+ await this . savedQueriesTable . isVisible ( ) ;
90
+ await this . savedQueriesTable . selectQuery ( queryName ) ;
91
+ }
92
+
93
+ async isUnsavedChangesModalVisible ( ) : Promise < boolean > {
94
+ try {
95
+ return await this . unsavedChangesModal . isVisible ( ) ;
96
+ } catch {
97
+ return false ;
98
+ }
99
+ }
100
+
101
+ async isUnsavedChangesModalHidden ( ) : Promise < boolean > {
102
+ try {
103
+ return await this . unsavedChangesModal . isHidden ( ) ;
104
+ } catch {
105
+ return false ;
106
+ }
107
+ }
49
108
}
0 commit comments