Skip to content

Commit afa0f14

Browse files
e2e - Show consumer group tests
1 parent 2dec94b commit afa0f14

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

tests/e2e/pageObjects/browser-page.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export class BrowserPage {
7474
saveGroupsButton = Selector('[data-testid=save-groups-btn]');
7575
//CONTAINERS
7676
streamGroupsContainer = Selector('[data-testid=stream-groups-container]');
77+
streamConsumersContainer = Selector('[data-testid=stream-consumers-container]');
7778
breadcrumbsContainer = Selector('[data-testid=breadcrumbs-container]');
7879
virtualTableContainer = Selector('[data-testid=virtual-table-container]');
7980
streamEntriesContainer = Selector('[data-testid=stream-entries-container]');
@@ -94,6 +95,7 @@ export class BrowserPage {
9495
filterOptionTypeSelected = Selector('[data-testid^=filter-option-type-selected]');
9596
//TABS
9697
streamTabGroups = Selector('[data-testid=stream-tab-Groups]');
98+
streamTabs = Selector('[data-test-subj=stream-tabs]');
9799
//TEXT INPUTS (also referred to as 'Text fields')
98100
addKeyNameInput = Selector('[data-testid=key]');
99101
keyNameInput = Selector('[data-testid=edit-key-input]');
@@ -189,6 +191,9 @@ export class BrowserPage {
189191
streamRangeRightTimestamp = Selector('[data-testid=range-right-timestamp]');
190192
streamGroupId = Selector('.streamItemId[data-testid^=stream-group-id]');
191193
streamGroupName = Selector('[data-testid^=stream-group-name]');
194+
streamMessage = Selector('[data-testid^=stream-message]');
195+
streamConsumerName = Selector('[data-testid^=stream-consumer-]');
196+
consumerGroup = Selector('[data-testid^=stream-group-]');
192197
entryIdInfoIcon = Selector('[data-testid=entry-id-info-icon]');
193198
errorMessage = Selector('[data-test-subj=toast-error]');
194199
entryIdError = Selector('[data-testid=id-error]');

tests/e2e/tests/critical-path/browser/consumer-group.e2e.ts

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { Chance } from 'chance';
22
import { rte } from '../../../helpers/constants';
33
import { acceptLicenseTermsAndAddDatabase, deleteDatabase } from '../../../helpers/database';
4-
import { BrowserPage } from '../../../pageObjects';
4+
import { BrowserPage, CliPage } from '../../../pageObjects';
55
import {
66
commonUrl,
77
ossStandaloneConfig
88
} from '../../../helpers/conf';
99

1010
const browserPage = new BrowserPage();
11+
const cliPage = new CliPage();
1112
const chance = new Chance();
1213

1314
let keyName = chance.word({ length: 20 });
@@ -23,7 +24,7 @@ fixture `Consumer group`
2324
})
2425
.afterEach(async t => {
2526
//Clear and delete database
26-
if (t.expect(browserPage.closeKeyButton.visible).ok){
27+
if (await t.expect(browserPage.closeKeyButton.visible).ok()){
2728
await t.click(browserPage.closeKeyButton);
2829
}
2930
await browserPage.deleteKeyByName(keyName);
@@ -92,3 +93,61 @@ test('Verify that user can see the Consumer group columns (Group Name, Consumers
9293
await t.expect(browserPage.scoreButton.nth(i).textContent).eql(groupColumns[i], `The ${i} Consumer group column name`);
9394
}
9495
});
96+
test('Verify that user can see the message when there are no Consumers in the Consumer Group', async t => {
97+
keyName = chance.word({ length: 20 });
98+
consumerGroupName = chance.word({ length: 20 });
99+
const message = 'Your Consumer Group has no Consumers available.';
100+
// Add New Stream Key
101+
await browserPage.addStreamKey(keyName, keyField, keyValue);
102+
// Open Stream consumer group and check message
103+
await t.click(browserPage.streamTabGroups);
104+
await browserPage.createConsumerGroup(consumerGroupName);
105+
await t.click(browserPage.consumerGroup);
106+
await t.expect(browserPage.streamConsumersContainer.textContent).contains(message, 'The message for empty Consumer Group');
107+
});
108+
test('Verify that user can see the Consumer information columns (Consumer Name, Pendings, Idle Time,ms)', async t => {
109+
keyName = chance.word({ length: 20 });
110+
consumerGroupName = chance.word({ length: 20 });
111+
const cliCommands = [
112+
`XGROUP CREATE ${keyName} ${consumerGroupName} $ MKSTREAM`,
113+
`XADD ${keyName} * message apple`,
114+
`XREADGROUP GROUP ${consumerGroupName} Alice COUNT 1 STREAMS ${keyName} >`
115+
];
116+
const consumerColumns = [
117+
'Consumer Name',
118+
'Pending',
119+
'Idle Time, ms'
120+
];
121+
// Add New Stream Key with groups and consumers
122+
for(const command of cliCommands){
123+
await cliPage.sendCommandInCli(command);
124+
}
125+
// Open Stream consumer info view
126+
await browserPage.openKeyDetails(keyName);
127+
await t.click(browserPage.streamTabGroups);
128+
await t.click(browserPage.consumerGroup);
129+
for(let i = 0; i < consumerColumns.length; i++){
130+
await t.expect(browserPage.scoreButton.nth(i).textContent).eql(consumerColumns[i], `The ${i} Consumers info column name`);
131+
}
132+
});
133+
test('Verify that user can navigate to Consumer Groups screen using the link in the breadcrumbs', async t => {
134+
keyName = chance.word({ length: 20 });
135+
consumerGroupName = chance.word({ length: 20 });
136+
const cliCommands = [
137+
`XGROUP CREATE ${keyName} ${consumerGroupName} $ MKSTREAM`,
138+
`XADD ${keyName} * message apple`,
139+
`XREADGROUP GROUP ${consumerGroupName} Alice COUNT 1 STREAMS ${keyName} >`
140+
];
141+
// Add New Stream Key with groups and consumers
142+
for(const command of cliCommands){
143+
await cliPage.sendCommandInCli(command);
144+
}
145+
// Open Stream consumer info view
146+
await browserPage.openKeyDetails(keyName);
147+
await t.click(browserPage.streamTabGroups);
148+
await t.click(browserPage.consumerGroup);
149+
// Check navigation
150+
await t.expect(browserPage.streamTabs.visible).ok('Stream navigation tabs visibility');
151+
await t.click(browserPage.streamTabGroups);
152+
await t.expect(browserPage.streamTabGroups.withAttribute('aria-selected', 'true').exists).ok('The Consumer Groups screen is opened');
153+
});

tests/e2e/tests/regression/browser/consumer-group.e2e.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { Chance } from 'chance';
22
import { rte } from '../../../helpers/constants';
33
import { acceptLicenseTermsAndAddDatabase, deleteDatabase } from '../../../helpers/database';
4-
import { BrowserPage } from '../../../pageObjects';
4+
import { BrowserPage, CliPage } from '../../../pageObjects';
55
import {
66
commonUrl,
77
ossStandaloneConfig
88
} from '../../../helpers/conf';
99

1010
const browserPage = new BrowserPage();
11+
const cliPage = new CliPage();
1112
const chance = new Chance();
1213

1314
let keyName = chance.word({ length: 20 });
@@ -23,7 +24,7 @@ fixture `Consumer group`
2324
})
2425
.afterEach(async t => {
2526
//Clear and delete database
26-
if (t.expect(browserPage.closeKeyButton.visible).ok){
27+
if (await t.expect(browserPage.closeKeyButton.visible).ok()){
2728
await t.click(browserPage.closeKeyButton);
2829
}
2930
await browserPage.deleteKeyByName(keyName);
@@ -98,3 +99,31 @@ test('Verify that user can sort Consumer Group column: A>Z / Z>A(A>Z is default
9899
await t.expect(browserPage.streamGroupName.nth(i).textContent).contains(consumerGroupNames[groupsCount - 1 - i], 'The Consumer Groups Z>A sorting');
99100
}
100101
});
102+
test('Verify that A>Z is default table sorting in Consumer column', async t => {
103+
keyName = chance.word({ length: 20 });
104+
consumerGroupName = chance.word({ length: 20 });
105+
const consumerNames = [
106+
'Alice',
107+
'Zalice'
108+
];
109+
const cliCommands = [
110+
`XGROUP CREATE ${keyName} ${consumerGroupName} $ MKSTREAM`,
111+
`XADD ${keyName} * message apple`,
112+
`XADD ${keyName} * message orange`,
113+
`XREADGROUP GROUP ${consumerGroupName} ${consumerNames[0]} COUNT 1 STREAMS ${keyName} >`,
114+
`XREADGROUP GROUP ${consumerGroupName} ${consumerNames[1]} COUNT 1 STREAMS ${keyName} >`
115+
];
116+
//Add New Stream Key with groups and consumers
117+
for(const command of cliCommands){
118+
await cliPage.sendCommandInCli(command);
119+
}
120+
//Open Stream consumer info view
121+
await browserPage.openKeyDetails(keyName);
122+
await t.click(browserPage.streamTabGroups);
123+
await t.click(browserPage.consumerGroup);
124+
//Verify default sorting
125+
const consumerCount = await browserPage.streamConsumerName.count;
126+
for(let i = 0; i < consumerCount; i++){
127+
await t.expect(browserPage.streamConsumerName.nth(i).textContent).contains(consumerNames[i], 'The Consumers default sorting');
128+
}
129+
});

0 commit comments

Comments
 (0)