Skip to content

Commit e15f0c0

Browse files
committed
test(e2e): align policy-workbench spec with RealPolicyWorkbench labels
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 6a325fa commit e15f0c0

1 file changed

Lines changed: 67 additions & 58 deletions

File tree

playwright/e2e/policy-workbench-system-default-persistence.spec.ts

Lines changed: 67 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,23 @@ import { ensureUserExists } from '../support/nc-provisioning'
1010

1111
test.describe.configure({ retries: 0, timeout: 45000 })
1212

13+
const openPolicyButtonName = /Manage this setting|Open policy|Open setting policy/i
14+
const createRuleButtonName = /Create rule|Create policy rule/i
15+
const saveRuleButtonName = /Save rule changes|Save changes|Save policy rule changes/i
16+
const createDefaultButtonName = /Create default rule|Create global default rule/i
17+
const editGlobalDefaultButtonName = /Edit default|Edit global default/i
18+
const resetGlobalDefaultButtonName = /Reset default|Reset global default/i
19+
const editGroupRuleButtonName = /Edit group rule|Edit group override/i
20+
const deleteGroupRuleButtonName = /Delete group rule|Delete group override/i
21+
const editUserRuleButtonName = /Edit user rule|Edit user override/i
22+
const deleteUserRuleButtonName = /Delete user rule|Delete user override/i
23+
const groupSectionName = /Group rules|Group overrides/i
24+
const userSectionName = /User rules|User overrides/i
25+
const globalEditorHeadingName = /Default rule|Global default rule/i
26+
const inheritValueMessage = /Lower layers must inherit this rule|Lower layers must inherit this value/i
27+
1328
async function openSigningOrderDialog(page: Page) {
14-
const manageButtons = page.getByRole('button', { name: 'Manage this setting' })
29+
const manageButtons = page.getByRole('button', { name: openPolicyButtonName })
1530
await expect(manageButtons.first()).toBeVisible({ timeout: 20000 })
1631
await manageButtons.first().click()
1732
await expect(page.getByLabel('Signing order')).toBeVisible()
@@ -51,65 +66,59 @@ async function setAllowOverride(dialog: Locator, enabled: boolean): Promise<bool
5166
return true
5267
}
5368

54-
async function setDefaultSigningOrder(dialog: Locator, enabled: boolean): Promise<boolean> {
55-
const defaultSigningOrderSwitch = dialog.getByLabel('Set default signing order').first()
56-
const label = dialog.getByText('Set default signing order').first()
69+
async function setSigningFlow(dialog: Locator, flow: 'parallel' | 'ordered_numeric'): Promise<boolean> {
70+
const label = flow === 'parallel'
71+
? /Simultaneous \(Parallel\)/i
72+
: /Sequential/i
73+
const flowRadio = dialog.getByRole('radio', { name: label }).first()
5774

58-
if (!(await defaultSigningOrderSwitch.count())) {
75+
if (!(await flowRadio.count())) {
5976
return false
6077
}
6178

62-
if (enabled) {
63-
if (!(await defaultSigningOrderSwitch.isChecked())) {
64-
await label.click()
65-
}
66-
await expect(defaultSigningOrderSwitch).toBeChecked()
67-
return true
68-
}
69-
70-
if (await defaultSigningOrderSwitch.isChecked()) {
71-
await label.click()
79+
if (!(await flowRadio.isChecked())) {
80+
await flowRadio.check({ force: true })
7281
}
73-
await expect(defaultSigningOrderSwitch).not.toBeChecked()
82+
await expect(flowRadio).toBeChecked()
7483
return true
7584
}
7685

7786
async function submitRule(dialog: Locator) {
7887
await waitForEditorIdle(dialog)
7988

80-
const createButton = dialog.getByRole('button', { name: 'Create rule' }).first()
89+
const createButton = dialog.getByRole('button', { name: createRuleButtonName }).first()
8190
if (await createButton.isVisible().catch(() => false)) {
8291
await expect(createButton).toBeEnabled({ timeout: 8000 })
8392
await createButton.click()
8493
await waitForEditorIdle(dialog)
8594
return
8695
}
8796

88-
const saveButton = dialog.getByRole('button', { name: 'Save rule changes' }).first()
97+
const saveButton = dialog.getByRole('button', { name: saveRuleButtonName }).first()
8998
await expect(saveButton).toBeVisible({ timeout: 8000 })
9099
await expect(saveButton).toBeEnabled({ timeout: 8000 })
91100
await saveButton.click()
92101
await waitForEditorIdle(dialog)
93102
}
94103

95104
async function openGlobalRuleEditor(dialog: Locator, globalSection: Locator) {
96-
const createDefaultButton = globalSection.getByRole('button', { name: 'Create default rule' }).first()
105+
const createDefaultButton = globalSection.getByRole('button', { name: createDefaultButtonName }).first()
97106
if (await createDefaultButton.isVisible().catch(() => false)) {
98107
await createDefaultButton.click()
99108
return
100109
}
101110

102-
await globalSection.getByRole('button', { name: 'Edit default' }).first().click()
111+
await globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).first().click()
103112
}
104113

105114
async function expectGlobalBaselineState(globalSection: Locator) {
106-
const createDefaultButton = globalSection.getByRole('button', { name: 'Create default rule' }).first()
115+
const createDefaultButton = globalSection.getByRole('button', { name: createDefaultButtonName }).first()
107116
if (await createDefaultButton.isVisible().catch(() => false)) {
108117
await expect(createDefaultButton).toBeVisible()
109118
return
110119
}
111120

112-
await expect(globalSection.getByRole('button', { name: 'Edit default' }).first()).toBeVisible()
121+
await expect(globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).first()).toBeVisible()
113122
}
114123

115124
async function chooseTarget(dialog: Locator, ariaLabel: 'Target groups' | 'Target users', optionText: string) {
@@ -190,15 +199,15 @@ async function removeAllRulesByAction(
190199

191200
async function ensureBaselineRulesForAdminTarget(page: Page, dialog: Locator) {
192201
const globalSection = dialog.getByRole('region', { name: 'Global default rules' })
193-
const groupSection = dialog.getByRole('region', { name: 'Group rules' })
194-
const userSection = dialog.getByRole('region', { name: 'User rules' })
202+
const groupSection = dialog.getByRole('region', { name: groupSectionName })
203+
const userSection = dialog.getByRole('region', { name: userSectionName })
195204

196-
await removeAllRulesByAction(page, dialog, userSection, 'Delete user rule')
197-
await removeAllRulesByAction(page, dialog, groupSection, 'Delete group rule')
205+
await removeAllRulesByAction(page, dialog, userSection, 'Delete user override')
206+
await removeAllRulesByAction(page, dialog, groupSection, 'Delete group override')
198207

199208
// Normalize global default into a known baseline where lower layers may override.
200-
if (await globalSection.getByRole('button', { name: 'Edit default' }).count()) {
201-
await globalSection.getByRole('button', { name: 'Edit default' }).click()
209+
if (await globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).count()) {
210+
await globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).click()
202211
if (await setAllowOverride(dialog, true)) {
203212
await submitRule(dialog)
204213
}
@@ -213,7 +222,7 @@ test('system default persists allow-override changes across edit cycles', async
213222
)
214223

215224
await page.goto('./settings/admin/libresign')
216-
await expect(page.getByRole('button', { name: 'Manage this setting' }).first()).toBeVisible()
225+
await expect(page.getByRole('button', { name: openPolicyButtonName }).first()).toBeVisible()
217226

218227
await openSigningOrderDialog(page)
219228

@@ -222,29 +231,29 @@ test('system default persists allow-override changes across edit cycles', async
222231

223232
const globalSection = signingOrderDialog.getByRole('region', { name: 'Global default rules' })
224233
await openGlobalRuleEditor(signingOrderDialog, globalSection)
225-
await expect(signingOrderDialog.getByRole('heading', { name: 'Default rule' })).toBeVisible()
234+
await expect(signingOrderDialog.getByRole('heading', { name: globalEditorHeadingName }).last()).toBeVisible()
226235
await setAllowOverride(signingOrderDialog, true)
227236
await submitRule(signingOrderDialog)
228237

229-
await signingOrderDialog.getByRole('button', { name: 'Edit default' }).click()
238+
await signingOrderDialog.getByRole('button', { name: editGlobalDefaultButtonName }).click()
230239
await setAllowOverride(signingOrderDialog, true)
231240

232241
await setAllowOverride(signingOrderDialog, false)
233242
const saveChangesResponsePromise = page.waitForResponse((response) => {
234243
return response.request().method() === 'POST'
235244
&& response.url().includes('/apps/libresign/api/v1/policies/system/signature_flow')
236245
})
237-
await signingOrderDialog.getByRole('button', { name: 'Save rule changes' }).click()
246+
await signingOrderDialog.getByRole('button', { name: saveRuleButtonName }).first().click()
238247
const saveChangesResponse = await saveChangesResponsePromise
239248
expect(saveChangesResponse.status(), 'Expected Save changes request to succeed').toBe(200)
240249

241-
await signingOrderDialog.getByRole('button', { name: 'Edit default' }).click()
250+
await signingOrderDialog.getByRole('button', { name: editGlobalDefaultButtonName }).click()
242251
await setAllowOverride(signingOrderDialog, false)
243252

244-
await expect(signingOrderDialog.getByText('Lower layers must inherit this rule')).toBeVisible()
253+
await expect(signingOrderDialog.getByText(inheritValueMessage)).toBeVisible()
245254

246255
// Reset should restore inherited baseline behavior.
247-
await removeRuleWithConfirmation(page, signingOrderDialog, globalSection, 'Reset default')
256+
await removeRuleWithConfirmation(page, signingOrderDialog, globalSection, 'Reset global default')
248257
await expectGlobalBaselineState(globalSection)
249258
})
250259

@@ -264,65 +273,65 @@ test('admin can create, edit, and delete global, group, and user rules from the
264273

265274
const dialog = await getSigningOrderDialog(page)
266275
const globalSection = dialog.getByRole('region', { name: 'Global default rules' })
267-
const groupSection = dialog.getByRole('region', { name: 'Group rules' })
268-
const userSection = dialog.getByRole('region', { name: 'User rules' })
276+
const groupSection = dialog.getByRole('region', { name: groupSectionName })
277+
const userSection = dialog.getByRole('region', { name: userSectionName })
269278

270279
await ensureBaselineRulesForAdminTarget(page, dialog)
271280

272281
// Global rule: edit
273282
await openGlobalRuleEditor(dialog, globalSection)
274-
await setDefaultSigningOrder(dialog, true)
283+
expect(await setSigningFlow(dialog, 'ordered_numeric'), 'Expected signing-flow radios in global editor').toBe(true)
275284
await setAllowOverride(dialog, true)
276285
await submitRule(dialog)
277-
await expect(globalSection.getByRole('button', { name: 'Edit default' })).toBeVisible()
286+
await expect(globalSection.getByRole('button', { name: editGlobalDefaultButtonName })).toBeVisible()
278287

279288
// Global rule: enforce inheritance
280-
await globalSection.getByRole('button', { name: 'Edit default' }).click()
289+
await globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).click()
281290
expect(await setAllowOverride(dialog, false), 'Expected global allow-override switch in editor').toBe(true)
282291
await submitRule(dialog)
283-
await expect(globalSection.getByRole('button', { name: 'Edit default' })).toBeVisible()
292+
await expect(globalSection.getByRole('button', { name: editGlobalDefaultButtonName })).toBeVisible()
284293

285-
await globalSection.getByRole('button', { name: 'Edit default' }).click()
294+
await globalSection.getByRole('button', { name: editGlobalDefaultButtonName }).click()
286295
expect(await setAllowOverride(dialog, true), 'Expected global allow-override switch in editor').toBe(true)
287296
await submitRule(dialog)
288-
await expect(globalSection.getByRole('button', { name: 'Edit default' })).toBeVisible()
297+
await expect(globalSection.getByRole('button', { name: editGlobalDefaultButtonName })).toBeVisible()
289298

290299
// Group rule: create
291300
await dialog.getByRole('button', { name: 'New group override' }).first().click()
292301
await chooseTarget(dialog, 'Target groups', 'admin')
293-
await setDefaultSigningOrder(dialog, true)
302+
expect(await setSigningFlow(dialog, 'ordered_numeric'), 'Expected signing-flow radios in group editor').toBe(true)
294303
await setAllowOverride(dialog, true)
295304
await submitRule(dialog)
296-
await expect(groupSection.getByRole('button', { name: 'Edit group rule' }).first()).toBeVisible()
305+
await expect(groupSection.getByRole('button', { name: editGroupRuleButtonName }).first()).toBeVisible()
297306

298307
// Group rule: edit
299-
await groupSection.getByRole('button', { name: 'Edit group rule' }).first().click()
300-
expect(await setDefaultSigningOrder(dialog, false), 'Expected default-signing-order switch in group editor').toBe(true)
308+
await groupSection.getByRole('button', { name: editGroupRuleButtonName }).first().click()
309+
expect(await setSigningFlow(dialog, 'parallel'), 'Expected signing-flow radios in group editor').toBe(true)
301310
await submitRule(dialog)
302-
await expect(groupSection.getByRole('button', { name: 'Edit group rule' }).first()).toBeVisible()
311+
await expect(groupSection.getByRole('button', { name: editGroupRuleButtonName }).first()).toBeVisible()
303312

304313
// User rule: create
305314
await dialog.getByRole('button', { name: 'New user override' }).first().click()
306315
await chooseTarget(dialog, 'Target users', userTarget)
307-
await setDefaultSigningOrder(dialog, true)
316+
expect(await setSigningFlow(dialog, 'ordered_numeric'), 'Expected signing-flow radios in user editor').toBe(true)
308317
await submitRule(dialog)
309-
await expect(userSection.getByRole('button', { name: 'Edit user rule' }).first()).toBeVisible()
318+
await expect(userSection.getByRole('button', { name: editUserRuleButtonName }).first()).toBeVisible()
310319

311320
// User rule: edit
312-
await clickSectionAction(userSection, 'Edit user rule')
313-
expect(await setDefaultSigningOrder(dialog, false), 'Expected default-signing-order switch in user editor').toBe(true)
321+
await clickSectionAction(userSection, 'Edit user override')
322+
expect(await setSigningFlow(dialog, 'parallel'), 'Expected signing-flow radios in user editor').toBe(true)
314323
await submitRule(dialog)
315-
await expect(userSection.getByRole('button', { name: 'Edit user rule' }).first()).toBeVisible()
324+
await expect(userSection.getByRole('button', { name: editUserRuleButtonName }).first()).toBeVisible()
316325

317326
// User rule: delete
318-
await removeAllRulesByAction(page, dialog, userSection, 'Delete user rule')
319-
await expect(userSection.getByRole('button', { name: 'Delete user rule' })).toHaveCount(0)
327+
await removeAllRulesByAction(page, dialog, userSection, 'Delete user override')
328+
await expect(userSection.getByRole('button', { name: deleteUserRuleButtonName })).toHaveCount(0)
320329

321330
// Group rule: delete
322-
await removeAllRulesByAction(page, dialog, groupSection, 'Delete group rule')
323-
await expect(groupSection.getByRole('button', { name: 'Delete group rule' })).toHaveCount(0)
331+
await removeAllRulesByAction(page, dialog, groupSection, 'Delete group override')
332+
await expect(groupSection.getByRole('button', { name: deleteGroupRuleButtonName })).toHaveCount(0)
324333

325334
// Global rule: reset to inherited baseline
326-
await removeRuleWithConfirmation(page, dialog, globalSection, 'Reset default')
335+
await removeRuleWithConfirmation(page, dialog, globalSection, 'Reset global default')
327336
await expectGlobalBaselineState(globalSection)
328337
})

0 commit comments

Comments
 (0)