Skip to content

Commit bcfc20f

Browse files
fix
1 parent 56bfe99 commit bcfc20f

File tree

12 files changed

+262
-91
lines changed

12 files changed

+262
-91
lines changed

tests/e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"install:chrome-driver": "extest get-chromedriver -s ./test-resources",
1111
"install:deps": "yarn install:vs-code && yarn install:chrome-driver",
1212
"install:extension": "extest install-vsix -f redis-insight-vsc-plugin.vsix -e ./test-extensions",
13-
"test": "yarn run compile && dotenv -e .env extest run-tests dist/setup.js dist/tests/**/*.js --code_settings settings.json -r . --extensions_dir ./test-extensions",
13+
"test": "yarn run compile && dotenv -e .env extest run-tests dist/tests/setup.js dist/tests/**/*.js --code_settings settings.json -r . --extensions_dir ./test-extensions",
1414
"test:ci": "yarn compile && dotenv -e .env ts-node ./src/vscode.runner.ts",
1515
"test:ci:clear": "rimraf ./test-extensions && yarn --cwd ../../ package:prod && yarn compile && dotenv -e .ci.env ts-node ./src/vscode.runner.ts"
1616
},

tests/e2e/src/helpers/api/KeyApi.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
StringKeyParameters,
1414
} from '../types/types'
1515
import { Key } from '../common-actions/KeyActions'
16-
import { KeyTypesShort } from '../constants'
1716

1817
const getKeysPathMask = '/databases/databaseId/keys/get-info?encoding=buffer'
1918
const bufferPathMask = '/databases/databaseId/keys?encoding=buffer'
@@ -150,7 +149,7 @@ export class KeyAPIRequests {
150149
await DatabaseAPIRequests.getDatabaseIdByName(databaseName)
151150
const requestBody = {
152151
keyName: Buffer.from(keyParameters.keyName, 'utf-8'),
153-
element: Buffer.from(keyParameters.element, 'utf-8'),
152+
elements: keyParameters.element.map(el => Buffer.from(el, 'utf-8'))
154153
}
155154
const response = await CommonAPIRequests.sendPostRequest(
156155
`/databases/${databaseId}/list?encoding=buffer`,
@@ -179,7 +178,7 @@ export class KeyAPIRequests {
179178
const requestBody = {
180179
destination,
181180
keyName: Buffer.from(keyParameters.keyName, 'utf-8'),
182-
element: Buffer.from(keyParameters.element, 'utf-8'),
181+
elements: keyParameters.element.map(el => Buffer.from(el, 'utf-8'))
183182
}
184183
const response = await CommonAPIRequests.sendPutRequest(
185184
`/databases/${databaseId}/list?encoding=buffer`,

tests/e2e/src/helpers/constants.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,8 @@ export enum Formatters {
139139
Vector32 = 'Vector 32-bit',
140140
Vector64 = 'Vector 64-bit',
141141
}
142+
143+
export enum AddElementInList {
144+
Head ,
145+
Tail,
146+
}

tests/e2e/src/helpers/scripts/vscodeScripts.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { execSync } from 'child_process'
22

33
export class VScodeScripts {
4+
45
/**
56
* Function to terminate specific Node processes
67
* @param path - The path of node process
@@ -27,4 +28,38 @@ export class VScodeScripts {
2728
)
2829
}
2930
}
31+
32+
/**
33+
* Function to terminate specific Node processes on Windows
34+
* @param path - The path of node process
35+
*/
36+
static terminateSpecificNodeProcessesOnWindows(path: string) {
37+
try {
38+
// Find PIDs of Node processes matching the specific pattern
39+
const taskListOutput = execSync(`tasklist /FI "IMAGENAME eq node.exe" /FO CSV`)
40+
.toString()
41+
.trim()
42+
.split('\n')
43+
44+
// Filter out Node processes related to the specific path
45+
const filteredProcesses = taskListOutput.filter(line =>
46+
line.includes(path)
47+
)
48+
49+
if (filteredProcesses.length > 0) {
50+
// Extract PIDs and terminate processes
51+
filteredProcesses.forEach(process => {
52+
const processInfo = process.split(',')
53+
const pid = processInfo[1].replace(/"/g, '') // PID is in the second column
54+
execSync(`taskkill /PID ${pid} /F`)
55+
})
56+
} else {
57+
console.log('No matching processes found.')
58+
}
59+
} catch (error: any) {
60+
console.error(
61+
`Error terminating specific Node processes: ${error.message}`,
62+
)
63+
}
64+
}
3065
}

tests/e2e/src/helpers/types/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { KeyTypesShort } from '../constants'
1+
import { AddElementInList, KeyTypesShort } from '../constants'
22

33
/**
44
* Add new database parameters
@@ -192,7 +192,8 @@ export type SortedSetKeyParameters = {
192192
*/
193193
export type ListKeyParameters = {
194194
keyName: string
195-
element: string
195+
position?: AddElementInList
196+
element: string[]
196197
}
197198

198199
/**
Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
import { By } from 'selenium-webdriver'
2-
import { InputActions } from '@e2eSrc/helpers/common-actions'
2+
import { ButtonActions, InputActions } from '@e2eSrc/helpers/common-actions'
33
import { AddKeyView } from '@e2eSrc/page-objects/components/editor-view/AddKeyView'
44
import { ListKeyParameters } from '@e2eSrc/helpers/types/types'
5+
import { AddElementInList } from '@e2eSrc/helpers/constants';
56

67
/**
78
* Add List Key details view
89
*/
910
export class AddListKeyView extends AddKeyView {
10-
listElementInput = By.xpath('//*[@data-testid="element"]')
11+
destinationSelect = By.xpath(`//vscode-dropdown[@data-testid='destination-select']`)
12+
fromHeadSelection = By.xpath(`//*[@data-testid='HEAD']`)
13+
addAdditionalElement = By.xpath(`//*[@data-testid='add-new-item']`)
14+
15+
getElementValueInput = (index: number): By =>
16+
By.xpath(
17+
`//*[@data-testid='element-${index}']`,
18+
)
1119

1220
/**
1321
* Adding a new List key
@@ -16,7 +24,20 @@ export class AddListKeyView extends AddKeyView {
1624
*/
1725
async addListKey(keyParameters: ListKeyParameters): Promise<void> {
1826
if (keyParameters.element.length > 0) {
19-
await InputActions.typeText(this.listElementInput, keyParameters.element)
27+
if(keyParameters.position !== undefined && keyParameters.position === AddElementInList.Head){
28+
await ButtonActions.clickAndWaitForElement(
29+
this.destinationSelect,
30+
this.fromHeadSelection,
31+
)
32+
await ButtonActions.clickAndWaitForElement(this.fromHeadSelection, this.fromHeadSelection, false)
33+
}
34+
for (let i = 0; i < keyParameters.element.length; i ++){
35+
await InputActions.typeText(this.getElementValueInput(i), keyParameters.element[i])
36+
37+
if (keyParameters.element.length > 1 && i < keyParameters.element.length - 1) {
38+
await ButtonActions.clickElement(this.addAdditionalElement)
39+
}
40+
}
2041
}
2142
}
2243
}

tests/e2e/src/page-objects/components/editor-view/ListKeyDetailsView.ts

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { By } from 'selenium-webdriver'
22
import { expect } from 'chai'
33
import { DoubleColumnKeyDetailsView } from '@e2eSrc/page-objects/components/editor-view/DoubleColumnKeyDetailsView'
4-
import { KeyTypesShort } from '@e2eSrc/helpers/constants'
4+
import { AddElementInList, KeyTypesShort } from '@e2eSrc/helpers/constants'
55
import { ButtonActions, InputActions } from '@e2eSrc/helpers/common-actions'
6-
import { CommonDriverExtension } from '@e2eSrc/helpers'
76

87
/**
98
* List Key details view
@@ -17,7 +16,9 @@ export class ListKeyDetailsView extends DoubleColumnKeyDetailsView {
1716
truncatedValue = By.xpath(
1817
`//*[contains(@data-testid, 'list-element-')]//*[@class='truncate']`,
1918
)
20-
addListKeyElementInput = By.xpath(`//*[@data-testid='elements-input']`)
19+
20+
addAdditionalElement = By.xpath(`//*[@data-testid='add-new-item']`)
21+
2122
saveElementButton = By.xpath(`//*[@data-testid='save-elements-btn']`)
2223
removeElementFromListIconButton = By.xpath(
2324
`//*[@data-testid='remove-key-value-items-btn']`,
@@ -37,6 +38,16 @@ export class ListKeyDetailsView extends DoubleColumnKeyDetailsView {
3738
`//*[contains(@data-testid, 'list-element-value-')]/*[contains(text(), '${text}')]`,
3839
)
3940

41+
getElementValueByIndex = (index: number): By =>
42+
By.xpath(
43+
`//*[@data-testid='list-element-value-${index}']`,
44+
)
45+
46+
getElementValueInput = (index: number): By =>
47+
By.xpath(
48+
`//*[@data-testid='element-${index}']`,
49+
)
50+
4051
/**
4152
* Edit List key element from details
4253
* @param value The value of the key
@@ -55,38 +66,24 @@ export class ListKeyDetailsView extends DoubleColumnKeyDetailsView {
5566
* Add element to the List key to tail
5667
* @param element The value of the list element
5768
*/
58-
async addListElementToTail(element: string): Promise<void> {
69+
async addListElement(element: string[], position: AddElementInList = AddElementInList.Tail): Promise<void> {
5970
await ButtonActions.clickElement(this.addKeyValueItemsButton)
60-
await InputActions.typeText(this.addListKeyElementInput, element)
61-
await ButtonActions.clickElement(this.saveElementButton)
62-
}
6371

64-
/**
65-
* Add element to the List key to tail
66-
* @param element The value of the list element
67-
*/
68-
async addListElementToHead(element: string): Promise<void> {
69-
await ButtonActions.clickElement(this.addKeyValueItemsButton)
70-
await ButtonActions.clickAndWaitForElement(
71-
this.destinationSelect,
72-
this.fromHeadSelection,
73-
)
74-
await ButtonActions.clickElement(this.fromHeadSelection)
75-
await InputActions.typeText(this.addListKeyElementInput, element)
76-
await ButtonActions.clickElement(this.saveElementButton)
77-
}
72+
if(position === AddElementInList.Head){
73+
await ButtonActions.clickAndWaitForElement(
74+
this.destinationSelect,
75+
this.fromHeadSelection,
76+
)
77+
await ButtonActions.clickAndWaitForElement(this.fromHeadSelection, this.fromHeadSelection, false)
78+
}
79+
for (let i = 0; i < element.length; i ++){
80+
await InputActions.typeText(this.getElementValueInput(i), element[i])
7881

79-
/**
80-
* Remove List element from tail for Redis databases less then v. 6.2.
81-
*/
82-
async removeListElementFromTailOld(): Promise<void> {
83-
await ButtonActions.clickElement(this.removeElementFromListIconButton)
84-
expect(await super.isElementDisabled(this.countInput, 'class')).eql(
85-
true,
86-
'Count Input not disabled',
87-
)
88-
await ButtonActions.clickElement(this.removeElementFromListButton)
89-
await ButtonActions.clickElement(this.confirmRemoveListElementButton)
82+
if (element.length > 1 && i < element.length - 1) {
83+
await ButtonActions.clickElement(this.addAdditionalElement)
84+
}
85+
}
86+
await ButtonActions.clickElement(this.saveElementButton)
9087
}
9188

9289
/**

tests/e2e/src/tests/browser/edit-key-name.e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ describe('Edit Key names verification', () => {
231231
keyNameAfter = Common.generateWord(10)
232232
const listKeyParameters: ListKeyParameters = {
233233
keyName: keyNameBefore,
234-
element: 'keyElementValue',
234+
element: ['keyElementValue'],
235235
}
236236
await KeyAPIRequests.addListKeyApi(
237237
listKeyParameters,

tests/e2e/src/tests/browser/edit-key-value.e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ describe('Edit Key values verification', () => {
165165
keyName = Common.generateWord(10)
166166
const listKeyParameters: ListKeyParameters = {
167167
keyName: keyName,
168-
element: keyValueBefore,
168+
element: [keyValueBefore],
169169
}
170170
await KeyAPIRequests.addListKeyApi(
171171
listKeyParameters,

tests/e2e/src/tests/browser/large-key-details-values.e2e.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,9 @@ describe('Large key details verification', () => {
161161
keyName = Common.generateWord(20)
162162
const listKeyParameters: ListKeyParameters = {
163163
keyName: keyName,
164-
element:
164+
element:[
165165
'wqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsawqertjhhgfdasdfghfdsadfghfdsa',
166+
]
166167
}
167168

168169
await KeyAPIRequests.addListKeyApi(

0 commit comments

Comments
 (0)