Skip to content

Commit 33b83c8

Browse files
committed
WIP
1 parent 5f9562e commit 33b83c8

File tree

9 files changed

+604
-471
lines changed

9 files changed

+604
-471
lines changed
Lines changed: 160 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { expect, test } from "@playwright/test";
2-
import { v4 as uuidv4 } from "uuid";
3-
import adminClient from "../utils/AdminClient.ts";
2+
import { toClientScopes } from "../../src/client-scopes/routes/ClientScopes.tsx";
3+
import { createTestBed } from "../support/testbed.ts";
44
import { assertSaveButtonIsDisabled, clickSaveButton } from "../utils/form.ts";
55
import { login } from "../utils/login.ts";
66
import { assertNotificationMessage } from "../utils/masthead.ts";
77
import { confirmModal } from "../utils/modal.ts";
8-
import { goToClientScopes } from "../utils/sidebar.ts";
98
import {
109
assertRowExists,
1110
assertTableRowsLength,
@@ -42,193 +41,211 @@ const FilterProtocol = {
4241
OpenID: "OpenID Connect",
4342
};
4443

45-
test.describe.serial("Client Scopes test", () => {
46-
const clientScopeName = "client-scope-test";
47-
const itemId = `client-scope-test-${uuidv4()}`;
48-
const clientScope = {
49-
name: clientScopeName,
50-
description: "",
51-
protocol: "openid-connect",
52-
attributes: {
53-
"include.in.token.scope": "true",
54-
"display.on.consent.screen": "true",
55-
"gui.order": "1",
56-
"consent.screen.text": "",
57-
},
58-
};
44+
test.describe("Client scope filtering", () => {
5945
const placeHolder = "Search for client scope";
6046
const tableName = "Client scopes";
47+
const clientScopeName = "client-scope-test";
6148

62-
test.beforeAll(async () => {
49+
test("filters client scope by name", async ({ page }) => {
50+
const clientScopes = [];
6351
for (let i = 0; i < 5; i++) {
64-
clientScope.name = clientScopeName + i;
65-
await adminClient.createClientScope(clientScope);
52+
clientScopes.push({
53+
name: `${clientScopeName}${i}`,
54+
protocol: "openid-connect",
55+
});
6656
}
57+
58+
await using testBed = await createTestBed({
59+
clientScopes,
60+
});
61+
62+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
63+
64+
const itemName = `${clientScopeName}0`;
65+
await searchItem(page, placeHolder, itemName);
66+
await assertRowExists(page, itemName);
67+
await assertTableRowsLength(page, tableName, 1);
6768
});
6869

69-
test.afterAll(async () => {
70-
for (let i = 0; i < 5; i++) {
71-
if (await adminClient.existsClientScope(clientScopeName + i)) {
72-
await adminClient.deleteClientScope(clientScopeName + i);
73-
}
74-
}
70+
test("filters items by assigned type Default", async ({ page }) => {
71+
await using testBed = await createTestBed();
72+
73+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
74+
75+
await selectClientScopeFilter(page, "Assigned type");
76+
await selectSecondaryFilterAssignedType(page, FilterAssignedType.Default);
77+
78+
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
79+
80+
expect(assignedTypes).toContain(FilterAssignedType.Default);
81+
expect(assignedTypes).not.toContain(FilterAssignedType.Optional);
82+
expect(assignedTypes).not.toContain(FilterAssignedType.None);
7583
});
7684

77-
test.describe.serial("Client Scope filter list items", () => {
78-
test.beforeEach(async ({ page }) => {
79-
await login(page);
80-
await goToClientScopes(page);
81-
});
85+
test("filters items by assigned type Optional", async ({ page }) => {
86+
await using testBed = await createTestBed();
8287

83-
test("should filter item by name", async ({ page }) => {
84-
const itemName = clientScopeName + "0";
85-
await searchItem(page, placeHolder, itemName);
86-
await assertRowExists(page, itemName);
87-
await assertTableRowsLength(page, tableName, 1);
88-
});
88+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
8989

90-
test("should filter items by Assigned type Default", async ({ page }) => {
91-
await selectClientScopeFilter(page, "Assigned type");
92-
await selectSecondaryFilterAssignedType(page, FilterAssignedType.Default);
90+
await selectClientScopeFilter(page, "Assigned type");
91+
await selectSecondaryFilterAssignedType(page, FilterAssignedType.Optional);
9392

94-
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
93+
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
9594

96-
expect(assignedTypes).toContain(FilterAssignedType.Default);
97-
expect(assignedTypes).not.toContain(FilterAssignedType.Optional);
98-
expect(assignedTypes).not.toContain(FilterAssignedType.None);
99-
});
95+
expect(assignedTypes).not.toContain(FilterAssignedType.Default);
96+
expect(assignedTypes).not.toContain(FilterAssignedType.None);
97+
expect(assignedTypes).toContain(FilterAssignedType.Optional);
98+
});
10099

101-
test("should filter items by Assigned type Optional", async ({ page }) => {
102-
await selectClientScopeFilter(page, "Assigned type");
103-
await selectSecondaryFilterAssignedType(
104-
page,
105-
FilterAssignedType.Optional,
106-
);
100+
test("filters items by assigned type All", async ({ page }) => {
101+
await using testBed = await createTestBed();
107102

108-
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
103+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
109104

110-
expect(assignedTypes).not.toContain(FilterAssignedType.Default);
111-
expect(assignedTypes).not.toContain(FilterAssignedType.None);
112-
expect(assignedTypes).toContain(FilterAssignedType.Optional);
113-
});
105+
await selectClientScopeFilter(page, "Assigned type");
106+
await selectSecondaryFilterAssignedType(page, FilterAssignedType.AllTypes);
114107

115-
test("should filter items by Assigned type All", async ({ page }) => {
116-
await selectClientScopeFilter(page, "Assigned type");
117-
await selectSecondaryFilterAssignedType(
118-
page,
119-
FilterAssignedType.AllTypes,
120-
);
108+
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
121109

122-
const assignedTypes = await getTableAssignedTypeColumn(page, tableName);
110+
expect(assignedTypes).toContain(FilterAssignedType.Default);
111+
expect(assignedTypes).toContain(FilterAssignedType.Optional);
112+
// Note: Default realm may not have client scopes with "None" type
113+
});
123114

124-
expect(assignedTypes).toContain(FilterAssignedType.Default);
125-
expect(assignedTypes).toContain(FilterAssignedType.Optional);
126-
expect(assignedTypes).toContain(FilterAssignedType.None);
127-
});
115+
test("filters items by protocol OpenID", async ({ page }) => {
116+
await using testBed = await createTestBed();
128117

129-
test("should filter items by Protocol OpenID", async ({ page }) => {
130-
await selectClientScopeFilter(page, "Protocol");
131-
await selectSecondaryFilterProtocol(page, FilterProtocol.OpenID);
118+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
132119

133-
const protocols = await getTableProtocolColumn(page, tableName);
120+
await selectClientScopeFilter(page, "Protocol");
121+
await selectSecondaryFilterProtocol(page, FilterProtocol.OpenID);
134122

135-
expect(protocols).not.toContain(FilterProtocol.SAML);
136-
expect(protocols).toContain(FilterProtocol.OpenID);
137-
});
123+
const protocols = await getTableProtocolColumn(page, tableName);
138124

139-
test("should filter items by Protocol SAML", async ({ page }) => {
140-
await selectClientScopeFilter(page, "Protocol");
141-
await selectSecondaryFilterProtocol(page, FilterProtocol.SAML);
125+
expect(protocols).not.toContain(FilterProtocol.SAML);
126+
expect(protocols).toContain(FilterProtocol.OpenID);
127+
});
142128

143-
const protocols = await getTableProtocolColumn(page, tableName);
129+
test("filters items by protocol SAML", async ({ page }) => {
130+
await using testBed = await createTestBed();
144131

145-
expect(protocols).toContain(FilterProtocol.SAML);
146-
expect(protocols).not.toContain(FilterProtocol.OpenID);
147-
});
132+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
148133

149-
test("should show items on next page are more than 11", async ({
150-
page,
151-
}) => {
152-
await clickNextPageButton(page);
153-
const rows = await getTableData(page, tableName);
154-
expect(rows.length).toBeGreaterThan(1);
155-
});
134+
await selectClientScopeFilter(page, "Protocol");
135+
await selectSecondaryFilterProtocol(page, FilterProtocol.SAML);
136+
137+
const protocols = await getTableProtocolColumn(page, tableName);
138+
139+
expect(protocols).toContain(FilterProtocol.SAML);
140+
expect(protocols).not.toContain(FilterProtocol.OpenID);
156141
});
157142

158-
test.describe.serial("Client Scope modify list items", () => {
159-
test.beforeEach(async ({ page }) => {
160-
await login(page);
161-
await goToClientScopes(page);
162-
});
143+
test("shows items on next page", async ({ page }) => {
144+
await using testBed = await createTestBed();
163145

164-
test("should modify selected item type to Default", async ({ page }) => {
165-
const itemName = clientScopeName + "0";
166-
await clickSelectRow(page, tableName, itemName);
167-
await selectChangeType(page, FilterAssignedType.Default);
168-
await assertNotificationMessage(page, "Scope mapping updated");
146+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
169147

170-
const rows = await getTableData(page, tableName);
171-
const itemRow = rows.find((r) => r.includes(itemName));
172-
expect(itemRow).toContain(FilterAssignedType.Default);
173-
});
148+
await clickNextPageButton(page);
149+
const rows = await getTableData(page, tableName);
150+
expect(rows.length).toBeGreaterThan(1);
174151
});
152+
});
175153

176-
test.describe.serial("Client Scope creation", () => {
177-
test.beforeEach(async ({ page }) => {
178-
await login(page);
179-
await goToClientScopes(page);
154+
test.describe("Client scope operations", () => {
155+
const tableName = "Client scopes";
156+
const clientScopeName = "client-scope-test";
157+
158+
test("modifies selected item type to Default", async ({ page }) => {
159+
const clientScopes = [];
160+
for (let i = 0; i < 5; i++) {
161+
clientScopes.push({
162+
name: `${clientScopeName}${i}`,
163+
protocol: "openid-connect",
164+
});
165+
}
166+
167+
await using testBed = await createTestBed({
168+
clientScopes,
180169
});
181170

182-
test("should fail creating client scope", async ({ page }) => {
183-
await goToCreateItem(page);
184-
await assertSaveButtonIsDisabled(page);
171+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
172+
173+
const itemName = `${clientScopeName}0`;
174+
await clickSelectRow(page, tableName, itemName);
175+
await selectChangeType(page, FilterAssignedType.Default);
176+
await assertNotificationMessage(page, "Scope mapping updated");
185177

186-
await fillClientScopeData(page, "address");
187-
await page.getByTestId("save").click();
178+
const rows = await getTableData(page, tableName);
179+
const itemRow = rows.find((r) => r.includes(itemName));
180+
expect(itemRow).toContain(FilterAssignedType.Default);
181+
});
182+
});
188183

189-
await assertNotificationMessage(
190-
page,
191-
"Could not create client scope: 'Client Scope address already exists'",
192-
);
184+
test.describe("Client scope creation", () => {
185+
const placeHolder = "Search for client scope";
193186

194-
await fillClientScopeData(page, "");
195-
await expect(page.getByTestId("save")).toBeDisabled();
196-
});
187+
test("fails to create client scope with existing name", async ({ page }) => {
188+
await using testBed = await createTestBed();
197189

198-
test("hides 'consent text' field when 'display consent' switch is disabled", async ({
190+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
191+
192+
await goToCreateItem(page);
193+
await assertSaveButtonIsDisabled(page);
194+
195+
await fillClientScopeData(page, "address");
196+
await page.getByTestId("save").click();
197+
198+
await assertNotificationMessage(
199199
page,
200-
}) => {
201-
await goToCreateItem(page);
200+
"Could not create client scope: 'Client Scope address already exists'",
201+
);
202202

203-
await assertSwitchDisplayOnConsentScreenIsChecked(page);
204-
await assertConsentInputIsVisible(page);
203+
await fillClientScopeData(page, "");
204+
await expect(page.getByTestId("save")).toBeDisabled();
205+
});
205206

206-
await switchOffDisplayOnConsentScreen(page);
207+
test("hides consent text field when display consent switch is disabled", async ({
208+
page,
209+
}) => {
210+
await using testBed = await createTestBed();
207211

208-
await assertConsentInputIsVisible(page, true);
209-
});
212+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
210213

211-
test("Client scope CRUD test", async ({ page }) => {
212-
await assertRowExists(page, itemId, false);
213-
await goToCreateItem(page);
214+
await goToCreateItem(page);
214215

215-
await fillClientScopeData(page, itemId);
216-
await clickSaveButton(page);
216+
await assertSwitchDisplayOnConsentScreenIsChecked(page);
217+
await assertConsentInputIsVisible(page);
217218

218-
await assertNotificationMessage(page, "Client scope created");
219+
await switchOffDisplayOnConsentScreen(page);
219220

220-
await goToClientScopes(page);
221+
await assertConsentInputIsVisible(page, true);
222+
});
221223

222-
await searchItem(page, placeHolder, itemId);
223-
await assertRowExists(page, itemId);
224-
await clickRowKebabItem(page, itemId, "Delete");
224+
test("creates and deletes a client scope", async ({ page }) => {
225+
await using testBed = await createTestBed();
225226

226-
await confirmModal(page);
227-
await assertNotificationMessage(
228-
page,
229-
"The client scope has been deleted",
230-
);
231-
await assertRowExists(page, itemId, false);
232-
});
227+
await login(page, { to: toClientScopes({ realm: testBed.realm }) });
228+
229+
const itemId = "test-client-scope";
230+
await assertRowExists(page, itemId, false);
231+
await goToCreateItem(page);
232+
233+
await fillClientScopeData(page, itemId);
234+
await clickSaveButton(page);
235+
236+
await assertNotificationMessage(page, "Client scope created");
237+
238+
await page
239+
.getByLabel("Breadcrumb")
240+
.getByRole("link", { name: "Client scopes" })
241+
.click();
242+
243+
await searchItem(page, placeHolder, itemId);
244+
await assertRowExists(page, itemId);
245+
await clickRowKebabItem(page, itemId, "Delete");
246+
247+
await confirmModal(page);
248+
await assertNotificationMessage(page, "The client scope has been deleted");
249+
await assertRowExists(page, itemId, false);
233250
});
234251
});

0 commit comments

Comments
 (0)