150 lines
6.7 KiB
TypeScript
150 lines
6.7 KiB
TypeScript
import {expect} from '@playwright/test';
|
|
|
|
import datalensTest from '../../../utils/playwright/globalTestDefinition';
|
|
import {openTestPage, slct} from '../../../utils';
|
|
import {
|
|
DATASET_TAB,
|
|
DatasetSourcesTableQa,
|
|
DatasetSourceEditorDialogQA,
|
|
AvatarQA,
|
|
} from '../../../../src/shared';
|
|
import {DatasetsEntities} from '../../../constants/test-entities/datasets';
|
|
import {getValidatePromise} from '../../../page-objects/dataset/utils';
|
|
|
|
datalensTest.describe('Dataset sources', () => {
|
|
datalensTest('Add source button should add source', async ({page}) => {
|
|
const url = `datasets${DatasetsEntities.Basic.url}`;
|
|
await openTestPage(page, url, {tab: DATASET_TAB.SOURCES});
|
|
|
|
await page.waitForSelector(slct(DatasetSourcesTableQa.Source));
|
|
const startSourcesCount = await page.locator(slct(DatasetSourcesTableQa.Source)).count();
|
|
|
|
const addSourceBtn = page.locator(slct(DatasetSourcesTableQa.SourcesAddItemBtn));
|
|
await addSourceBtn.click();
|
|
|
|
const tableNameInput = page
|
|
.locator(slct(DatasetSourceEditorDialogQA.EditPathInput))
|
|
.first()
|
|
.locator('input');
|
|
await tableNameInput.fill('foobar');
|
|
const schemeNameInput = page
|
|
.locator(slct(DatasetSourceEditorDialogQA.EditPathInput))
|
|
.nth(1)
|
|
.locator('input');
|
|
await schemeNameInput.fill('barfoo');
|
|
|
|
const applyBtn = page.locator(slct(DatasetSourceEditorDialogQA.ApplyBtn));
|
|
const validatePromise = getValidatePromise(page);
|
|
await applyBtn.click();
|
|
await validatePromise;
|
|
|
|
const closeBtn = page.locator(slct(DatasetSourceEditorDialogQA.CancelBtn));
|
|
await closeBtn.click();
|
|
|
|
const endSourcesCount = await page.locator(slct(DatasetSourcesTableQa.Source)).count();
|
|
expect(endSourcesCount).toEqual(startSourcesCount + 1);
|
|
});
|
|
|
|
datalensTest('Add source button should add SQL source', async ({page}) => {
|
|
const url = `datasets${DatasetsEntities.Basic.url}`;
|
|
await openTestPage(page, url, {tab: DATASET_TAB.SOURCES});
|
|
await page.waitForSelector(slct(DatasetSourcesTableQa.Source));
|
|
|
|
const startSourcesCount = await page.locator(slct(DatasetSourcesTableQa.Source)).count();
|
|
|
|
const addSourceBtn = page.locator(slct(DatasetSourcesTableQa.SourcesAddItemBtn));
|
|
await addSourceBtn.click();
|
|
const editorDialog = page.locator(slct(DatasetSourceEditorDialogQA.Dialog));
|
|
const editorSwitch = page.locator(slct(DatasetSourceEditorDialogQA.SourceEditorSwitch));
|
|
const sqlSwitch = editorSwitch.locator('label', {hasText: 'SQL'}).locator('input');
|
|
await sqlSwitch.click();
|
|
|
|
const editor = editorDialog.locator('.react-monaco-editor-container');
|
|
await editor.click();
|
|
await page.keyboard.insertText('abc');
|
|
|
|
const applyBtn = page.locator(slct(DatasetSourceEditorDialogQA.ApplyBtn));
|
|
const validatePromise = getValidatePromise(page);
|
|
await applyBtn.click();
|
|
await validatePromise;
|
|
|
|
const endSourcesCount = await page.locator(slct(DatasetSourcesTableQa.Source)).count();
|
|
expect(endSourcesCount).toEqual(startSourcesCount + 1);
|
|
});
|
|
|
|
datalensTest('Source table does not have add source button', async ({page}) => {
|
|
const url = `datasets${DatasetsEntities.WithOtherConnection.url}`;
|
|
await openTestPage(page, url, {tab: DATASET_TAB.SOURCES});
|
|
|
|
await page.waitForSelector(slct(DatasetSourcesTableQa.Source));
|
|
const addSourceBtn = page.locator(slct(DatasetSourcesTableQa.SourcesAddItemBtn));
|
|
await expect(addSourceBtn).not.toBeVisible();
|
|
});
|
|
|
|
datalensTest('Source edit SQL switch should be disabled', async ({page}) => {
|
|
const url = `datasets${DatasetsEntities.WithOtherConnection.url}`;
|
|
await openTestPage(page, url, {tab: DATASET_TAB.SOURCES});
|
|
|
|
await page.waitForSelector(slct(DatasetSourcesTableQa.Source));
|
|
const sourceContextMenu = page.locator(slct(DatasetSourcesTableQa.SourceContextMenuBtn));
|
|
await sourceContextMenu.click();
|
|
const editBtn = page.locator(slct(DatasetSourcesTableQa.SourceContextMenuModify));
|
|
await editBtn.click();
|
|
const editorDialog = page.locator(slct(DatasetSourceEditorDialogQA.Dialog));
|
|
await expect(editorDialog).toBeVisible();
|
|
const editorSwitch = page.locator(slct(DatasetSourceEditorDialogQA.SourceEditorSwitch));
|
|
const sqlSwitch = editorSwitch.locator('label', {hasText: 'SQL'}).locator('input');
|
|
await expect(sqlSwitch).toBeVisible();
|
|
await expect(sqlSwitch).toBeDisabled();
|
|
});
|
|
|
|
datalensTest(
|
|
'Should remove highlight for table sources but keep custom sources after avatar delete',
|
|
async ({page}) => {
|
|
const url = `datasets${DatasetsEntities.Basic.url}`;
|
|
await openTestPage(page, url, {tab: DATASET_TAB.SOURCES});
|
|
|
|
await page.waitForSelector(slct(DatasetSourcesTableQa.Source));
|
|
|
|
const addSourceBtn = page.locator(slct(DatasetSourcesTableQa.SourcesAddItemBtn));
|
|
await addSourceBtn.click();
|
|
|
|
const tableNameInput = page
|
|
.locator(slct(DatasetSourceEditorDialogQA.EditPathInput))
|
|
.first()
|
|
.locator('input');
|
|
await tableNameInput.fill('foobar');
|
|
const schemeNameInput = page
|
|
.locator(slct(DatasetSourceEditorDialogQA.EditPathInput))
|
|
.nth(1)
|
|
.locator('input');
|
|
await schemeNameInput.fill('barfoo');
|
|
|
|
const applyBtn = page.locator(slct(DatasetSourceEditorDialogQA.ApplyBtn));
|
|
const validatePromise = getValidatePromise(page);
|
|
await applyBtn.click();
|
|
await validatePromise;
|
|
|
|
const closeBtn = page.locator(slct(DatasetSourceEditorDialogQA.CancelBtn));
|
|
await closeBtn.click();
|
|
|
|
const customSource = page.locator(slct(DatasetSourcesTableQa.Source)).first();
|
|
const tableSource = page.locator(slct(DatasetSourcesTableQa.Source)).last();
|
|
|
|
const sourceClassBefore = await customSource.getAttribute('class');
|
|
expect(sourceClassBefore).toContain('source_source');
|
|
|
|
const tableSourceClassBefore = await tableSource.getAttribute('class');
|
|
expect(tableSourceClassBefore).toContain('source_source');
|
|
|
|
await page.click(slct(AvatarQA.DeleteButton));
|
|
|
|
const customSourceClassAfter = await customSource.getAttribute('class');
|
|
expect(customSourceClassAfter).toContain('source_source');
|
|
|
|
const tableSourceClassAfter = await tableSource.getAttribute('class');
|
|
expect(tableSourceClassAfter).not.toContain('source_source');
|
|
},
|
|
);
|
|
});
|