2026-06-24 21:10:34 +05:00

149 lines
4.5 KiB
TypeScript

import {expect} from '@playwright/test';
import QLPage from '../../../page-objects/ql/QLPage';
import {openTestPage, slct} from '../../../utils';
import {RobotChartsSQLEditorUrls} from '../../../utils/constants';
import datalensTest from '../../../utils/playwright/globalTestDefinition';
import {ActionPanelQA, SaveChartControlsQa} from '../../../../src/shared';
const sqlScript = `
select built_year, AVG(iznos::float)
from public.sample
where iznos::float > 0
group by built_year, iznos
order by built_year, iznos
`;
const sqlScript2 = `
select built_year, AVG(iznos::float)
from public.sample
where iznos::float > 0 AND built_year > '1900'
group by built_year, iznos
order by built_year, iznos
`;
datalensTest.describe('QL - saving the chart', () => {
datalensTest.beforeEach(async ({page}) => {
await openTestPage(page, RobotChartsSQLEditorUrls.NewQLChartForPostgresDemo);
});
datalensTest.afterEach(async ({page}) => {
const isRemoveMenuExists = await page.locator(slct(ActionPanelQA.MoreBtn)).isVisible();
if (!isRemoveMenuExists) {
return;
}
const qlPage = new QLPage({page});
await qlPage.deleteEntry();
});
datalensTest('Saving a new ql chart', async ({page}) => {
const qlPage = new QLPage({page});
await qlPage.setScript(sqlScript);
await qlPage.runScript();
await qlPage.waitForSuccessfulResponse('/api/run');
await qlPage.saveQlEntry(qlPage.getUniqueEntryName('ql-e2e-save-test'));
const saveButtonLocator = await qlPage.page.locator(slct(SaveChartControlsQa.SaveButton));
await expect(saveButtonLocator).toBeDisabled();
});
datalensTest('Saving an already created ql chart', async ({page}) => {
const qlPage = new QLPage({page});
await qlPage.setScript(sqlScript);
await qlPage.runScript();
await qlPage.waitForSuccessfulResponse('/api/run');
await qlPage.saveQlEntry(qlPage.getUniqueEntryName('ql-e2e-save-test'));
const saveButtonLocator = await qlPage.page.locator(slct(SaveChartControlsQa.SaveButton));
await expect(saveButtonLocator).toBeDisabled();
await qlPage.page.reload();
await qlPage.clearScript();
await qlPage.setScript(sqlScript2);
await qlPage.runScript();
await qlPage.waitForSuccessfulResponse('/api/run');
await qlPage.saveExistentQlEntry();
const saveButtonLocatorAfterReload = await qlPage.page.locator(
slct(SaveChartControlsQa.SaveButton),
);
await expect(saveButtonLocatorAfterReload).toBeDisabled();
});
datalensTest('Saving ql Chart settings - Header', async ({page}) => {
const qlPage = new QLPage({page});
await qlPage.setScript(sqlScript);
await qlPage.runScript();
const entryName = qlPage.getUniqueEntryName('ql-e2e-save-test');
const title = `${entryName} title`;
await qlPage.waitForSuccessfulResponse('/api/run');
await qlPage.chartSettings.open();
await qlPage.chartSettings.waitForSettingsRender();
await qlPage.chartSettings.setTitle(title);
await qlPage.chartSettings.apply();
await qlPage.saveQlEntry(entryName);
await qlPage.page.reload();
await qlPage.waitForSuccessfulResponse('/api/run');
await qlPage.chartSettings.open();
await qlPage.chartSettings.waitForSettingsRender();
// after saving, the title should be displayed
// in settings
expect(await qlPage.chartSettings.getTitleValue()).toEqual(title);
await qlPage.chartSettings.close();
// and in the chart
await expect(qlPage.page.locator(qlPage.chartkit.chartTitle)).toHaveText(title);
await expect(qlPage.getSaveButtonLocator()).toBeDisabled({timeout: 5000});
});
datalensTest('Creating QL chart with error', async ({page}) => {
const qlPage = new QLPage({page});
const saveBtnLocator = page.locator(slct(SaveChartControlsQa.SaveButton));
await expect(saveBtnLocator).toBeDisabled();
await qlPage.setScript('wrong query');
const responsePromise = page.waitForResponse((response) => {
const responseUrl = new URL(response.url());
return responseUrl.pathname === '/api/run';
});
await qlPage.runScript();
await responsePromise;
await expect(saveBtnLocator).not.toBeDisabled({timeout: 5000});
await qlPage.saveQlEntry(qlPage.getUniqueEntryName('ql-e2e-create-chart-with-error-test'));
});
});