Skip to content

Commit 9b678eb

Browse files
committed
schema registry
1 parent 3fac03d commit 9b678eb

File tree

5 files changed

+180
-5
lines changed

5 files changed

+180
-5
lines changed

e2e-playwright/src/features/SchemaRegistry.feature

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,80 @@ Feature: Schema page
55
When click on Schema Registry link
66
Then Schema Registry heading visible
77
Given SchemaRegistry CheateSchema clicked
8-
98
Given SchemaRegistryCreate is visible
109
Given SchemaRegistryCreate Subject visible is: "true"
1110
Given SchemaRegistryCreate Schema visible is: "true"
1211
Given SchemaRegistryCreate SchemaType visible is: "true"
1312
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
1413
When SchemaRegistryCreate Schema input from avro
1514
When SchemaRegistryCreate Submit clicked
16-
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
15+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
16+
17+
Scenario: SchemaRegistry Avro schema actions
18+
Given Schema Registry is visible
19+
When click on Schema Registry link
20+
Then Schema Registry heading visible
21+
Given SchemaRegistry CheateSchema clicked
22+
Given SchemaRegistryCreate is visible
23+
Given SchemaRegistryCreate Subject visible is: "true"
24+
Given SchemaRegistryCreate Schema visible is: "true"
25+
Given SchemaRegistryCreate SchemaType visible is: "true"
26+
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
27+
When SchemaRegistryCreate Schema input from avro
28+
When SchemaRegistryCreate Submit clicked
29+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
30+
When click on Brokers link
31+
When click on Schema Registry link
32+
Given SchemaRegistry click on schema starts with: "SchemaSubject"
33+
Given SchemaRegistrySchemaName version is: "1"
34+
Given SchemaRegistrySchemaName type is: "AVRO"
35+
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
36+
When SchemaRegistrySchemaName remove schema clicked
37+
Then Schema starts with: "SchemaSubject" deleted
38+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"
39+
40+
Scenario: SchemaRegistry Json schema actions
41+
Given Schema Registry is visible
42+
When click on Schema Registry link
43+
Then Schema Registry heading visible
44+
Given SchemaRegistry CheateSchema clicked
45+
Given SchemaRegistryCreate is visible
46+
Given SchemaRegistryCreate Subject visible is: "true"
47+
Given SchemaRegistryCreate Schema visible is: "true"
48+
Given SchemaRegistryCreate SchemaType visible is: "true"
49+
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
50+
When SchemaRegistryCreate Schema input from json
51+
When SchemaRegistryCreate Submit clicked
52+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
53+
When click on Brokers link
54+
When click on Schema Registry link
55+
Given SchemaRegistry click on schema starts with: "SchemaSubject"
56+
Given SchemaRegistrySchemaName version is: "1"
57+
Given SchemaRegistrySchemaName type is: "JSON"
58+
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
59+
When SchemaRegistrySchemaName remove schema clicked
60+
Then Schema starts with: "SchemaSubject" deleted
61+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"
62+
63+
Scenario: SchemaRegistry Json schema actions
64+
Given Schema Registry is visible
65+
When click on Schema Registry link
66+
Then Schema Registry heading visible
67+
Given SchemaRegistry CheateSchema clicked
68+
Given SchemaRegistryCreate is visible
69+
Given SchemaRegistryCreate Subject visible is: "true"
70+
Given SchemaRegistryCreate Schema visible is: "true"
71+
Given SchemaRegistryCreate SchemaType visible is: "true"
72+
When SchemaRegistryCreate Subject input starts with: "SchemaSubject"
73+
When SchemaRegistryCreate Schema input from protobuf
74+
When SchemaRegistryCreate Submit clicked
75+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "true"
76+
When click on Brokers link
77+
When click on Schema Registry link
78+
Given SchemaRegistry click on schema starts with: "SchemaSubject"
79+
Given SchemaRegistrySchemaName version is: "1"
80+
Given SchemaRegistrySchemaName type is: "PROTOBUF"
81+
Given SchemaRegistrySchemaName Compatibility is: "BACKWARD"
82+
When SchemaRegistrySchemaName remove schema clicked
83+
Then Schema starts with: "SchemaSubject" deleted
84+
Then SchemaRegistrySchemaName starts with: "SchemaSubject", visible is: "false"

e2e-playwright/src/pages/SchemaRegistry/SchemaRegistryLocators.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ export default class SchemaRegistryLocators {
1616
get schemaTextBox(): Locator { return this.page.locator('textarea[name="schema"]')};
1717
get schemaTypeDropDown(): Locator { return this.page.locator('form path')};
1818
get submit(): Locator { return this.page.getByRole('button', { name: 'Submit' })};
19+
get schemaType(): Locator { return this.page.locator('form').getByRole('img')};
1920

2021
schemaTypeDropDownElement(value:string): Locator { return this.page.getByRole('option', { name: value })};
22+
23+
toSchema(value:string): Locator { return this.page.getByRole('link', { name: value })};
24+
25+
schemaTypeElement(value: string): Locator { return this.page.getByRole('option', { name: value })};
2126
}

e2e-playwright/src/pages/SchemaRegistry/SchemaRegistrySchemaNameLocators.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,20 @@ export default class SchemaRegistrySchemaNameLocators {
77
this.page = page;
88
}
99

10+
get editSchema(): Locator { return this.page.getByRole('button', { name: 'Edit Schema' })};
11+
get newSchemaTextbox(): Locator { return this.page.locator('#newSchema div').filter({ hasText: '{ "type": "record", "name": "' }).nth(1)};
12+
get submit(): Locator { return this.page.getByRole('button', { name: 'Submit' })};
13+
get incompatibeError(): Locator { return this.page.getByText('Schema being registered is')};
14+
get menu(): Locator { return this.page.getByRole('button', { name: 'Dropdown Toggle' })};
15+
get removeSchema(): Locator { return this.page.getByText('Remove schema')};
16+
get confirm(): Locator { return this.page.getByRole('button', { name: 'Confirm' })};
17+
1018
heading(value: string): Locator { return this.page.getByText(`Schema Registry${value}`)};
19+
20+
version(value: string): Locator { return this.page.getByText(`Latest version${value}`)};
21+
type(value: string): Locator { return this.page.getByRole('paragraph').filter({ hasText: value })};
22+
compatibility(value: string): Locator { return this.page.getByText(`Compatibility${value}`)};
23+
24+
editDropdown(value: string): Locator { return this.page.getByRole('listbox').filter({ hasText: value }).getByRole('img')};
25+
editDropdownElement(value: string): Locator { return this.page.getByRole('list').getByRole('option', { name: value, exact: true })};
1126
}

e2e-playwright/src/services/commonFunctions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ export async function Delete(page: Page, times: number = 5): Promise<void> {
1111
}
1212
}
1313

14+
export async function clearWithSelectAll(page: Page): Promise<void> {
15+
const selectAll = process.platform === 'darwin' ? 'Meta+A' : 'Control+A';
16+
await page.keyboard.press(selectAll);
17+
await page.keyboard.press('Backspace');
18+
}
19+
1420
// export const generateName = (prefix: string): string => {
1521
// return `${prefix}-${uuidv4().slice(0, 8)}`;
1622
// };

e2e-playwright/src/steps/SchemaRegistry.steps.ts

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
import { Given, When, Then, setDefaultTimeout } from "@cucumber/cucumber";
33
import { PlaywrightWorld } from "../support/PlaywrightWorld";
44
import { expectVisibility } from "../services/uiHelper";
5-
import { generateName } from "../services/commonFunctions";
6-
import { getAvroSchema } from "../services/schemas"
5+
import { generateName } from "../services/commonFunctions";
6+
import { getAvroSchema, getAvroUpdatedSchema, getAvroSchemaValid, getJsonSchema, getProtobufSchema } from "../services/schemas"
7+
import { clearWithSelectAll } from '../services/commonFunctions'
78

89
setDefaultTimeout(60 * 1000 * 2);
910

@@ -38,6 +39,20 @@ When('SchemaRegistryCreate Schema input from avro', async function(this: Playwri
3839
await this.locators.schemaRegistry.schemaTextBox.fill(schema);
3940
});
4041

42+
When('SchemaRegistryCreate Schema input from json', async function(this: PlaywrightWorld) {
43+
const schema = getJsonSchema();
44+
await this.locators.schemaRegistry.schemaType.click();
45+
await this.locators.schemaRegistry.schemaTypeElement("JSON").click();
46+
await this.locators.schemaRegistry.schemaTextBox.fill(schema);
47+
});
48+
49+
When('SchemaRegistryCreate Schema input from protobuf', async function(this: PlaywrightWorld) {
50+
const schema = getProtobufSchema();
51+
await this.locators.schemaRegistry.schemaType.click();
52+
await this.locators.schemaRegistry.schemaTypeElement("PROTOBUF").click();
53+
await this.locators.schemaRegistry.schemaTextBox.fill(schema);
54+
});
55+
4156
When('SchemaRegistryCreate Submit clicked', async function(this: PlaywrightWorld) {
4257
await this.locators.schemaRegistry.submit.click();
4358
});
@@ -48,4 +63,70 @@ Then('SchemaRegistrySchemaName starts with: {string}, visible is: {string}',
4863
const locator = this.locators.schemaName.heading(streamName);
4964
await expectVisibility(locator, visible);
5065
}
51-
);
66+
);
67+
68+
Given('SchemaRegistry click on schema starts with: {string}', async function(this: PlaywrightWorld, prefix: string) {
69+
const schemaName = this.getValue<string>(`subjectName-${prefix}`);
70+
const locator = await this.locators.schemaRegistry.toSchema(schemaName).click();
71+
});
72+
73+
Given('SchemaRegistrySchemaName version is: {string}', async function(this: PlaywrightWorld, version: string) {
74+
await expectVisibility( this.locators.schemaName.version(version), "true");
75+
});
76+
77+
Given('SchemaRegistrySchemaName type is: {string}', async function(this: PlaywrightWorld, expectedType: string) {
78+
await expectVisibility( this.locators.schemaName.type(expectedType), "true");
79+
});
80+
81+
Given('SchemaRegistrySchemaName Compatibility is: {string}', async function(this: PlaywrightWorld, expectedCompatibility: string) {
82+
await expectVisibility( this.locators.schemaName.compatibility(expectedCompatibility), "true");
83+
});
84+
85+
Given('SchemaRegistrySchemaName EditSchema clicked', async function(this: PlaywrightWorld) {
86+
await this.locators.schemaName.editSchema.click();
87+
});
88+
89+
Given('SchemaRegistrySchemaNameEdit New schema is update avro not valid', async function(this: PlaywrightWorld) {
90+
const schema = getAvroUpdatedSchema();
91+
const textBox = this.locators.schemaName.newSchemaTextbox;
92+
await textBox.click();
93+
await clearWithSelectAll(this.page);
94+
await textBox.focus();
95+
await textBox.type(schema)
96+
});
97+
98+
Given('SchemaRegistrySchemaNameEdit New schema is update avro valid', async function(this: PlaywrightWorld) {
99+
const schema = getAvroSchemaValid();
100+
const textBox = this.locators.schemaName.newSchemaTextbox;
101+
await textBox.click();
102+
await clearWithSelectAll(this.page);
103+
await textBox.focus();
104+
await textBox.type(schema)
105+
});
106+
107+
Given(
108+
'SchemaRegistrySchemaNameEdit old Compatibility is: {string}, new Compatibility is: {string}',
109+
async function(this: PlaywrightWorld, oldLevel: string, newLevel: string) {
110+
await this.locators.schemaName.editDropdown(oldLevel).click();
111+
await this.locators.schemaName.editDropdownElement(newLevel).click();
112+
}
113+
);
114+
115+
When('SchemaRegistrySchemaNameEdit submit clicked', async function(this: PlaywrightWorld) {
116+
await this.locators.schemaName.submit.click();
117+
});
118+
119+
Then('Error incompatible visible', async function(this: PlaywrightWorld) {
120+
await expectVisibility(this.locators.schemaName.incompatibeError, "true");
121+
});
122+
123+
When('SchemaRegistrySchemaName remove schema clicked', async function(this: PlaywrightWorld) {
124+
await this.locators.schemaName.menu.click();
125+
await this.locators.schemaName.removeSchema.click()
126+
await this.locators.schemaName.confirm.click();
127+
});
128+
129+
Then('Schema starts with: {string} deleted', async function(this: PlaywrightWorld, prefix: string) {
130+
const schemaName = this.getValue<string>(`subjectName-${prefix}`);
131+
132+
});

0 commit comments

Comments
 (0)