239 lines
7.5 KiB
TypeScript
239 lines
7.5 KiB
TypeScript
import {expect} from '@playwright/test';
|
|
import QLPage from '../../../page-objects/ql/QLPage';
|
|
import {openTestPage, slct, waitForCondition} from '../../../utils';
|
|
import {RobotChartsSQLEditorUrls} from '../../../utils/constants';
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {RevisionsPanelQa} from '../../../../src/shared';
|
|
import {COMMON_CHARTKIT_SELECTORS} from '../../../page-objects/constants/chartkit';
|
|
|
|
const sqlScript = `
|
|
select built_year, AVG(iznos::float)
|
|
from public.sample
|
|
where iznos::float > 0 and built_year > '2016'
|
|
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 > '2015'
|
|
group by built_year, iznos
|
|
order by built_year, iznos
|
|
`;
|
|
|
|
const sqlScript3 = `
|
|
select built_year, AVG(iznos::float)
|
|
from public.sample
|
|
where iznos::float > 0 AND built_year > '2014'
|
|
group by built_year, iznos
|
|
order by built_year, iznos
|
|
`;
|
|
|
|
const CHART_RENDER_TIMEOUT = 60000;
|
|
|
|
datalensTest.describe('QL - saving when versioning charts', () => {
|
|
datalensTest.beforeEach(async ({page}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
await openTestPage(page, RobotChartsSQLEditorUrls.NewQLChartForPostgresDemo);
|
|
|
|
await qlPage.setScript(sqlScript);
|
|
|
|
await qlPage.runScript();
|
|
|
|
const chart = qlPage.page.locator(COMMON_CHARTKIT_SELECTORS.chart);
|
|
await expect(chart).toBeVisible({timeout: CHART_RENDER_TIMEOUT});
|
|
|
|
const entryName = 'ql-revision-e2e-test-chart';
|
|
|
|
await qlPage.saveQlEntry(qlPage.getUniqueEntryName(entryName));
|
|
|
|
await qlPage.clearScript();
|
|
|
|
await qlPage.setScript(sqlScript2);
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.runScript();
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.saveExistentQlEntry();
|
|
});
|
|
|
|
datalensTest.afterEach(async ({page}, testInfo) => {
|
|
if (testInfo.status !== 'failed' && testInfo.status !== 'timedOut') {
|
|
const qlPage = new QLPage({page});
|
|
|
|
await qlPage.deleteEntry();
|
|
}
|
|
});
|
|
|
|
datalensTest(
|
|
'When you click on make relevant, the version should not save the changes made on it',
|
|
async ({page}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
await qlPage.switchToQlInitialRevision(sqlScript);
|
|
|
|
await qlPage.clearScript();
|
|
|
|
await qlPage.setScript(sqlScript3);
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.runScript();
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.revisions.makeRevisionActual();
|
|
|
|
await waitForCondition(async () => {
|
|
const currentScript = (await qlPage.getScript()) || '';
|
|
|
|
return qlPage.compareScripts(sqlScript, currentScript);
|
|
}).catch(() => {
|
|
throw new Error(
|
|
'The editor should have a script that was in the revision, without changes',
|
|
);
|
|
});
|
|
|
|
await qlPage.revisions.validateRevisions(3);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'When you click "Save as Draft", a revision with all changes should be created',
|
|
async ({page}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.switchToQlInitialRevision(sqlScript);
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.clearScript();
|
|
|
|
await qlPage.setScript(sqlScript3);
|
|
|
|
const apiRunSuccessfulPromise2 = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.runScript();
|
|
|
|
await apiRunSuccessfulPromise2;
|
|
|
|
await qlPage.saveExistentQlEntry();
|
|
|
|
await waitForCondition(async () => {
|
|
const currentScript = (await qlPage.getScript()) || '';
|
|
|
|
const revisionPanel = await qlPage.page.$(slct(RevisionsPanelQa.RevisionsPanel));
|
|
|
|
return qlPage.compareScripts(currentScript, sqlScript3) && revisionPanel;
|
|
}).catch(() => {
|
|
throw new Error('Failed to save draft correctly');
|
|
});
|
|
|
|
await qlPage.revisions.validateRevisions(3);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'When you click make relevant, another revision should become relevant',
|
|
async ({page}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.switchToQlInitialRevision(sqlScript);
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.revisions.makeRevisionActual();
|
|
|
|
await qlPage.revisions.waitUntilRevisionPanelDisappear();
|
|
|
|
await qlPage.revisions.validateRevisions(3);
|
|
|
|
const revId = await qlPage.revisions.getRevisionIdFromUrl();
|
|
|
|
expect(revId).toBe(null);
|
|
},
|
|
);
|
|
|
|
datalensTest(
|
|
'When you click on the open current button, it opens the current version',
|
|
async ({page}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.switchToQlInitialRevision(sqlScript);
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.revisions.openActualRevision();
|
|
|
|
await qlPage.revisions.waitUntilRevisionPanelDisappear();
|
|
|
|
await qlPage.revisions.validateRevisions(2);
|
|
|
|
await waitForCondition(async () => {
|
|
const currentScript = (await qlPage.getScript()) || '';
|
|
|
|
return qlPage.compareScripts(currentScript, sqlScript2);
|
|
}).catch(() => {
|
|
throw new Error('The chart revision switched, but the old chart was drawn');
|
|
});
|
|
|
|
const revId = await qlPage.revisions.getRevisionIdFromUrl();
|
|
|
|
expect(revId).toBe(null);
|
|
},
|
|
);
|
|
|
|
datalensTest('Save revision as new chart', async ({page, context}) => {
|
|
const qlPage = new QLPage({page});
|
|
|
|
const initialChartEntryId = qlPage.getEntryIdFromUrl() || undefined;
|
|
|
|
expect(initialChartEntryId).not.toBe(undefined);
|
|
|
|
const apiRunSuccessfulPromise = qlPage.waitForSuccessfulResponse('/api/run');
|
|
|
|
await qlPage.switchToQlInitialRevision(sqlScript);
|
|
|
|
await apiRunSuccessfulPromise;
|
|
|
|
await qlPage.saveQlChartAsNew(qlPage.getUniqueEntryName('ql-e2e-revision-test'));
|
|
|
|
// waiting for the render of the new entry before comparing urls
|
|
await qlPage.revisions.waitUntilRevisionPanelDisappear();
|
|
|
|
const newChartEntryId = qlPage.getEntryIdFromUrl() || undefined;
|
|
|
|
expect(newChartEntryId).not.toBe(undefined);
|
|
|
|
expect(initialChartEntryId).not.toEqual(newChartEntryId);
|
|
|
|
await waitForCondition(async () => {
|
|
const currentScript = (await qlPage.getScript()) || '';
|
|
|
|
return qlPage.compareScripts(currentScript, sqlScript);
|
|
}).catch(() => {
|
|
throw new Error(
|
|
`Saving the new chart was not successful. The script does not match the script from the first revision`,
|
|
);
|
|
});
|
|
|
|
const secondPage = await context.newPage();
|
|
|
|
await openTestPage(secondPage, `/ql/${initialChartEntryId}`);
|
|
|
|
const chart = qlPage.page.locator(COMMON_CHARTKIT_SELECTORS.chart);
|
|
await expect(chart).toBeVisible({timeout: CHART_RENDER_TIMEOUT});
|
|
});
|
|
});
|