Skip to content

Commit db8ec37

Browse files
fix: make limit rows less or equal to 100_000 (#1695)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 017b983 commit db8ec37

File tree

3 files changed

+80
-2
lines changed

3 files changed

+80
-2
lines changed

src/utils/query.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export const querySettingsValidationSchema = z.object({
324324
),
325325
limitRows: z.preprocess(
326326
(val) => (val === '' ? undefined : val),
327-
z.coerce.number().gt(0).lte(10_000).or(z.undefined()),
327+
z.coerce.number().gt(0).lte(100_000).or(z.undefined()),
328328
),
329329
queryMode: queryModeSchema,
330330
transactionMode: transactionModeSchema,
@@ -340,7 +340,7 @@ export const querySettingsRestoreSchema = z
340340
),
341341
limitRows: z.preprocess(
342342
(val) => (val === '' ? undefined : val),
343-
z.coerce.number().gt(0).lte(10_000).optional().catch(DEFAULT_QUERY_SETTINGS.limitRows),
343+
z.coerce.number().gt(0).lte(100_000).optional().catch(DEFAULT_QUERY_SETTINGS.limitRows),
344344
),
345345
queryMode: queryModeSchema.catch(DEFAULT_QUERY_SETTINGS.queryMode),
346346
transactionMode: transactionModeSchema.catch(DEFAULT_QUERY_SETTINGS.transactionMode),

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export class SettingsDialog {
1414
private page: Page;
1515
private selectPopup: Locator;
1616
private limitRowsInput: Locator;
17+
private limitRowsErrorIcon: Locator;
18+
private limitRowsErrorPopover: Locator;
1719

1820
private queryModeSelect: Locator;
1921
private transactionModeSelect: Locator;
@@ -25,6 +27,10 @@ export class SettingsDialog {
2527
this.dialog = page.locator('.ydb-query-settings-dialog');
2628

2729
this.limitRowsInput = this.dialog.locator('.ydb-query-settings-dialog__limit-rows input');
30+
this.limitRowsErrorIcon = this.dialog.locator(
31+
'.ydb-query-settings-dialog__limit-rows [data-qa="control-error-icon-qa"]',
32+
);
33+
this.limitRowsErrorPopover = this.page.locator('.g-popover__tooltip-content');
2834
this.selectPopup = page.locator('.ydb-query-settings-select__popup');
2935

3036
// Define distinct locators for selects
@@ -79,6 +85,25 @@ export class SettingsDialog {
7985
await this.page.waitForTimeout(1000);
8086
}
8187

88+
async clearLimitRows() {
89+
await this.limitRowsInput.clear();
90+
await this.page.waitForTimeout(1000);
91+
}
92+
93+
async getLimitRowsValue() {
94+
return await this.limitRowsInput.inputValue();
95+
}
96+
97+
async isLimitRowsError() {
98+
return await this.limitRowsErrorIcon.isVisible();
99+
}
100+
101+
async getLimitRowsErrorMessage() {
102+
await this.limitRowsErrorIcon.hover();
103+
await this.limitRowsErrorPopover.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});
104+
return await this.limitRowsErrorPopover.textContent();
105+
}
106+
82107
async clickButton(buttonName: ButtonNames) {
83108
const button = this.dialog.getByRole('button', {name: buttonName});
84109
await button.waitFor({state: 'visible', timeout: VISIBILITY_TIMEOUT});

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,57 @@ test.describe('Test Query Settings', async () => {
138138

139139
await expect(queryEditor.isBannerHidden()).resolves.toBe(true);
140140
});
141+
142+
test('Shows error for limit rows > 100000', async ({page}) => {
143+
const queryEditor = new QueryEditor(page);
144+
await queryEditor.clickGearButton();
145+
146+
await queryEditor.settingsDialog.changeLimitRows(100001);
147+
await queryEditor.settingsDialog.clickButton(ButtonNames.Save);
148+
149+
await expect(queryEditor.settingsDialog.isLimitRowsError()).resolves.toBe(true);
150+
await expect(queryEditor.settingsDialog.getLimitRowsErrorMessage()).resolves.toBe(
151+
'Number must be less than or equal to 100000',
152+
);
153+
});
154+
155+
test('Shows error for negative limit rows', async ({page}) => {
156+
const queryEditor = new QueryEditor(page);
157+
await queryEditor.clickGearButton();
158+
159+
await queryEditor.settingsDialog.changeLimitRows(-1);
160+
await queryEditor.settingsDialog.clickButton(ButtonNames.Save);
161+
162+
await expect(queryEditor.settingsDialog.isLimitRowsError()).resolves.toBe(true);
163+
await expect(queryEditor.settingsDialog.getLimitRowsErrorMessage()).resolves.toBe(
164+
'Number must be greater than 0',
165+
);
166+
});
167+
168+
test('Persists valid limit rows value', async ({page}) => {
169+
const queryEditor = new QueryEditor(page);
170+
const validValue = 50000;
171+
172+
// Set value and save
173+
await queryEditor.clickGearButton();
174+
await queryEditor.settingsDialog.changeLimitRows(validValue);
175+
await queryEditor.settingsDialog.clickButton(ButtonNames.Save);
176+
await expect(queryEditor.settingsDialog.isHidden()).resolves.toBe(true);
177+
178+
// Reopen and check value
179+
await queryEditor.clickGearButton();
180+
await expect(queryEditor.settingsDialog.getLimitRowsValue()).resolves.toBe(
181+
validValue.toString(),
182+
);
183+
});
184+
185+
test('Allows empty limit rows value', async ({page}) => {
186+
const queryEditor = new QueryEditor(page);
187+
188+
await queryEditor.clickGearButton();
189+
await queryEditor.settingsDialog.clearLimitRows();
190+
await queryEditor.settingsDialog.clickButton(ButtonNames.Save);
191+
192+
await expect(queryEditor.settingsDialog.isHidden()).resolves.toBe(true);
193+
});
141194
});

0 commit comments

Comments
 (0)