import { v4 as uuidv4 } from ‘uuid’;
import { test, expect } from ‘@playwright/test’;
import constants from ‘…/…/…/…/constants’;

import { PropertyElement, Navigator, Graph, LoginPage, SymbolPanel, ContextMenu, Header } from ‘…/…/…/…/DSL/allClasses’;

test(‘K.1.6.1.18. Переход по ссылкам вокруг связи’, async ({ page }) => {
/*
https://confluence.silaunion.ru/pages/viewpage.action?pageId=2428871107
/

const dataBaseName: string = ‘K.1.6.1.18_’ + uuidv4();
const modelName: string = uuidv4();
const edgeName: string = ’ [Edges with attributes]‘;
const firstLocaleModelName: object = { enName: “Test 1”, ruName: “Тест 1” };
const secondLocaleModelName: object = { enName: “Test 2”, ruName: “Тест 2” };
const elementProperty = new PropertyElement(page);
const navigator = new Navigator(page);
const graph = new Graph(page);
const loginPage = new LoginPage(page);
const symbolPanel = new SymbolPanel(page);
const contextMenu = new ContextMenu(page);
const header = new Header(page);
const attributesToAdd: = [‘test_attribute’, ‘select123456789’, ‘date’, ‘node’, ‘datatime’, ‘text’, ‘mselect123456789’, ‘number’, ‘period’, ‘json’, ‘link’, ‘string’, ‘times’, ‘boolean’];
const attributesLocaleValue:object = {
link: { ruName: “ruLink”, enName: ‘enLink’, ruLink: “www.ya.ru”, enLink: “www.google.com” },
text: { ruName: ‘ruText’, enName: ‘enText’ },
string: { ruName: ‘ruString’, enName: ‘enString’ },
selection: { ruName: ‘РУ11’, enName: ‘EN11’ },
mselection: { ruName: [‘РУ21’, ‘РУ22’, ‘РУ23’], enName: [‘EN21’, ‘EN22’, ‘EN23’] },
};
await page.goto(’/‘);
// Условие:
await loginPage.signIn({});
// Создать БД
await contextMenu.createBD(dataBaseName);
// Создать модель
await contextMenu.createModel(modelName, dataBaseName);
// Перенести 2 объекта на холст и провести связь между ними
await navigator.openSymbolPanel();
const positionFirstObject = { x: 210, y: 200 };
const positionSecondObject = { x: 710, y: 220 };
const positionEdge = {
x: positionFirstObject.x + 190, y: positionFirstObject.y + 40
};
await symbolPanel.dragSymbolToGraph(constants.TEST_METHODOLOGY_SYMBOL_OWAS, positionFirstObject.x, positionFirstObject.y);
await symbolPanel.dragSymbolToGraph(constants.TEST_METHODOLOGY_SYMBOL_TO, positionSecondObject.x, positionSecondObject.y);
await graph.createEdgeBetweenElements(positionFirstObject.x, positionFirstObject.y, positionSecondObject.x, positionSecondObject.y);
// Отрыть дерево созданной БД
await navigator.clickOnItemMenu(dataBaseName);
// Создать модель с именем “Тест 1” для русской локализации и “Test 1” для английской локализации
await contextMenu.createModel(firstLocaleModelName.ruName, dataBaseName);
await navigator.clickOnItemMenu(firstLocaleModelName.ruName, { button: ‘right’ });
await contextMenu.clickProperties();
await elementProperty.editAttributeStr(’‘, ‘Имя модели’, firstLocaleModelName);
await elementProperty.clickSaveButton();
// Создать модель с именем “Тест 2” для русской локализации и “Test 2” для английской локализации
await contextMenu.createModel(secondLocaleModelName.ruName, dataBaseName);
await navigator.clickOnItemMenu(secondLocaleModelName.ruName, { button: ‘right’ });
await contextMenu.clickProperties();
await elementProperty.editAttributeStr(’‘, ‘Имя модели’, secondLocaleModelName);
await elementProperty.clickSaveButton();

await test.step(‘1.Создание определения связи’, async () => {
// Возвращаемся на вкладку со связью
await graph.openTab(modelName);
await graph.createEdgeDefinition(positionEdge.x, positionEdge.y);
});

await test.step(‘2.Добавление атрибутов определению связи и ввод значений для двух локализаций’, async () => {
// Активируем чекбокс “Объекты”, чтобы они были видны в дереве
await navigator.enableObjectsDisplay();
// Открыть дерево объекта, тем самым увидим связь в навигаторе
await navigator.clickOnItemMenu(constants.TEST_METHODOLOGY_SYMBOL_OWAS, { button: ‘left’ }, 10);
// Открываю модальное окно свойств связи
await navigator.clickOnItemMenu(edgeName, { clickCount: 2 }, 10);
await elementProperty.addAttributes(attributesToAdd);
// Задаем значение каждому атрибуту
// json
await elementProperty.editAttributeJson();
// datatime
await elementProperty.editAttributeDatatime();
// date
await elementProperty.editAttributeData();
// link (two locale)
await elementProperty.editAttributeLink(’‘, ‘link’, attributesLocaleValue.link);
// node
await elementProperty.editAttributeNode(firstLocaleModelName.ruName);
// text (two locale)
await elementProperty.editAttributeStr(’‘, ‘text’, attributesLocaleValue.text);
// time
await elementProperty.editAttributeTime();
// string (two locale)
await elementProperty.editAttributeStr(’', ‘string’, attributesLocaleValue.string);
// number
await elementProperty.editAttributeNumber(‘1098374’, ‘number’);
// test_attribute
await elementProperty.editAttributeNumber(‘1837410’, ‘test_attribute’);
// period
await elementProperty.editAttributePeriod(‘22.02.2022’, ‘23.02.2022’);
// selection
await elementProperty.editAttributeSelection(attributesLocaleValue.selection.ruName);
// mselection
await elementProperty.editAttributeMultipleSelection(attributesLocaleValue.mselection.ruName);
// Клик “Сохранить”
await elementProperty.clickSaveButton();
});

await test.step(‘3.Смена локализации на английскую. Проверка смены значений’, async () => {
// Выйти из приложения
await header.logOut();
await loginPage.signIn({ locale: “EN” });
// Активируем чекбокс “Объекты”, чтобы они были видны в дереве
await navigator.enableObjectsDisplay();
// Раскрываем дерево БД
await navigator.clickOnItemMenu(dataBaseName, { button: ‘left’ }, 15);
await page.waitForTimeout(constants.SHORT_WAIT);
// Раскрываем дерево объекта
await navigator.clickOnItemMenu(constants.TEST_METHODOLOGY_SYMBOL_OWAS, { button: ‘left’ }, 15);
// Клик ПКМ по определению связи в дереве Навигатора → Свойства
await navigator.clickOnItemMenu(edgeName, { button: ‘right’ }, 15);
await contextMenu.clickProperties();
// Проверка, что в окне “Свойства” отображаются добавленные атрибуты со значениями для английской локализации (link, string, text, node, select, mselect)
// assert link
await expect(elementProperty.getValueAttribute(‘link’)).toContainText(attributesLocaleValue.link.enName);
// assert string
await expect(elementProperty.getValueAttribute(‘string’)).toContainText(attributesLocaleValue.string.enName);
// assert text
await expect(elementProperty.getValueAttribute(‘text’)).toContainText(attributesLocaleValue.text.enName);
// assert node
await expect(elementProperty.getValueAttribute(‘node’)).toHaveText(firstLocaleModelName.enName);
// assert select
await expect(elementProperty.getValueAttribute(/^select123456789/)).toHaveText(attributesLocaleValue.selection.enName);
// assert mselect
await expect(elementProperty.getValueAttribute(/^mselect123456789/)).toHaveText(attributesLocaleValue.mselection.enName.join(“”));
});

await test.step(‘4.Изменение значений у атрибутов для одной локализации’, async () => {
// Задаем новые значения для английской локали
// link
await elementProperty.editAttributeLink(‘1’);
// string
await elementProperty.editAttributeStr(‘2’, ‘string’);
// text
await elementProperty.editAttributeStr(‘3’, ‘text’);
// Клик по кнопке Сохранить в окне Свойства
await elementProperty.clickSaveButton();
// Клик ПКМ по определению связи в дереве Навигатора → Свойства
await navigator.clickOnItemMenu(edgeName, { button: ‘right’ }, 15);
await contextMenu.clickProperties();
// Проверка, что в окне “Свойства” отображаются изменённые атрибуты со значениями для английской локализации (link, string, text)
// assert link
await expect(elementProperty.getValueAttribute(‘link’)).toContainText(attributesLocaleValue.link.enName + ‘1’);
// assert string
await expect(elementProperty.getValueAttribute(‘string’)).toContainText(attributesLocaleValue.string.enName + ‘2’);
// assert text
// text.fixme(‘https://jira.silaunion.ru/browse/BPM-7068’) Курсор должен стоять в конце строки при редактировании атрибута “text” - сейчас в начале
// await expect(elementProperty.getValueAttribute(‘text’)).toContainText(attributesLocaleValue.text.enName + ‘3’);
await elementProperty.clickSaveButton();
});

await test.step(‘5.Смена локализации на русскую. Проверка смены значений’, async () => {
// Выйти из приложения
await header.logOut();
await loginPage.signIn({});
// Активируем чекбокс “Объекты”, чтобы они были видны в дереве
await navigator.enableObjectsDisplay();
// Раскрываем дерево БД
await navigator.clickOnItemMenu(dataBaseName, { button: ‘left’ }, 15);
await page.waitForTimeout(constants.SHORT_WAIT);
// Раскрываем дерево объекта
await navigator.clickOnItemMenu(constants.TEST_METHODOLOGY_SYMBOL_OWAS, { button: ‘left’ }, 15);
// Клик ПКМ по определению связи в дереве Навигатора → Свойства
await navigator.clickOnItemMenu(edgeName, { button: ‘right’ }, 15);
await contextMenu.clickProperties();
// Проверка, что в окне “Свойства“ отображаются атрибуты со значениями для русской локализации без изменений
// assert link
await expect(elementProperty.getValueAttribute(‘link’)).toContainText(attributesLocaleValue.link.ruName);
// assert string
await expect(elementProperty.getValueAttribute(‘string’)).toContainText(attributesLocaleValue.string.ruName);
// assert text
await expect(elementProperty.getValueAttribute(‘text’)).toContainText(attributesLocaleValue.text.ruName);
// assert node
await expect(elementProperty.getValueAttribute(‘node’)).toHaveText(firstLocaleModelName.ruName);
// assert select
await expect(elementProperty.getValueAttribute(/^select123456789/)).toHaveText(attributesLocaleValue.selection.ruName);
// assert mselect
await expect(elementProperty.getValueAttribute(/^mselect123456789/)).toHaveText(attributesLocaleValue.mselection.ruName.join(“”));
});

await test.step(‘6.Изменение значений у атрибутов’, async () => {
/
Поменять значения всех атрибутов
Клик по кнопке Сохранить в окне Свойства
Клик ПКМ по определению связи в дереве Навигатора → Свойства
Ожидаемый результат: в окне Свойства отображаются изменённые атрибуты со значениями для русской локализации.
У атрибутов Выбор/Множественный выбор значение изменилось.
У атрибута “Ссылка на документ“ значение изменилось
*/


});

await test.step(‘7.Удаление значений у атрибутов’, async () => {

});

}, constants.TEST_TIMEOUT);

Помоги типизировать через ts, этот файл написан на js