From 2c48c9b693ab4d0381bb0540fdb00a31946b3649 Mon Sep 17 00:00:00 2001 From: vlad-dargel Date: Mon, 22 Aug 2022 09:52:36 +0200 Subject: [PATCH 1/3] add tests for hex and ascii --- .../critical-path/browser/formatters.e2e.ts | 143 ++++++++++++++++++ .../browser/json-formatter.e2e.ts | 80 ---------- 2 files changed, 143 insertions(+), 80 deletions(-) create mode 100644 tests/e2e/tests/critical-path/browser/formatters.e2e.ts delete mode 100644 tests/e2e/tests/critical-path/browser/json-formatter.e2e.ts diff --git a/tests/e2e/tests/critical-path/browser/formatters.e2e.ts b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts new file mode 100644 index 0000000000..1fa99d67a5 --- /dev/null +++ b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts @@ -0,0 +1,143 @@ +import { Selector } from 'testcafe'; +import { keyLength, rte } from '../../../helpers/constants'; +import { addKeysViaCli, deleteKeysViaCli, keyTypes } from '../../../helpers/keys'; +import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database'; +import { BrowserPage } from '../../../pageObjects'; +import { commonUrl, ossStandaloneConfig } from '../../../helpers/conf'; +import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database'; +import { Common } from '../../../helpers/common'; + +const browserPage = new BrowserPage(); +const common = new Common(); + +const keysData = keyTypes.map(object => ({ ...object })).filter((v, i) => i <= 6 && i !== 5); +keysData.forEach(key => key.keyName = `${key.keyName}` + '-' + `${common.generateWord(keyLength)}`); +const formatters = [{ + format: 'JSON', + fromText: '{ "field": "value" }' +}, { + format: 'Msgpack', + fromText: '{ "field": "value" }', + toText: 'DF00000001A56669656C64A576616C7565' +}, { + format: 'ASCII', + fromText: '山女子水 рус ascii', + toText: `\\xe5\\xb1\\xb1\\xe5\\xa5\\xb3\\xe5\\xad\\x90\\xe6\\xb0\\xb4 \\xd1\\x80\\xd1\\x83\\xd1\\x81 ascii` +}, { + format: 'HEX', + fromText: '山女子水 рус ascii', + toText: `e5b1b1e5a5b3e5ad90e6b0b420d180d183d181206173636969` +}]; + +fixture `Formatters` + .meta({ + type: 'regression', + rte: rte.standalone + }) + .page(commonUrl) + .beforeEach(async () => { + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); + // Create new keys + await addKeysViaCli(keysData); + }) + .afterEach(async () => { + // Clear keys and database + await deleteKeysViaCli(keysData); + await deleteStandaloneDatabaseApi(ossStandaloneConfig); + }); +test + .before(async () => { + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); + // Create new keys + await addKeysViaCli(keysData, formatters[0].fromText); + })('Verify that user can see highlighted key details in JSON format', async t => { + // Verify for Hash, List, Set, ZSet, String, Stream keys + for (let i = 0; i < keysData.length; i++) { + const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); + await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); + // Verify that json value not formatted with default formatter + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`${keysData[i].textType} Value is formatted to JSON`); + await browserPage.selectFormatter('JSON'); + // Verify that json value is formatted and highlighted + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok(`${keysData[i].textType} Value is not formatted to JSON`); + } + }); +test('Verify that user can edit the values in the key regardless if they are valid in JSON/Msgpack format or not', async t => { + const invalidText = 'invalid text'; + for (let formatter of formatters) { + if (formatter.format === "JSON" || formatter.format === "Msgpack") { + // Open key details and select formatter + await browserPage.openKeyDetails(keysData[0].keyName); + await browserPage.selectFormatter(formatter.format); + await t.click(browserPage.editHashButton); + await t.typeText(browserPage.hashFieldValueEditor, invalidText, { replace: true, paste: true }); + await t.click(browserPage.applyButton); + // Verify that invalid value can be saved + await t.expect(browserPage.hashFieldValue.textContent).contains(invalidText, `Invalid ${formatter} value is not saved`); + await t.click(browserPage.editHashButton); + await t.typeText(browserPage.hashFieldValueEditor, formatter.fromText, { replace: true, paste: true }); + await t.click(browserPage.applyButton); + // Verify that valid value can be saved + await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.fromText, `Invalid ${formatter} value is not saved`); + await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to ${formatter}`); + } + } +}); +test('Verify that user can see tooltip with convertion failed message on hover when data is not valid JSON/Msgpack', async t => { + for (let formatter of formatters) { + if (formatter.format === "JSON" || formatter.format === "Msgpack") { + const failedMessage = `Failed to convert to ${formatter.format}`; + for (let i = 0; i < keysData.length; i++) { + const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); + // Open key details and select JSON formatter + await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); + await browserPage.selectFormatter(formatter.format); + // Verify that not valid json value is not formatted + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`${keysData[i].textType} Value is formatted to ${formatter.format}`); + await t.hover(valueSelector, { offsetX: 5 }); + // Verify that tooltip with convertion failed message displayed + await t.expect(browserPage.tooltip.textContent).contains(failedMessage, `"${failedMessage}" is not displayed in tooltip`); + } + } + } +}); +test + .before(async () => { + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); + // Create new keys + await addKeysViaCli(keysData, formatters[1].fromText); + })('Verify that user can see highlighted key details in Msgpack format', async t => { + const valueSelector = browserPage.stringKeyValueInput; + // Open String key details + await browserPage.openKeyDetailsByKeyName(keysData[4].keyName); + // Verify that msgpack value not formatted with default formatter + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`Value is formatted to Msgpack`); + // Add valid msgpack in HEX format + await browserPage.selectFormatter('HEX'); + await browserPage.editStringKeyValue(formatters[1].toText!); + await browserPage.selectFormatter('Msgpack'); + // Verify that msgpack value is formatted and highlighted + await t.expect(valueSelector.innerText).contains('{\n "field": "value"\n}', 'Value is not saved as msgpack'); + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to Msgpack`); + }); +test + .before(async () => { + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); + // Create new keys + await addKeysViaCli(keysData, formatters[2].fromText); + })('Verify that user can see key details converted to ASCII/HEX format', async t => { + for (let formatter of formatters) { + if (formatter.format === "ASCII" || formatter.format === "HEX") { + // Verify for Hash, List, Set, ZSet, String, Stream keys + for (let i = 0; i < keysData.length; i++) { + const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); + await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); + // Verify that value not formatted with default formatter + await t.expect(valueSelector.innerText).contains(formatter.fromText!, 'Value is not saved as msgpack'); + await browserPage.selectFormatter(formatter.format); + // Verify that value is formatted and highlighted + await t.expect(valueSelector.innerText).contains(formatter.toText!, 'Value is not saved as msgpack'); + } + } + } + }); diff --git a/tests/e2e/tests/critical-path/browser/json-formatter.e2e.ts b/tests/e2e/tests/critical-path/browser/json-formatter.e2e.ts deleted file mode 100644 index 5759035136..0000000000 --- a/tests/e2e/tests/critical-path/browser/json-formatter.e2e.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Selector } from 'testcafe'; -import { keyLength, rte } from '../../../helpers/constants'; -import { addKeysViaCli, deleteKeysViaCli, keyTypes } from '../../../helpers/keys'; -import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database'; -import { BrowserPage } from '../../../pageObjects'; -import { commonUrl, ossStandaloneConfig } from '../../../helpers/conf'; -import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database'; -import { Common } from '../../../helpers/common'; - -const browserPage = new BrowserPage(); -const common = new Common(); - -const keysData = keyTypes.map(object => ({ ...object })).filter((v, i) => i <= 6 && i !== 5); -keysData.forEach(key => key.keyName = `${key.keyName}` + '-' + `${common.generateWord(keyLength)}`); -const jsonText = '{ "field": "value" }'; - -fixture `JSON formatter` - .meta({ - type: 'regression', - rte: rte.standalone - }) - .page(commonUrl) - .beforeEach(async() => { - await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); - // Create new keys - await addKeysViaCli(keysData); - }) - .afterEach(async() => { - // Clear keys and database - await deleteKeysViaCli(keysData); - await deleteStandaloneDatabaseApi(ossStandaloneConfig); - }); -test - .before(async() => { - await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); - // Create new keys - await addKeysViaCli(keysData, jsonText); - })('Verify that user can see highlighted key details in JSON format', async t => { - // Verify for Hash, List, Set, ZSet, String, Stream keys - for (let i = 0; i < keysData.length; i++) { - const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); - await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); - // Verify that json value not formatted with default formatter - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`${keysData[i].textType} Value is formatted to JSON`); - await browserPage.selectFormatter('JSON'); - // Verify that json value is formatted and highlighted - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok(`${keysData[i].textType} Value is not formatted to JSON`); - } - }); -test('Verify that user can edit the values in the key regardless if they are valid in JSON format or not', async t => { - const invalidJson = 'invalid json text'; - // Open key details and select JSON formatter - await browserPage.openKeyDetails(keysData[0].keyName); - await browserPage.selectFormatter('JSON'); - await t.click(browserPage.editHashButton); - await t.typeText(browserPage.hashFieldValueEditor, invalidJson, { replace: true, paste: true }); - await t.click(browserPage.applyButton); - // Verify that invalid json value can be saved - await t.expect(browserPage.hashFieldValue.textContent).contains(invalidJson, 'Invalid json value is not saved'); - await t.click(browserPage.editHashButton); - await t.typeText(browserPage.hashFieldValueEditor, jsonText, { replace: true, paste: true }); - await t.click(browserPage.applyButton); - // Verify that valid json value can be saved - await t.expect(browserPage.hashFieldValue.innerText).contains(jsonText, 'Invalid json value is not saved'); - await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok('Value is not formatted to JSON'); -}); -test('Verify that user can see tooltip with convertion failed message on hover when data is not valid JSON', async t => { - const failedMessage = 'Failed to convert to JSON'; - for (let i = 0; i < keysData.length; i++) { - const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); - // Open key details and select JSON formatter - await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); - await browserPage.selectFormatter('JSON'); - // Verify that not valid json value is not formatted - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`${keysData[i].textType} Value is formatted to JSON`); - await t.hover(valueSelector, { offsetX: 5 }); - // Verify that tooltip with convertion failed message displayed - await t.expect(browserPage.tooltip.textContent).contains(failedMessage, `"${failedMessage}" is not displayed in tooltip`); - } -}); From 0c869221fb6bcf7c45f5f8e3710b51feb9cb9a97 Mon Sep 17 00:00:00 2001 From: vlad-dargel Date: Mon, 22 Aug 2022 12:45:15 +0200 Subject: [PATCH 2/3] updates for tests --- tests/e2e/helpers/keys.ts | 6 +- tests/e2e/pageObjects/browser-page.ts | 1 + .../critical-path/browser/formatters.e2e.ts | 82 +++++++++++++------ 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/tests/e2e/helpers/keys.ts b/tests/e2e/helpers/keys.ts index 8708cabe49..478d61b73a 100644 --- a/tests/e2e/helpers/keys.ts +++ b/tests/e2e/helpers/keys.ts @@ -47,11 +47,13 @@ export const keyTypes = [ * @param keyData The key data * @param keyValue The key value */ -export async function addKeysViaCli(keyData: KeyData, keyValue?: string): Promise { +export async function addKeysViaCli(keyData: KeyData, keyValue?: string, keyField?: string): Promise { await t.click(cliPage.cliExpandButton); for (const { textType, keyName } of keyData) { if (textType in COMMANDS_TO_CREATE_KEY) { - await t.typeText(cliPage.cliCommandInput, COMMANDS_TO_CREATE_KEY[textType](keyName, keyValue), { paste: true }); + textType === 'Hash' || textType === 'Stream' + ? await t.typeText(cliPage.cliCommandInput, COMMANDS_TO_CREATE_KEY[textType](keyName, keyValue, keyField), { paste: true }) + : await t.typeText(cliPage.cliCommandInput, COMMANDS_TO_CREATE_KEY[textType](keyName, keyValue), { paste: true }); await t.pressKey('enter'); } } diff --git a/tests/e2e/pageObjects/browser-page.ts b/tests/e2e/pageObjects/browser-page.ts index 09bdc2ea08..802ed71c22 100644 --- a/tests/e2e/pageObjects/browser-page.ts +++ b/tests/e2e/pageObjects/browser-page.ts @@ -163,6 +163,7 @@ export class BrowserPage { databaseNames = Selector('[data-testid^=db_name_]'); hashFieldsList = Selector('[data-testid^=hash-field-] span'); hashValuesList = Selector('[data-testid^=hash-field-value-] span'); + hashField = Selector('[data-testid^=hash-field-]').nth(0); hashFieldValue = Selector('[data-testid^=hash-field-value-]'); setMembersList = Selector('[data-testid^=set-member-value-]'); zsetMembersList = Selector('[data-testid^=zset-member-value-]'); diff --git a/tests/e2e/tests/critical-path/browser/formatters.e2e.ts b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts index 1fa99d67a5..83c5e9eb42 100644 --- a/tests/e2e/tests/critical-path/browser/formatters.e2e.ts +++ b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts @@ -22,11 +22,11 @@ const formatters = [{ }, { format: 'ASCII', fromText: '山女子水 рус ascii', - toText: `\\xe5\\xb1\\xb1\\xe5\\xa5\\xb3\\xe5\\xad\\x90\\xe6\\xb0\\xb4 \\xd1\\x80\\xd1\\x83\\xd1\\x81 ascii` + toText: '\\xe5\\xb1\\xb1\\xe5\\xa5\\xb3\\xe5\\xad\\x90\\xe6\\xb0\\xb4 \\xd1\\x80\\xd1\\x83\\xd1\\x81 ascii' }, { format: 'HEX', fromText: '山女子水 рус ascii', - toText: `e5b1b1e5a5b3e5ad90e6b0b420d180d183d181206173636969` + toText: 'e5b1b1e5a5b3e5ad90e6b0b420d180d183d181206173636969' }]; fixture `Formatters` @@ -35,21 +35,21 @@ fixture `Formatters` rte: rte.standalone }) .page(commonUrl) - .beforeEach(async () => { + .beforeEach(async() => { await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); // Create new keys await addKeysViaCli(keysData); }) - .afterEach(async () => { + .afterEach(async() => { // Clear keys and database await deleteKeysViaCli(keysData); await deleteStandaloneDatabaseApi(ossStandaloneConfig); }); test - .before(async () => { + .before(async() => { await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); // Create new keys - await addKeysViaCli(keysData, formatters[0].fromText); + await addKeysViaCli(keysData, formatters[0].fromText, formatters[0].fromText); })('Verify that user can see highlighted key details in JSON format', async t => { // Verify for Hash, List, Set, ZSet, String, Stream keys for (let i = 0; i < keysData.length; i++) { @@ -60,12 +60,21 @@ test await browserPage.selectFormatter('JSON'); // Verify that json value is formatted and highlighted await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok(`${keysData[i].textType} Value is not formatted to JSON`); + // Verify that Hash field is formatted to json and highlighted + if (keysData[i].keyName === 'hash') { + await t.expect(browserPage.hashField.find(browserPage.cssJsonValue).exists).ok('Hash field is not formatted to JSON'); + } + // Verify that Stream field is formatted to json and highlighted + if (keysData[i].keyName === 'stream') { + await t.expect(Selector(browserPage.cssJsonValue).count).eql(2, 'Hash field is not formatted to JSON'); + } } }); test('Verify that user can edit the values in the key regardless if they are valid in JSON/Msgpack format or not', async t => { + // Verify for JSON and Msgpack formatters const invalidText = 'invalid text'; - for (let formatter of formatters) { - if (formatter.format === "JSON" || formatter.format === "Msgpack") { + for (const formatter of formatters) { + if (formatter.format === 'JSON' || formatter.format === 'Msgpack') { // Open key details and select formatter await browserPage.openKeyDetails(keysData[0].keyName); await browserPage.selectFormatter(formatter.format); @@ -73,26 +82,27 @@ test('Verify that user can edit the values in the key regardless if they are val await t.typeText(browserPage.hashFieldValueEditor, invalidText, { replace: true, paste: true }); await t.click(browserPage.applyButton); // Verify that invalid value can be saved - await t.expect(browserPage.hashFieldValue.textContent).contains(invalidText, `Invalid ${formatter} value is not saved`); + await t.expect(browserPage.hashFieldValue.textContent).contains(invalidText, `Invalid ${formatter.format} value is not saved`); await t.click(browserPage.editHashButton); await t.typeText(browserPage.hashFieldValueEditor, formatter.fromText, { replace: true, paste: true }); await t.click(browserPage.applyButton); // Verify that valid value can be saved - await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.fromText, `Invalid ${formatter} value is not saved`); - await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to ${formatter}`); + await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.fromText, `Valid ${formatter.format} value is not saved`); + await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to ${formatter.format}`); } } }); test('Verify that user can see tooltip with convertion failed message on hover when data is not valid JSON/Msgpack', async t => { - for (let formatter of formatters) { - if (formatter.format === "JSON" || formatter.format === "Msgpack") { + // Verify for JSON and Msgpack formatters + for (const formatter of formatters) { + if (formatter.format === 'JSON' || formatter.format === 'Msgpack') { const failedMessage = `Failed to convert to ${formatter.format}`; for (let i = 0; i < keysData.length; i++) { const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); - // Open key details and select JSON formatter + // Open key details and select formatter await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); await browserPage.selectFormatter(formatter.format); - // Verify that not valid json value is not formatted + // Verify that not valid value is not formatted await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`${keysData[i].textType} Value is formatted to ${formatter.format}`); await t.hover(valueSelector, { offsetX: 5 }); // Verify that tooltip with convertion failed message displayed @@ -102,7 +112,7 @@ test('Verify that user can see tooltip with convertion failed message on hover w } }); test - .before(async () => { + .before(async() => { await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); // Create new keys await addKeysViaCli(keysData, formatters[1].fromText); @@ -111,33 +121,57 @@ test // Open String key details await browserPage.openKeyDetailsByKeyName(keysData[4].keyName); // Verify that msgpack value not formatted with default formatter - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk(`Value is formatted to Msgpack`); + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk('Value is formatted to Msgpack'); // Add valid msgpack in HEX format await browserPage.selectFormatter('HEX'); await browserPage.editStringKeyValue(formatters[1].toText!); await browserPage.selectFormatter('Msgpack'); // Verify that msgpack value is formatted and highlighted await t.expect(valueSelector.innerText).contains('{\n "field": "value"\n}', 'Value is not saved as msgpack'); - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to Msgpack`); + await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok('Value is not formatted to Msgpack'); }); test - .before(async () => { + .before(async() => { await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); // Create new keys await addKeysViaCli(keysData, formatters[2].fromText); })('Verify that user can see key details converted to ASCII/HEX format', async t => { - for (let formatter of formatters) { - if (formatter.format === "ASCII" || formatter.format === "HEX") { + // Verify for ASCII and HEX formatters + for (const formatter of formatters) { + if (formatter.format === 'ASCII' || formatter.format === 'HEX') { // Verify for Hash, List, Set, ZSet, String, Stream keys for (let i = 0; i < keysData.length; i++) { const valueSelector = Selector(`[data-testid^=${keysData[i].keyName.split('-')[0]}-][data-testid*=${keysData[i].data}]`); await browserPage.openKeyDetailsByKeyName(keysData[i].keyName); // Verify that value not formatted with default formatter - await t.expect(valueSelector.innerText).contains(formatter.fromText!, 'Value is not saved as msgpack'); + await t.expect(valueSelector.innerText).contains(formatter.fromText!, `Value is formatted as ${formatter.format} in Unicode`); await browserPage.selectFormatter(formatter.format); - // Verify that value is formatted and highlighted - await t.expect(valueSelector.innerText).contains(formatter.toText!, 'Value is not saved as msgpack'); + // Verify that value is formatted + await t.expect(valueSelector.innerText).contains(formatter.toText!, `Value is formatted to ${formatter.format}`); + // Verify that Hash field is formatted to ASCII/HEX + if (keysData[i].keyName === 'hash') { + await t.expect(browserPage.hashField.innerText).contains(formatter.toText!, `Hash field is not formatted to ${formatter.format}`); + } } } } }); +test('Verify that user can edit value for Hash field in ASCII/HEX and convert then to another format', async t => { + // Verify for ASCII and HEX formaterrs + for (const formatter of formatters) { + if (formatter.format === 'ASCII' || formatter.format === 'HEX') { + // Open key details and select formatter + await browserPage.openKeyDetails(keysData[0].keyName); + await browserPage.selectFormatter(formatter.format); + // Add value in selected format + await t.click(browserPage.editHashButton); + await t.typeText(browserPage.hashFieldValueEditor, formatter.toText!, { replace: true, paste: true }); + await t.click(browserPage.applyButton); + // Verify that value saved in selected format + await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.toText!, `${formatter.format} value is not saved`); + await browserPage.selectFormatter('Unicode'); + // Verify that value converted to Unicode + await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.fromText!, `${formatter.format} value is not converted to Unicode`); + } + } +}); From 615cd27be83f4273801222bfded427a43134fdcb Mon Sep 17 00:00:00 2001 From: vlad-dargel Date: Mon, 22 Aug 2022 14:26:03 +0200 Subject: [PATCH 3/3] updates by pr comments --- tests/e2e/helpers/keys.ts | 1 + tests/e2e/pageObjects/browser-page.ts | 17 +++++++++++-- .../critical-path/browser/formatters.e2e.ts | 25 +++++++------------ 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/tests/e2e/helpers/keys.ts b/tests/e2e/helpers/keys.ts index 478d61b73a..df07e2752a 100644 --- a/tests/e2e/helpers/keys.ts +++ b/tests/e2e/helpers/keys.ts @@ -46,6 +46,7 @@ export const keyTypes = [ * Adding keys of each type through the cli * @param keyData The key data * @param keyValue The key value + * @param keyField The key field value */ export async function addKeysViaCli(keyData: KeyData, keyValue?: string, keyField?: string): Promise { await t.click(cliPage.cliExpandButton); diff --git a/tests/e2e/pageObjects/browser-page.ts b/tests/e2e/pageObjects/browser-page.ts index 802ed71c22..f7c05522d7 100644 --- a/tests/e2e/pageObjects/browser-page.ts +++ b/tests/e2e/pageObjects/browser-page.ts @@ -469,7 +469,9 @@ export class BrowserPage { // Scan until finding element or all keys scanned while (true) { await t.click(this.scanMoreButton); - if (await this.isKeyIsDisplayedInTheList(keyName) || scannedValueText === totalKeysValue) break; + if (await this.isKeyIsDisplayedInTheList(keyName) || scannedValueText === totalKeysValue) { + break; + } } } @@ -555,6 +557,17 @@ export class BrowserPage { await t.click(this.saveHashFieldButton); } + /** + * Edit Hash key value from details + * @param value The value of the key + */ + async editHashKeyValue(value: string): Promise { + await t + .click(this.editHashButton) + .typeText(this.hashFieldValueEditor, value, {replace: true, paste: true}) + .click(this.applyButton); + } + /** * Search by the value in the key details * @param value The value of the search parameter @@ -960,7 +973,7 @@ export type AddKeyArguments = { fieldValueStartWith?: string, elementStartWith?: string, memberStartWith?: string -} +}; /** * Keys Data parameters diff --git a/tests/e2e/tests/critical-path/browser/formatters.e2e.ts b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts index 83c5e9eb42..a5b0749e34 100644 --- a/tests/e2e/tests/critical-path/browser/formatters.e2e.ts +++ b/tests/e2e/tests/critical-path/browser/formatters.e2e.ts @@ -78,14 +78,10 @@ test('Verify that user can edit the values in the key regardless if they are val // Open key details and select formatter await browserPage.openKeyDetails(keysData[0].keyName); await browserPage.selectFormatter(formatter.format); - await t.click(browserPage.editHashButton); - await t.typeText(browserPage.hashFieldValueEditor, invalidText, { replace: true, paste: true }); - await t.click(browserPage.applyButton); + await browserPage.editHashKeyValue(invalidText); // Verify that invalid value can be saved await t.expect(browserPage.hashFieldValue.textContent).contains(invalidText, `Invalid ${formatter.format} value is not saved`); - await t.click(browserPage.editHashButton); - await t.typeText(browserPage.hashFieldValueEditor, formatter.fromText, { replace: true, paste: true }); - await t.click(browserPage.applyButton); + await browserPage.editHashKeyValue(formatter.fromText); // Verify that valid value can be saved await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.fromText, `Valid ${formatter.format} value is not saved`); await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok(`Value is not formatted to ${formatter.format}`); @@ -117,18 +113,17 @@ test // Create new keys await addKeysViaCli(keysData, formatters[1].fromText); })('Verify that user can see highlighted key details in Msgpack format', async t => { - const valueSelector = browserPage.stringKeyValueInput; - // Open String key details - await browserPage.openKeyDetailsByKeyName(keysData[4].keyName); + // Open HaSH key details + await browserPage.openKeyDetailsByKeyName(keysData[0].keyName); // Verify that msgpack value not formatted with default formatter - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).notOk('Value is formatted to Msgpack'); + await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).notOk('Value is formatted to Msgpack'); // Add valid msgpack in HEX format await browserPage.selectFormatter('HEX'); - await browserPage.editStringKeyValue(formatters[1].toText!); + await browserPage.editHashKeyValue(formatters[1].toText!); await browserPage.selectFormatter('Msgpack'); // Verify that msgpack value is formatted and highlighted - await t.expect(valueSelector.innerText).contains('{\n "field": "value"\n}', 'Value is not saved as msgpack'); - await t.expect(valueSelector.find(browserPage.cssJsonValue).exists).ok('Value is not formatted to Msgpack'); + await t.expect(browserPage.hashFieldValue.innerText).contains(formatters[1].fromText!, 'Value is not saved as msgpack'); + await t.expect(browserPage.hashFieldValue.find(browserPage.cssJsonValue).exists).ok('Value is not formatted to Msgpack'); }); test .before(async() => { @@ -164,9 +159,7 @@ test('Verify that user can edit value for Hash field in ASCII/HEX and convert th await browserPage.openKeyDetails(keysData[0].keyName); await browserPage.selectFormatter(formatter.format); // Add value in selected format - await t.click(browserPage.editHashButton); - await t.typeText(browserPage.hashFieldValueEditor, formatter.toText!, { replace: true, paste: true }); - await t.click(browserPage.applyButton); + await browserPage.editHashKeyValue(formatter.toText!); // Verify that value saved in selected format await t.expect(browserPage.hashFieldValue.innerText).contains(formatter.toText!, `${formatter.format} value is not saved`); await browserPage.selectFormatter('Unicode');