Skip to content

Commit 59cc269

Browse files
committed
feat: add test
1 parent e2d225a commit 59cc269

File tree

5 files changed

+46
-8
lines changed

5 files changed

+46
-8
lines changed

playwright.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const config: PlaywrightTestConfig = {
1717
webServer: baseUrl
1818
? undefined
1919
: {
20-
command: 'npm run dev',
20+
command: 'REACT_APP_DISABLE_CHECKS=true npm run dev',
2121
port: 3000,
2222
reuseExistingServer: true,
2323
},

src/store/configureStore.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@ function _configureStore<
2828
preloadedState,
2929
middleware: (getDefaultMiddleware) =>
3030
getDefaultMiddleware({
31-
immutableCheck: {
32-
ignoredPaths: ['tooltip.currentHoveredRef'],
33-
},
34-
serializableCheck: {
35-
ignoredPaths: ['tooltip.currentHoveredRef', 'api'],
36-
ignoredActions: [UPDATE_REF, 'api/sendQuery/rejected'],
37-
},
31+
immutableCheck: process.env.REACT_APP_DISABLE_CHECKS
32+
? false
33+
: {
34+
ignoredPaths: ['tooltip.currentHoveredRef'],
35+
},
36+
serializableCheck: process.env.REACT_APP_DISABLE_CHECKS
37+
? false
38+
: {
39+
ignoredPaths: ['tooltip.currentHoveredRef', 'api'],
40+
ignoredActions: [UPDATE_REF, 'api/sendQuery/rejected'],
41+
},
3842
}).concat(locationMiddleware, ...middleware),
3943
});
4044

tests/suites/tenant/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ export const longTableSelect = (limit?: number) =>
99
export const longRunningQuery = new Array(400).fill(simpleQuery).join('');
1010
export const longRunningStreamQuery = `$sample = AsList(AsStruct(ListFromRange(1, 100000) AS value1, ListFromRange(1, 1000) AS value2, CAST(1 AS Uint32) AS id));
1111
12+
SELECT value1, value2, id FROM as_table($sample) FLATTEN BY (value1);
13+
`;
14+
export const longerRunningStreamQuery = `$sample = AsList(AsStruct(ListFromRange(1, 1000000) AS value1, ListFromRange(1, 10000) AS value2, CAST(1 AS Uint32) AS id));
15+
1216
SELECT value1, value2, id FROM as_table($sample) FLATTEN BY (value1);
1317
`;
1418
export const selectFromMyRowTableQuery = 'select * from `my_row_table`';

tests/suites/tenant/queryEditor/models/QueryEditor.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class QueryEditor {
5050
private runButton: Locator;
5151
private explainButton: Locator;
5252
private stopButton: Locator;
53+
private stopBanner: Locator;
5354
private saveButton: Locator;
5455
private gearButton: Locator;
5556
private banner: Locator;
@@ -64,6 +65,7 @@ export class QueryEditor {
6465
this.editorTextArea = this.selector.locator('.query-editor__monaco textarea');
6566
this.runButton = this.selector.getByRole('button', {name: ButtonNames.Run});
6667
this.stopButton = this.selector.getByRole('button', {name: ButtonNames.Stop});
68+
this.stopBanner = this.selector.locator('.ydb-query-stopped-banner');
6769
this.explainButton = this.selector.getByRole('button', {name: ButtonNames.Explain});
6870
this.saveButton = this.selector.getByRole('button', {name: ButtonNames.Save});
6971
this.gearButton = this.selector.locator('.ydb-query-editor-button__gear-button');
@@ -233,6 +235,11 @@ export class QueryEditor {
233235
return true;
234236
}
235237

238+
async isStopBannerVisible() {
239+
await this.stopBanner.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});
240+
return true;
241+
}
242+
236243
async isResultsControlsVisible() {
237244
await this.resultsControls.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});
238245
return true;

tests/suites/tenant/queryEditor/queryEditor.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
longRunningQuery,
1111
longRunningStreamQuery,
1212
longTableSelect,
13+
longerRunningStreamQuery,
1314
} from '../constants';
1415

1516
import {
@@ -142,6 +143,28 @@ test.describe('Test Query Editor', async () => {
142143
await expect(queryEditor.waitForStatus('Stopped')).resolves.toBe(true);
143144
});
144145

146+
test('Streaming query shows some results and banner when stop button is clicked', async ({
147+
page,
148+
}) => {
149+
const queryEditor = new QueryEditor(page);
150+
await toggleExperiment(page, 'on', 'Query Streaming');
151+
152+
await queryEditor.setQuery(longerRunningStreamQuery);
153+
await queryEditor.clickRunButton();
154+
155+
await expect(queryEditor.isStopButtonVisible()).resolves.toBe(true);
156+
await page.waitForTimeout(1000);
157+
158+
await queryEditor.clickStopButton();
159+
160+
await expect(queryEditor.isStopBannerVisible()).resolves.toBe(true);
161+
await expect(queryEditor.resultTable.getResultTitleText()).resolves.toBe('Result');
162+
await expect(
163+
Promise.resolve(Number(await queryEditor.resultTable.getResultTitleCount())),
164+
).resolves.toBeGreaterThan(100);
165+
await expect(queryEditor.waitForStatus('Stopped')).resolves.toBe(true);
166+
});
167+
145168
test('Stop button is not visible for quick queries', async ({page}) => {
146169
const queryEditor = new QueryEditor(page);
147170

0 commit comments

Comments
 (0)