@@ -21,7 +21,7 @@ async function goToTrinoSettings(page: Page) {
2121
2222async function setupDataSourceWithAccessToken ( page : Page ) {
2323 await page . getByTestId ( 'data-testid Datasource HTTP settings url' ) . fill ( 'http://trino:8080' ) ;
24- await page . locator ( 'div' ) . filter ( { hasText : / ^ I m p e r s o n a t e l o g g e d i n u s e r A c c e s s t o k e n $ / } ) . getByLabel ( 'Toggle switch' ) . click ( ) ;
24+ await page . locator ( 'div' ) . filter ( { hasText : / ^ I m p e r s o n a t e l o g g e d i n u s e r $ / } ) . getByLabel ( 'Toggle switch' ) . click ( ) ;
2525 await page . locator ( 'div' ) . filter ( { hasText : / ^ A c c e s s t o k e n $ / } ) . locator ( 'input[type="password"]' ) . fill ( 'aaa' ) ;
2626 await page . getByTestId ( 'data-testid Data source settings page Save and Test button' ) . click ( ) ;
2727}
@@ -35,6 +35,14 @@ async function setupDataSourceWithClientCredentials(page: Page, clientId: string
3535 await page . getByTestId ( 'data-testid Data source settings page Save and Test button' ) . click ( ) ;
3636}
3737
38+ async function setupDataSourceWithClientTags ( page : Page , clientTags : string ) {
39+ await page . getByTestId ( 'data-testid Datasource HTTP settings url' ) . fill ( 'http://trino:8080' ) ;
40+ await page . locator ( 'div' ) . filter ( { hasText : / ^ I m p e r s o n a t e l o g g e d i n u s e r $ / } ) . getByLabel ( 'Toggle switch' ) . click ( ) ;
41+ await page . locator ( 'div' ) . filter ( { hasText : / ^ A c c e s s t o k e n $ / } ) . locator ( 'input[type="password"]' ) . fill ( 'aaa' ) ;
42+ await page . locator ( 'div' ) . filter ( { hasText : / ^ C l i e n t T a g s $ / } ) . locator ( 'input' ) . fill ( clientTags ) ;
43+ await page . getByTestId ( 'data-testid Data source settings page Save and Test button' ) . click ( ) ;
44+ }
45+
3846async function runQueryAndCheckResults ( page : Page ) {
3947 await page . getByLabel ( EXPORT_DATA ) . click ( ) ;
4048 await page . getByTestId ( 'data-testid TimePicker Open Button' ) . click ( ) ;
@@ -48,6 +56,37 @@ async function runQueryAndCheckResults(page: Page) {
4856 await expect ( page . getByTestId ( 'data-testid table body' ) ) . toContainText ( / .* 1 9 9 5 - 0 1 - 1 9 0 .: 0 0 : 0 0 5 7 0 3 8 5 7 F .* / ) ;
4957}
5058
59+ async function runQueryAndRetrunRequset (
60+ page : Page ,
61+ clientTag : string
62+ ) : Promise < import ( '@playwright/test' ) . Request > {
63+ await page . getByLabel ( EXPORT_DATA ) . click ( ) ;
64+ await page . getByTestId ( 'data-testid TimePicker Open Button' ) . click ( ) ;
65+ await page . getByTestId ( 'data-testid Time Range from field' ) . fill ( '1995-01-01' ) ;
66+ await page . getByTestId ( 'data-testid Time Range to field' ) . fill ( '1995-12-31' ) ;
67+ await page . getByTestId ( 'data-testid TimePicker submit button' ) . click ( ) ;
68+ await page . locator ( 'div' ) . filter ( { hasText : / ^ F o r m a t a s C h o o s e $ / } ) . locator ( 'svg' ) . click ( ) ;
69+ await page . getByRole ( 'option' , { name : 'Table' } ) . click ( ) ;
70+ await page . getByTestId ( 'data-testid Code editor container' ) . click ( ) ;
71+
72+ await page . locator ( 'div' ) . filter ( { hasText : / ^ C l i e n t T a g s $ / } ) . locator ( 'input' ) . fill ( clientTag ) ;
73+ // Commit the input change
74+ await page . keyboard . press ( 'Tab' ) ;
75+
76+ const [ response ] = await Promise . all ( [
77+ page . waitForResponse (
78+ res => res . url ( ) . includes ( '/api/ds/query' ) && res . request ( ) . method ( ) === 'POST' ,
79+ { timeout : 30000 }
80+ ) ,
81+ page . getByTestId ( 'data-testid RefreshPicker run button' ) . click ( )
82+ ] ) ;
83+
84+ await expect ( page . getByTestId ( 'data-testid table body' ) ) . toContainText ( / .* 1 9 9 5 - 0 1 - 1 9 .* / ) ;
85+
86+ return response . request ( ) ;
87+ }
88+
89+
5190test ( 'test with access token' , async ( { page } ) => {
5291 await login ( page ) ;
5392 await goToTrinoSettings ( page ) ;
@@ -76,3 +115,23 @@ test('test client credentials flow with configured access token', async ({ page
76115 await setupDataSourceWithClientCredentials ( page , GRAFANA_CLIENT ) ;
77116 await expect ( page . getByLabel ( EXPORT_DATA ) ) . toHaveCount ( 0 ) ;
78117} ) ;
118+
119+ test ( 'test with client tags' , async ( { page } ) => {
120+ await login ( page ) ;
121+ await goToTrinoSettings ( page ) ;
122+ await setupDataSourceWithClientTags ( page , 'tag1,tag2,tag3' ) ;
123+ await runQueryAndCheckResults ( page ) ;
124+ } ) ;
125+
126+ test ( 'query editor client tags override datasource-level tags' , async ( { page } ) => {
127+ await login ( page ) ;
128+ await goToTrinoSettings ( page ) ;
129+ await setupDataSourceWithClientTags ( page , 'datasourceTag' ) ;
130+
131+ const request = await runQueryAndRetrunRequset ( page , 'editorTag' ) ;
132+
133+ expect ( request ) . toBeDefined ( ) ;
134+ const body = JSON . parse ( request . postData ( ) || '{}' ) ;
135+ expect ( body . queries ?. [ 0 ] ?. clientTags ) . toBe ( 'editorTag' ) ;
136+ } ) ;
137+
0 commit comments