Skip to content

Commit 896cf80

Browse files
authored
RI-6570 Verify read operations for all key types in the browsers module (#4723)
* test: verify read operation for string, hash, list, set, sorted set, stream and JSON keys in browsers module * refactor: extend the API to support adding string, list, sorted set, and JSON keys * refactor: extend the API to support adding TTL to set, hash, and stream keys * extend browser page locators to provide helpers for checking the state of the keys in the details drawer - export common logic for building string buffers and reuse it as a helper function re #RI-6570
1 parent aaefb5f commit 896cf80

File tree

4 files changed

+686
-25
lines changed

4 files changed

+686
-25
lines changed

tests/playwright/helpers/api/api-keys.ts

Lines changed: 124 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
SetKeyParameters,
88
StreamKeyParameters,
99
} from '../../types'
10+
import { stringToBuffer } from '../utils'
1011

1112
const bufferPathMask = '/databases/databaseId/keys?encoding=buffer'
1213
export class APIKeyRequests {
@@ -15,20 +16,44 @@ export class APIKeyRequests {
1516
private databaseAPIRequests: DatabaseAPIRequests,
1617
) {}
1718

19+
async addStringKeyApi(
20+
keyParameters: { keyName: string; value: string; expire?: number },
21+
databaseParameters: AddNewDatabaseParameters,
22+
): Promise<void> {
23+
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
24+
databaseParameters.databaseName,
25+
)
26+
const requestBody = {
27+
keyName: stringToBuffer(keyParameters.keyName),
28+
value: stringToBuffer(keyParameters.value),
29+
expire: keyParameters?.expire,
30+
}
31+
32+
const response = await this.apiClient.post(
33+
`/databases/${databaseId}/string?encoding=buffer`,
34+
requestBody,
35+
)
36+
37+
if (response.status !== 201) {
38+
throw new Error('The creation of new String key request failed')
39+
}
40+
}
41+
1842
async addHashKeyApi(
19-
keyParameters: HashKeyParameters,
43+
keyParameters: HashKeyParameters & { expire?: number },
2044
databaseParameters: AddNewDatabaseParameters,
2145
): Promise<void> {
2246
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
2347
databaseParameters.databaseName,
2448
)
2549
const requestBody = {
26-
keyName: Buffer.from(keyParameters.keyName, 'utf-8'),
50+
keyName: stringToBuffer(keyParameters.keyName),
2751
fields: keyParameters.fields.map((fields) => ({
2852
...fields,
29-
field: Buffer.from(fields.field, 'utf-8'),
30-
value: Buffer.from(fields.value, 'utf-8'),
53+
field: stringToBuffer(fields.field),
54+
value: stringToBuffer(fields.value),
3155
})),
56+
expire: keyParameters?.expire,
3257
}
3358
const response = await this.apiClient.post(
3459
`/databases/${databaseId}/hash?encoding=buffer`,
@@ -38,22 +63,48 @@ export class APIKeyRequests {
3863
throw new Error('The creation of new Hash key request failed')
3964
}
4065

66+
async addListKeyApi(
67+
keyParameters: { keyName: string; elements: string[]; expire?: number },
68+
databaseParameters: AddNewDatabaseParameters,
69+
): Promise<void> {
70+
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
71+
databaseParameters.databaseName,
72+
)
73+
const requestBody = {
74+
keyName: stringToBuffer(keyParameters.keyName),
75+
elements: keyParameters.elements.map((element) =>
76+
stringToBuffer(element),
77+
),
78+
expire: keyParameters?.expire,
79+
}
80+
81+
const response = await this.apiClient.post(
82+
`/databases/${databaseId}/list?encoding=buffer`,
83+
requestBody,
84+
)
85+
86+
if (response.status !== 201) {
87+
throw new Error('The creation of new List key request failed')
88+
}
89+
}
90+
4191
async addStreamKeyApi(
42-
keyParameters: StreamKeyParameters,
92+
keyParameters: StreamKeyParameters & { expire?: number },
4393
databaseParameters: AddNewDatabaseParameters,
4494
): Promise<void> {
4595
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
4696
databaseParameters.databaseName,
4797
)
4898
const requestBody = {
49-
keyName: Buffer.from(keyParameters.keyName, 'utf-8'),
99+
keyName: stringToBuffer(keyParameters.keyName),
50100
entries: keyParameters.entries.map((member) => ({
51101
...member,
52102
fields: member.fields.map(({ name, value }) => ({
53-
name: Buffer.from(name, 'utf-8'),
54-
value: Buffer.from(value, 'utf-8'),
103+
name: stringToBuffer(name),
104+
value: stringToBuffer(value),
55105
})),
56106
})),
107+
expire: keyParameters?.expire,
57108
}
58109
const response = await this.apiClient.post(
59110
`/databases/${databaseId}/streams?encoding=buffer`,
@@ -64,17 +115,18 @@ export class APIKeyRequests {
64115
}
65116

66117
async addSetKeyApi(
67-
keyParameters: SetKeyParameters,
118+
keyParameters: SetKeyParameters & { expire?: number },
68119
databaseParameters: AddNewDatabaseParameters,
69120
): Promise<void> {
70121
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
71122
databaseParameters.databaseName,
72123
)
73124
const requestBody = {
74-
keyName: Buffer.from(keyParameters.keyName, 'utf-8'),
125+
keyName: stringToBuffer(keyParameters.keyName),
75126
members: keyParameters.members.map((member) =>
76-
Buffer.from(member, 'utf-8'),
127+
stringToBuffer(member),
77128
),
129+
expire: keyParameters?.expire,
78130
}
79131
const response = await this.apiClient.post(
80132
`/databases/${databaseId}/set?encoding=buffer`,
@@ -84,6 +136,62 @@ export class APIKeyRequests {
84136
throw new Error('The creation of new Set key request failed')
85137
}
86138

139+
async addZSetKeyApi(
140+
keyParameters: {
141+
keyName: string
142+
members: Array<{ name: string; score: number }>
143+
expire?: number
144+
},
145+
databaseParameters: AddNewDatabaseParameters,
146+
): Promise<void> {
147+
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
148+
databaseParameters.databaseName,
149+
)
150+
const requestBody = {
151+
keyName: stringToBuffer(keyParameters.keyName),
152+
members: keyParameters.members.map((member) => ({
153+
name: stringToBuffer(member.name),
154+
score: member.score,
155+
})),
156+
expire: keyParameters?.expire,
157+
}
158+
159+
const response = await this.apiClient.post(
160+
`/databases/${databaseId}/zSet?encoding=buffer`,
161+
requestBody,
162+
)
163+
164+
if (response.status !== 201) {
165+
throw new Error('The creation of new ZSet key request failed')
166+
}
167+
}
168+
169+
async addJsonKeyApi(
170+
keyParameters: { keyName: string; value: any; expire?: number },
171+
databaseParameters: AddNewDatabaseParameters,
172+
): Promise<void> {
173+
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
174+
databaseParameters.databaseName,
175+
)
176+
const requestBody: any = {
177+
keyName: stringToBuffer(keyParameters.keyName),
178+
data: JSON.stringify(keyParameters.value),
179+
}
180+
181+
if (keyParameters.expire) {
182+
requestBody.expire = keyParameters.expire
183+
}
184+
185+
const response = await this.apiClient.post(
186+
`/databases/${databaseId}/rejson-rl?encoding=buffer`,
187+
requestBody,
188+
)
189+
190+
if (response.status !== 201) {
191+
throw new Error('The creation of new JSON key request failed')
192+
}
193+
}
194+
87195
async searchKeyByNameApi(
88196
keyName: string,
89197
databaseName: string,
@@ -92,9 +200,8 @@ export class APIKeyRequests {
92200
cursor: '0',
93201
match: keyName,
94202
}
95-
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
96-
databaseName,
97-
)
203+
const databaseId =
204+
await this.databaseAPIRequests.getDatabaseIdByName(databaseName)
98205
const response = await this.apiClient.post(
99206
bufferPathMask.replace('databaseId', databaseId),
100207
requestBody,
@@ -108,15 +215,14 @@ export class APIKeyRequests {
108215
keyName: string,
109216
databaseName: string,
110217
): Promise<void> {
111-
const databaseId = await this.databaseAPIRequests.getDatabaseIdByName(
112-
databaseName,
113-
)
218+
const databaseId =
219+
await this.databaseAPIRequests.getDatabaseIdByName(databaseName)
114220
const doesKeyExist = await this.searchKeyByNameApi(
115221
keyName,
116222
databaseName,
117223
)
118224
if (doesKeyExist.length > 0) {
119-
const requestBody = { keyNames: [Buffer.from(keyName, 'utf-8')] }
225+
const requestBody = { keyNames: [stringToBuffer(keyName)] }
120226
const response = await this.apiClient.delete(
121227
bufferPathMask.replace('databaseId', databaseId),
122228
{

tests/playwright/helpers/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ export async function navigateToStandaloneInstance(page: Page): Promise<void> {
3232
await expect(db).toBeVisible({ timeout: 5000 })
3333
await db.first().click()
3434
}
35+
36+
export function stringToBuffer(str: string): Buffer {
37+
return Buffer.from(str, 'utf-8')
38+
}

0 commit comments

Comments
 (0)