Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2729a5dca1 | ||
|
|
26370e1318 | ||
|
|
2e6f194be2 | ||
|
|
97f07f8832 | ||
|
|
0dcb73b76c | ||
|
|
e6d72d8daf | ||
|
|
3f06805bb3 | ||
|
|
949cb00d0f | ||
|
|
61dfe4dd68 | ||
|
|
90fdfac135 | ||
|
|
01a6215c8a |
@@ -23,6 +23,9 @@ export class UserGroupUiHelper extends UiBaseLocators {
|
||||
private readonly documentPermissionsGroups: Locator;
|
||||
private readonly elementPermissionsGroups: Locator;
|
||||
private readonly elementFolderPermissionsGroups: Locator;
|
||||
private readonly workspaceUsersSection: Locator;
|
||||
private readonly chooseUserButton: Locator;
|
||||
private readonly workspaceUserItemRefs: Locator;
|
||||
|
||||
constructor(page: Page) {
|
||||
super(page);
|
||||
@@ -46,6 +49,9 @@ export class UserGroupUiHelper extends UiBaseLocators {
|
||||
this.documentPermissionsGroups = page.locator('umb-user-group-entity-type-permission-groups uui-box').filter({hasText: 'Document permissions'});
|
||||
this.elementPermissionsGroups = page.locator('umb-user-group-entity-type-permission-groups uui-box').filter({hasText: 'Element permissions'});
|
||||
this.elementFolderPermissionsGroups = page.locator('umb-user-group-entity-type-permission-groups uui-box').filter({hasText: 'Element Folder permissions'});
|
||||
this.workspaceUsersSection = page.locator('umb-user-group-workspace-users');
|
||||
this.chooseUserButton = this.workspaceUsersSection.locator('#btn-add');
|
||||
this.workspaceUserItemRefs = this.workspaceUsersSection.locator('umb-entity-item-ref');
|
||||
}
|
||||
|
||||
async clickUserGroupsButton() {
|
||||
@@ -265,4 +271,41 @@ export class UserGroupUiHelper extends UiBaseLocators {
|
||||
await expect(permissionItemLocator.locator('#setting small')).toHaveText(description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Workspace users section (Manage Users From Group)
|
||||
async clickChooseUserButton() {
|
||||
await this.click(this.chooseUserButton);
|
||||
}
|
||||
|
||||
async clickRemoveButtonForUserWithName(userName: string) {
|
||||
await this.click(this.workspaceUserItemRefs.filter({hasText: userName}).getByLabel('Remove'));
|
||||
}
|
||||
|
||||
async isUserVisibleInUserGroup(userName: string, isVisible = true) {
|
||||
await this.isVisible(this.workspaceUserItemRefs.filter({hasText: userName}), isVisible);
|
||||
}
|
||||
|
||||
async getUsersInGroupCount() {
|
||||
await this.waitForVisible(this.workspaceUsersSection);
|
||||
return await this.workspaceUserItemRefs.count();
|
||||
}
|
||||
|
||||
async clickUserCardWithName(userName: string) {
|
||||
await this.click(this.page.locator('uui-card-user', {hasText: userName}));
|
||||
}
|
||||
|
||||
async clickChooseModalButtonAndWaitForGroupUsersUpdate() {
|
||||
return await this.waitForResponseAfterExecutingPromise(ConstantHelper.apiEndpoints.userGroup, this.clickChooseModalButton(), ConstantHelper.statusCodes.ok);
|
||||
}
|
||||
|
||||
async clickConfirmRemoveButtonAndWaitForGroupUsersUpdate() {
|
||||
return await this.waitForResponseAfterExecutingPromise(ConstantHelper.apiEndpoints.userGroup, this.clickConfirmRemoveButton(), ConstantHelper.statusCodes.ok);
|
||||
}
|
||||
|
||||
async clickSaveButtonAndWaitForUserGroupWithUsersToBeCreated() {
|
||||
return await Promise.all([
|
||||
this.page.waitForResponse((resp) => resp.url().includes(ConstantHelper.apiEndpoints.userGroup) && resp.status() === ConstantHelper.statusCodes.ok),
|
||||
this.clickSaveButtonAndWaitForUserGroupToBeCreated(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
+223
@@ -0,0 +1,223 @@
|
||||
import {ConstantHelper, test} from '@umbraco/acceptance-test-helpers';
|
||||
import {expect} from '@playwright/test';
|
||||
|
||||
const userGroupName = 'TestUserGroup';
|
||||
const writersUserGroupName = 'Writers';
|
||||
const userA = {name: 'Manage Users User A', email: 'manageusersa@acceptance.test'};
|
||||
const userB = {name: 'Manage Users User B', email: 'manageusersb@acceptance.test'};
|
||||
const userC = {name: 'Manage Users User C', email: 'manageusersc@acceptance.test'};
|
||||
|
||||
test.beforeEach(async ({umbracoApi, umbracoUi}) => {
|
||||
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
|
||||
await umbracoApi.user.ensureNameNotExists(userA.name);
|
||||
await umbracoApi.user.ensureNameNotExists(userB.name);
|
||||
await umbracoApi.user.ensureNameNotExists(userC.name);
|
||||
await umbracoUi.goToBackOffice();
|
||||
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.users);
|
||||
});
|
||||
|
||||
test.afterEach(async ({umbracoApi}) => {
|
||||
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
|
||||
await umbracoApi.user.ensureNameNotExists(userA.name);
|
||||
await umbracoApi.user.ensureNameNotExists(userB.name);
|
||||
await umbracoApi.user.ensureNameNotExists(userC.name);
|
||||
});
|
||||
|
||||
test('can view users in a user group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [userGroupId]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [userGroupId]);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Assert
|
||||
expect(await umbracoUi.userGroup.getUsersInGroupCount()).toBe(2);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userB.name);
|
||||
});
|
||||
|
||||
test('cannot see any users in an empty user group', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Assert
|
||||
expect(await umbracoUi.userGroup.getUsersInGroupCount()).toBe(0);
|
||||
});
|
||||
|
||||
test('can add a user to a user group from the workspace', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [writersUserGroup.id]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
});
|
||||
|
||||
test('can add multiple users to a user group at once', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [writersUserGroup.id]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [writersUserGroup.id]);
|
||||
await umbracoApi.user.createDefaultUser(userC.name, userC.email, [writersUserGroup.id]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userB.name);
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userC.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userB.name);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userC.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userB.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userC.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
});
|
||||
|
||||
test('can add a new user via the picker without removing existing users', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [userGroupId]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [userGroupId]);
|
||||
await umbracoApi.user.createDefaultUser(userC.name, userC.email, [writersUserGroup.id]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userC.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userB.name);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userC.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [userGroupId])).toBeTruthy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userB.name, [userGroupId])).toBeTruthy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userC.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
});
|
||||
|
||||
test('can remove a user from a user group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [userGroupId]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [userGroupId]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickRemoveButtonForUserWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickConfirmRemoveButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name, false);
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userB.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [userGroupId])).toBeFalsy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userB.name, [userGroupId])).toBeTruthy();
|
||||
});
|
||||
|
||||
test('can remove all users from a user group', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [userGroupId]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [userGroupId]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickRemoveButtonForUserWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickConfirmRemoveButtonAndWaitForGroupUsersUpdate();
|
||||
await umbracoUi.userGroup.clickRemoveButtonForUserWithName(userB.name);
|
||||
await umbracoUi.userGroup.clickConfirmRemoveButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
expect(await umbracoUi.userGroup.getUsersInGroupCount()).toBe(0);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [userGroupId])).toBeFalsy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userB.name, [userGroupId])).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can add and then remove the same user in the same session', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [writersUserGroup.id]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButtonAndWaitForGroupUsersUpdate();
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
await umbracoUi.userGroup.clickRemoveButtonForUserWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickConfirmRemoveButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Assert
|
||||
expect(await umbracoUi.userGroup.getUsersInGroupCount()).toBe(0);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [userGroupId])).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can see user updates are persisted after navigating away from and returning to the user group', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const userGroupId = await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [writersUserGroup.id]);
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButtonAndWaitForGroupUsersUpdate();
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
|
||||
|
||||
// Assert
|
||||
await umbracoUi.userGroup.isUserVisibleInUserGroup(userA.name);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
});
|
||||
|
||||
test('can add users while creating a new user group', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const writersUserGroup = await umbracoApi.userGroup.getByName(writersUserGroupName);
|
||||
await umbracoApi.user.createDefaultUser(userA.name, userA.email, [writersUserGroup.id]);
|
||||
await umbracoApi.user.createDefaultUser(userB.name, userB.email, [writersUserGroup.id]);
|
||||
|
||||
// Act
|
||||
await umbracoUi.userGroup.clickUserGroupsButton();
|
||||
await umbracoUi.userGroup.clickCreateLink();
|
||||
await umbracoUi.userGroup.enterUserGroupName(userGroupName);
|
||||
await umbracoUi.userGroup.clickChooseUserButton();
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userA.name);
|
||||
await umbracoUi.userGroup.clickUserCardWithName(userB.name);
|
||||
await umbracoUi.userGroup.clickChooseModalButton();
|
||||
const [, userGroupId] = await umbracoUi.userGroup.clickSaveButtonAndWaitForUserGroupWithUsersToBeCreated();
|
||||
|
||||
// Assert
|
||||
expect(await umbracoApi.userGroup.doesExist(userGroupId)).toBe(true);
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userA.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
expect(await umbracoApi.user.doesUserContainUserGroupIds(userB.name, [writersUserGroup.id, userGroupId])).toBeTruthy();
|
||||
});
|
||||
Reference in New Issue
Block a user