@@ -2,6 +2,7 @@ import {expect, test} from '@playwright/test';
22
33import { QUERY_MODES , TRANSACTION_MODES } from '../../../../src/utils/query' ;
44import { tenantName } from '../../../utils/constants' ;
5+ import { toggleExperiment } from '../../../utils/toggleExperiment' ;
56import { TenantPage , VISIBILITY_TIMEOUT } from '../TenantPage' ;
67import { longRunningQuery } from '../constants' ;
78
@@ -152,4 +153,99 @@ test.describe('Test Query Settings', async () => {
152153
153154 await expect ( queryEditor . settingsDialog . isHidden ( ) ) . resolves . toBe ( true ) ;
154155 } ) ;
156+
157+ test ( 'Timeout input is invisible by default' , async ( { page} ) => {
158+ const queryEditor = new QueryEditor ( page ) ;
159+
160+ // Open settings dialog
161+ await queryEditor . clickGearButton ( ) ;
162+ await expect ( queryEditor . settingsDialog . isVisible ( ) ) . resolves . toBe ( true ) ;
163+
164+ // Check that timeout input is invisible
165+ await expect ( queryEditor . settingsDialog . isTimeoutInputVisible ( ) ) . resolves . toBe ( false ) ;
166+
167+ // Close dialog
168+ await queryEditor . settingsDialog . clickButton ( ButtonNames . Cancel ) ;
169+ await expect ( queryEditor . settingsDialog . isHidden ( ) ) . resolves . toBe ( true ) ;
170+ } ) ;
171+
172+ test ( 'Clicking timeout switch makes timeout input visible' , async ( { page} ) => {
173+ const queryEditor = new QueryEditor ( page ) ;
174+
175+ // Open settings dialog
176+ await queryEditor . clickGearButton ( ) ;
177+ await expect ( queryEditor . settingsDialog . isVisible ( ) ) . resolves . toBe ( true ) ;
178+
179+ // Initially timeout input should be invisible
180+ await expect ( queryEditor . settingsDialog . isTimeoutInputVisible ( ) ) . resolves . toBe ( false ) ;
181+
182+ // Click the timeout switch
183+ await queryEditor . settingsDialog . clickTimeoutSwitch ( ) ;
184+
185+ // Check that timeout input is now visible
186+ await expect ( queryEditor . settingsDialog . isTimeoutInputVisible ( ) ) . resolves . toBe ( true ) ;
187+ await expect ( queryEditor . settingsDialog . isTimeoutSwitchChecked ( ) ) . resolves . toBe ( true ) ;
188+
189+ // Close dialog
190+ await queryEditor . settingsDialog . clickButton ( ButtonNames . Cancel ) ;
191+ await expect ( queryEditor . settingsDialog . isHidden ( ) ) . resolves . toBe ( true ) ;
192+ } ) ;
193+
194+ test ( 'Timeout switch is checked, disabled, and has hint when non-query mode is selected' , async ( {
195+ page,
196+ } ) => {
197+ const queryEditor = new QueryEditor ( page ) ;
198+
199+ // Open settings dialog
200+ await queryEditor . clickGearButton ( ) ;
201+ await expect ( queryEditor . settingsDialog . isVisible ( ) ) . resolves . toBe ( true ) ;
202+
203+ // Initially timeout switch should be enabled and unchecked
204+ await expect ( queryEditor . settingsDialog . isTimeoutSwitchDisabled ( ) ) . resolves . toBe ( false ) ;
205+ await expect ( queryEditor . settingsDialog . isTimeoutSwitchChecked ( ) ) . resolves . toBe ( false ) ;
206+
207+ // Change to a non-query mode
208+ await queryEditor . settingsDialog . changeQueryMode ( QUERY_MODES . scan ) ;
209+
210+ // Verify timeout switch is checked and disabled
211+ await expect ( queryEditor . settingsDialog . isTimeoutSwitchChecked ( ) ) . resolves . toBe ( true ) ;
212+ await expect ( queryEditor . settingsDialog . isTimeoutSwitchDisabled ( ) ) . resolves . toBe ( true ) ;
213+
214+ // Verify hint is visible and has correct text
215+ await expect ( queryEditor . settingsDialog . isTimeoutHintVisible ( ) ) . resolves . toBe ( true ) ;
216+
217+ // Verify the hint text content
218+ const hintText = await queryEditor . settingsDialog . getTimeoutHintText ( ) ;
219+ expect ( hintText ) . toBeTruthy ( ) ; // Should have some text content
220+
221+ // Close dialog
222+ await queryEditor . settingsDialog . clickButton ( ButtonNames . Cancel ) ;
223+ await expect ( queryEditor . settingsDialog . isHidden ( ) ) . resolves . toBe ( true ) ;
224+ } ) ;
225+
226+ test ( 'When Query Streaming is off, timeout has label and input is visible by default' , async ( {
227+ page,
228+ } ) => {
229+ const queryEditor = new QueryEditor ( page ) ;
230+
231+ // Turn off Query Streaming experiment
232+ await toggleExperiment ( page , 'off' , 'Query Streaming' ) ;
233+
234+ // Open settings dialog
235+ await queryEditor . clickGearButton ( ) ;
236+ await expect ( queryEditor . settingsDialog . isVisible ( ) ) . resolves . toBe ( true ) ;
237+
238+ // Verify there's a label instead of a switch
239+ await expect ( queryEditor . settingsDialog . isTimeoutLabelVisible ( ) ) . resolves . toBe ( true ) ;
240+
241+ // Verify timeout input is visible by default
242+ await expect ( queryEditor . settingsDialog . isTimeoutInputVisible ( ) ) . resolves . toBe ( true ) ;
243+
244+ // Close dialog
245+ await queryEditor . settingsDialog . clickButton ( ButtonNames . Cancel ) ;
246+ await expect ( queryEditor . settingsDialog . isHidden ( ) ) . resolves . toBe ( true ) ;
247+
248+ // Restore Query Streaming experiment
249+ await toggleExperiment ( page , 'on' , 'Query Streaming' ) ;
250+ } ) ;
155251} ) ;
0 commit comments