@@ -16,13 +16,19 @@ export class RbacPo extends PageObject {
16
16
private notButton : Locator ;
17
17
private rulesSideBar : Locator ;
18
18
private hasSpecButton : Locator ;
19
+ private hasAnnotationButton : Locator ;
19
20
private key : Locator ;
21
+ private annotation : Locator ;
20
22
private saveConditions : Locator ;
21
23
private anyOfButton : Locator ;
22
24
private isEntityKindButton : Locator ;
23
25
private addRuleButton : Locator = this . page . getByRole ( "button" , {
24
26
name : "Add rule" ,
25
27
} ) ;
28
+ private addNestedConditionButton : Locator = this . page . getByRole ( "button" , {
29
+ name : "Add Nested Condition" ,
30
+ } ) ;
31
+
26
32
private hasLabel : Locator ;
27
33
private label : Locator ;
28
34
@@ -32,6 +38,9 @@ export class RbacPo extends PageObject {
32
38
backstage : "Backstage" ,
33
39
rhdhqe : "rhdh-qe" ,
34
40
} ;
41
+ public selectPluginsCombobox : Locator = this . page . getByRole ( "combobox" , {
42
+ name : "Select plugins" ,
43
+ } ) ;
35
44
36
45
private stringForRegexUsersAndGroups = (
37
46
numUsers : number ,
@@ -96,7 +105,9 @@ export class RbacPo extends PageObject {
96
105
this . notButton = this . page . getByRole ( "button" , { name : "Not" } ) ;
97
106
this . rulesSideBar = this . page . getByTestId ( "rules-sidebar" ) ;
98
107
this . hasSpecButton = this . page . getByText ( "HAS_SPEC" ) ;
108
+ this . hasAnnotationButton = this . page . getByText ( "HAS_ANNOTATION" ) ;
99
109
this . key = this . page . getByLabel ( "key *" ) ;
110
+ this . annotation = this . page . getByLabel ( "annotation *" ) ;
100
111
this . saveConditions = this . page . getByTestId ( "save-conditions" ) ;
101
112
this . anyOfButton = this . page . getByRole ( "button" , { name : "AnyOf" } ) ;
102
113
this . isEntityKindButton = this . page . getByText ( "IS_ENTITY_KIND" ) ;
@@ -156,7 +167,11 @@ export class RbacPo extends PageObject {
156
167
}
157
168
158
169
public async selectOption (
159
- option : "catalog" | "catalog-entity" | "scaffolder" | "scaffolder-template" ,
170
+ option :
171
+ | "catalog"
172
+ | "catalog.entity.read"
173
+ | "scaffolder"
174
+ | "scaffolder-template.read" ,
160
175
) {
161
176
const optionSelector = `li[role="option"]:has-text("${ option } ")` ;
162
177
await this . page . waitForSelector ( optionSelector ) ;
@@ -177,6 +192,18 @@ export class RbacPo extends PageObject {
177
192
await this . usersAndGroupsField . fill ( userOrRole ) ;
178
193
}
179
194
195
+ async selectPermissionCheckbox ( name : string ) {
196
+ this . page . getByRole ( "cell" , { name : name } ) . getByRole ( "checkbox" ) . click ( ) ;
197
+ }
198
+
199
+ async pluginRuleCount ( number : string ) {
200
+ expect (
201
+ this . page
202
+ . locator ( 'span[class*="MuiBadge-badge"]' )
203
+ . filter ( { hasText : number } ) ,
204
+ ) . toBeVisible ( ) ;
205
+ }
206
+
180
207
async createRole (
181
208
name : string ,
182
209
usersAndGroups : string [ ] ,
@@ -187,9 +214,9 @@ export class RbacPo extends PageObject {
187
214
await this . uiHelper . verifyHeading ( "Create role" ) ;
188
215
await this . roleName . fill ( name ) ;
189
216
await this . uiHelper . clickButton ( "Next" ) ;
217
+ await this . usersAndGroupsField . click ( ) ;
190
218
191
219
for ( const userOrRole of usersAndGroups ) {
192
- await this . addUsersAndGroups ( userOrRole ) ;
193
220
await this . page . click ( this . selectMember ( userOrRole ) ) ;
194
221
}
195
222
@@ -204,19 +231,18 @@ export class RbacPo extends PageObject {
204
231
) ;
205
232
206
233
await this . next ( ) ;
207
- await this . page . click ( this . selectPermissionPolicyPlugin ( 0 ) ) ;
234
+ await this . selectPluginsCombobox . click ( ) ;
208
235
await this . selectOption ( "catalog" ) ;
209
- await this . page . click ( this . selectPermissionPolicyPermission ( 0 ) ) ;
210
- await this . selectOption ( "catalog-entity" ) ;
236
+ await this . page . getByText ( "Select..." ) . click ( ) ;
211
237
212
238
if ( permissionPolicyType === "none" ) {
213
- await this . page . uncheck ( this . selectPolicy ( 0 , 1 , "Delete" ) ) ;
239
+ await this . selectPermissionCheckbox ( "catalog.entity.delete" ) ;
214
240
await this . next ( ) ;
215
241
await this . uiHelper . verifyHeading ( "Review and create" ) ;
216
242
await this . uiHelper . verifyText (
217
243
this . regexpLongUsersAndGroups ( numUsers - numGroups , numGroups ) ,
218
244
) ;
219
- await this . verifyPermissionPoliciesHeader ( 2 ) ;
245
+ await this . verifyPermissionPoliciesHeader ( 1 ) ;
220
246
await this . create ( ) ;
221
247
await this . page
222
248
. locator ( SEARCH_OBJECTS_COMPONENTS . ariaLabelSearch )
@@ -227,7 +253,11 @@ export class RbacPo extends PageObject {
227
253
await this . uiHelper . verifyHeading ( "All roles (1)" ) ;
228
254
} else if ( permissionPolicyType === "anyOf" ) {
229
255
// Scenario 2: Permission policies using AnyOf
230
- await this . configureAccess . click ( ) ;
256
+ await this . selectPermissionCheckbox ( "catalog.entity.read" ) ;
257
+ await this . page
258
+ . getByRole ( "row" , { name : "catalog.entity.read" } )
259
+ . getByLabel ( "remove" )
260
+ . click ( ) ;
231
261
await this . anyOfButton . click ( ) ;
232
262
await this . clickOpenSidebar ( ) ;
233
263
await this . isEntityKindButton . click ( ) ;
@@ -236,33 +266,43 @@ export class RbacPo extends PageObject {
236
266
. getByPlaceholder ( "string, string" )
237
267
. fill ( "component,template" ) ;
238
268
await this . addRuleButton . click ( ) ;
239
- await this . page . getByLabel ( "Open" ) . nth ( 3 ) . click ( ) ;
269
+ await this . page . getByLabel ( "Open" ) . nth ( 2 ) . click ( ) ;
240
270
await this . hasSpecButton . click ( ) ;
241
271
await this . key . click ( ) ;
242
272
await this . key . fill ( "lifecycle" ) ;
243
273
await this . key . press ( "Tab" ) ;
244
274
await this . key . fill ( "experimental" ) ;
245
275
await this . addRuleButton . click ( ) ;
246
- await this . page . getByLabel ( "Open" ) . nth ( 4 ) . click ( ) ;
276
+ await this . page . getByLabel ( "Open" ) . nth ( 3 ) . click ( ) ;
247
277
await this . hasLabel . click ( ) ;
248
278
await this . label . click ( ) ;
249
279
await this . label . fill ( "partner" ) ;
280
+ // Add nested condition
281
+ await this . addNestedConditionButton . click ( ) ;
282
+ await this . page . getByLabel ( "Open" ) . nth ( 4 ) . click ( ) ;
283
+ await this . hasAnnotationButton . click ( ) ;
284
+ await this . annotation . click ( ) ;
285
+ await this . annotation . fill ( "test" ) ;
250
286
await this . saveConditions . click ( ) ;
251
- await this . uiHelper . verifyText ( "Configure access (3 rules) ") ;
287
+ await this . pluginRuleCount ( "4 ") ;
252
288
await this . next ( ) ;
253
289
await this . uiHelper . verifyHeading ( "Review and create" ) ;
254
290
await this . uiHelper . verifyText (
255
291
this . regexpLongUsersAndGroups ( numUsers - numGroups , numGroups ) ,
256
292
) ;
257
293
await this . verifyPermissionPoliciesHeader ( 1 ) ;
258
- await this . uiHelper . verifyText ( "3 rules" ) ;
294
+ await this . uiHelper . verifyText ( "4 rules" ) ;
259
295
await this . uiHelper . clickButton ( "Create" ) ;
260
296
await this . uiHelper . verifyText (
261
297
`Role role:default/${ name } created successfully` ,
262
298
) ;
263
299
} else if ( permissionPolicyType === "not" ) {
264
300
// Scenario 3: Permission policies using Not
265
- await this . configureAccess . click ( ) ;
301
+ await this . selectPermissionCheckbox ( "catalog.entity.read" ) ;
302
+ await this . page
303
+ . getByRole ( "row" , { name : "catalog.entity.read" } )
304
+ . getByLabel ( "remove" )
305
+ . click ( ) ;
266
306
await this . notButton . click ( ) ;
267
307
await this . clickOpenSidebar ( ) ;
268
308
await this . hasSpecButton . click ( ) ;
@@ -271,7 +311,7 @@ export class RbacPo extends PageObject {
271
311
await this . key . press ( "Tab" ) ;
272
312
await this . key . fill ( "experimental" ) ;
273
313
await this . saveConditions . click ( ) ;
274
- await this . uiHelper . verifyText ( "Configure access (1 rule) ") ;
314
+ await this . pluginRuleCount ( "1 ") ;
275
315
await this . next ( ) ;
276
316
await this . uiHelper . verifyHeading ( "Review and create" ) ;
277
317
await this . verifyPermissionPoliciesHeader ( 1 ) ;
0 commit comments