V14 QA Added user groups acceptance tests (#17344)

* Added tests for userGroup

* Clean up

* Updated userGroup tests

* Updated tests

* Updated tests

* Cleane up

* Cleaned up

* Bumped versions

* Run user tests

* Cleaned up

* Added method for checking if the document tree is empty

* Bumped version

* Reverted
This commit is contained in:
Andreas Zerbst
2024-10-28 11:11:28 +01:00
committed by GitHub
parent 41da2e2cf3
commit b1d9085c83
8 changed files with 772 additions and 37 deletions

View File

@@ -1,29 +1,21 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from '@playwright/test';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
const rootDocumentTypeName = 'RootDocumentType';
const childDocumentTypeOneName = 'ChildDocumentTypeOne';
const childDocumentTypeTwoName = 'ChildDocumentTypeTwo';
let childDocumentTypeOneId = null;
let rootDocumentTypeId = null;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
let rootDocumentId = null;
let childDocumentOneId = null;
const rootDocumentName = 'RootDocument';
const childDocumentOneName = 'ChildDocumentOne';
const childDocumentTwoName = 'ChildDocumentTwo';
let userGroupId = null;
let rootDocumentId = null;
let childDocumentOneId = null;
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.documentType.ensureNameNotExists(rootDocumentTypeName);
@@ -59,10 +51,10 @@ test('can see root start node and children', async ({umbracoApi, umbracoUi}) =>
await umbracoUi.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(rootDocumentName);
await umbracoUi.content.isContentInTreeVisible(rootDocumentName);
await umbracoUi.content.clickCaretButtonForContentName(rootDocumentName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentTwoName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentTwoName);
});
test('can see parent of start node but not access it', async ({umbracoApi, umbracoUi}) => {
@@ -75,12 +67,12 @@ test('can see parent of start node but not access it', async ({umbracoApi, umbra
await umbracoUi.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(rootDocumentName);
await umbracoUi.content.isContentInTreeVisible(rootDocumentName);
await umbracoUi.content.goToContentWithName(rootDocumentName);
await umbracoUi.content.isTextWithMessageVisible('The authenticated user do not have access to this resource');
await umbracoUi.content.clickCaretButtonForContentName(rootDocumentName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentTwoName, false);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentTwoName, false);
});
test('can not see any content when no start nodes specified', async ({umbracoApi, umbracoUi}) => {
@@ -93,5 +85,5 @@ test('can not see any content when no start nodes specified', async ({umbracoApi
await umbracoUi.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(rootDocumentName, false);
await umbracoUi.content.isDocumentTreeEmpty();
});

View File

@@ -1,16 +1,11 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
let rootFolderId = null;
let childFolderOneId = null;
const rootFolderName = 'RootFolder';

View File

@@ -1,14 +1,9 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
let userGroupId = null;
test.beforeEach(async ({umbracoApi}) => {

View File

@@ -0,0 +1,92 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
const rootDocumentTypeName = 'RootDocumentType';
const childDocumentTypeOneName = 'ChildDocumentTypeOne';
const childDocumentTypeTwoName = 'ChildDocumentTypeTwo';
let childDocumentTypeOneId = null;
let childDocumentTypeTwoId = null;
let rootDocumentTypeId = null;
const rootDocumentName = 'RootDocument';
const childDocumentOneName = 'ChildDocumentOne';
const childDocumentTwoName = 'ChildDocumentTwo';
let rootDocumentId = null;
let childDocumentOneId = null;
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.documentType.ensureNameNotExists(rootDocumentTypeName);
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeOneName);
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeTwoName);
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
childDocumentTypeOneId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeOneName);
childDocumentTypeTwoId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeTwoName);
rootDocumentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTwoChildNodes(rootDocumentTypeName, childDocumentTypeOneId, childDocumentTypeTwoId);
rootDocumentId = await umbracoApi.document.createDefaultDocument(rootDocumentName, rootDocumentTypeId);
childDocumentOneId = await umbracoApi.document.createDefaultDocumentWithParent(childDocumentOneName, childDocumentTypeOneId, rootDocumentId);
await umbracoApi.document.createDefaultDocumentWithParent(childDocumentTwoName, childDocumentTypeTwoId, rootDocumentId);
});
test.afterEach(async ({umbracoApi}) => {
// Ensure we are logged in to admin
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
await umbracoApi.documentType.ensureNameNotExists(rootDocumentTypeName);
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeOneName);
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeTwoName);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
});
test('can see root start node and children', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createUserGroupWithDocumentStartNode(userGroupName, rootDocumentId);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentInTreeVisible(rootDocumentName);
await umbracoUi.content.clickCaretButtonForContentName(rootDocumentName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentTwoName);
});
test('can see parent of start node but not access it', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createUserGroupWithDocumentStartNode(userGroupName, childDocumentOneId);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentInTreeVisible(rootDocumentName);
await umbracoUi.content.goToContentWithName(rootDocumentName);
await umbracoUi.content.isTextWithMessageVisible('The authenticated user do not have access to this resource');
await umbracoUi.content.clickCaretButtonForContentName(rootDocumentName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentInTreeVisible(rootDocumentName, childDocumentTwoName, false);
});
test('can not see any content when no start nodes specified', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isDocumentTreeEmpty();
});

View File

@@ -0,0 +1,135 @@
import {AliasHelper, ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
const englishDocumentName = 'EnglishDocument';
const danishDocumentName = 'DanishDocument';
const vietnameseDocumentName = 'VietnameseDocument';
let documentTypeId = null;
const dataTypeName = 'Textstring';
let dataTypeId = null;
const englishIsoCode = 'en-US';
const danishIsoCode = 'da';
const vietnameseIsoCode = 'vi';
const englishLanguageName = 'English (United States)';
const danishLanguageName = 'Danish';
const vietnameseLanguageName = 'Vietnamese';
const cultureVariants = [
{
isoCode: englishIsoCode,
name: englishDocumentName,
value: 'EnglishValue',
},
{
isoCode: danishIsoCode,
name: danishDocumentName,
value: 'DanishValue',
},
{
isoCode: vietnameseIsoCode,
name: vietnameseDocumentName,
value: 'VietnameseValue',
}
];
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
await umbracoApi.language.ensureIsoCodeNotExists(danishIsoCode);
await umbracoApi.language.ensureIsoCodeNotExists(vietnameseIsoCode);
await umbracoApi.language.createDanishLanguage();
await umbracoApi.language.createVietnameseLanguage();
const dataType = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeId = dataType.id;
documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeId, 'TestGroup', true);
await umbracoApi.document.createDocumentWithMultipleVariants(documentName, documentTypeId, AliasHelper.toAlias(dataTypeName), cultureVariants);
});
test.afterEach(async ({umbracoApi}) => {
// Ensure we are logged in to admin
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
await umbracoApi.language.ensureIsoCodeNotExists(danishIsoCode);
await umbracoApi.language.ensureIsoCodeNotExists(vietnameseIsoCode);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can rename content with language set in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedContentName = 'UpdatedContentName';
userGroupId = await umbracoApi.userGroup.createUserGroupWithLanguageAndContentSection(userGroupName, englishIsoCode);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], false, [], false, englishIsoCode);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
await umbracoUi.content.goToContentWithName(englishDocumentName);
// Act
await umbracoUi.content.isDocumentReadOnly(false);
await umbracoUi.content.enterContentName(updatedContentName);
await umbracoUi.content.clickSaveButton();
await umbracoUi.content.clickSaveAndCloseButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.content.isContentInTreeVisible(updatedContentName);
});
test('can not rename content with language not set in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createUserGroupWithLanguageAndContentSection(userGroupName, englishIsoCode);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], false, [], false, englishIsoCode);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
await umbracoUi.content.doesDocumentSectionHaveLanguageSelected(englishLanguageName);
await umbracoUi.content.changeDocumentSectionLanguage(danishLanguageName);
// Act
await umbracoUi.content.goToContentWithName(danishDocumentName);
// Assert
await umbracoUi.content.isDocumentReadOnly();
await umbracoUi.content.isDocumentNameInputEditable(false);
});
test('can update content property with language set in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createUserGroupWithLanguageAndContentSection(userGroupName, englishIsoCode);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
await umbracoUi.content.doesDocumentSectionHaveLanguageSelected(englishLanguageName);
// Act
await umbracoUi.content.goToContentWithName(englishDocumentName);
// Assert
await umbracoUi.content.isDocumentPropertyEditable(dataTypeName, true);
});
test('can not update content property with language not set in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createUserGroupWithLanguageAndContentSection(userGroupName, englishIsoCode);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
await umbracoUi.content.doesDocumentSectionHaveLanguageSelected(englishLanguageName);
await umbracoUi.content.changeDocumentSectionLanguage(vietnameseLanguageName);
// Act
await umbracoUi.content.goToContentWithName(vietnameseDocumentName);
// Assert
await umbracoUi.content.isDocumentPropertyEditable(dataTypeName, false);
});

View File

@@ -0,0 +1,51 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = ConstantHelper.testUserCredentials;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
});
test.afterEach(async ({umbracoApi}) => {
// Ensure we are logged in to admin
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
});
test('can go to section defined in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
// Act
await umbracoUi.goToBackOffice();
// Assert
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.content);
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
});
test('can not see section that is not defined in userGroup', async ({umbracoApi, umbracoUi}) => {
// Arrange
userGroupId = await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
// Act
await umbracoUi.goToBackOffice();
// Assert
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.content);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.media, false);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.settings, false);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.users, false);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.members, false);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.dictionary, false);
await umbracoUi.content.isSectionWithNameVisible(ConstantHelper.sections.packages, false);
});

View File

@@ -424,7 +424,7 @@ test('can disable a user', async ({umbracoApi, umbracoUi}) => {
await umbracoUi.user.clickConfirmDisableButton();
// Assert
await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.userDisabled);
expect(umbracoUi.user.isUserDisabledTextVisible()).toBeTruthy();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.state).toBe(disabledStatus);
@@ -444,7 +444,8 @@ test('can enable a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
await umbracoUi.user.clickConfirmEnableButton();
// Assert
await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.userDisabled);
// TODO: Unskip when it shows userEnabled/userInactive instead of userDisabled
// await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.userEnabled);
await umbracoUi.user.isUserActiveTextVisible();
// The state of the user is not enabled. The reason for this is that the user has not logged in, resulting in the state Inactive.
const userData = await umbracoApi.user.getByName(nameOfTheUser);
@@ -480,7 +481,7 @@ test('can remove an avatar from a user', async ({umbracoApi, umbracoUi}) => {
await umbracoUi.user.clickRemovePhotoButton();
// Assert
await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.user.doesSuccessNotificationHaveText(NotificationConstantHelper.success.avatarDeleted);
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.avatarUrls).toHaveLength(0);
});

View File

@@ -0,0 +1,474 @@
import {ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const allPermissions = {
uiPermission:
['Browse Node',
'Create Document Blueprint',
'Delete',
'Create',
'Notifications',
'Publish',
'Set permissions',
'Unpublish',
'Update',
'Duplicate',
'Move to',
'Sort children',
'Culture and Hostnames',
'Public Access',
'Rollback'],
verbPermission: [
'Umb.Document.Read',
'Umb.Document.CreateBlueprint',
'Umb.Document.Delete',
'Umb.Document.Create',
'Umb.Document.Notifications',
'Umb.Document.Publish',
'Umb.Document.Permissions',
'Umb.Document.Unpublish',
'Umb.Document.Update',
'Umb.Document.Duplicate',
'Umb.Document.Move',
'Umb.Document.Sort',
'Umb.Document.CultureAndHostnames',
'Umb.Document.PublicAccess',
'Umb.Document.Rollback'
]
};
const englishLanguage = 'English (United States)';
const userGroupName = 'TestUserGroupName';
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
await umbracoUi.goToBackOffice();
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.users);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
});
test('can create an empty user group', async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickCreateUserGroupButton();
await umbracoUi.userGroup.enterUserGroupName(userGroupName);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
expect(await umbracoApi.userGroup.doesNameExist(userGroupName)).toBeTruthy();
// Checks if the user group was created in the UI as well
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.isUserGroupWithNameVisible(userGroupName);
})
test('can rename a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
const oldUserGroupName = 'OldUserGroupName';
await umbracoApi.userGroup.ensureNameNotExists(oldUserGroupName);
await umbracoApi.userGroup.createEmptyUserGroup(oldUserGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(oldUserGroupName);
// Act
await umbracoUi.userGroup.enterUserGroupName(userGroupName);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesNameExist(userGroupName)).toBeTruthy();
// Checks if the user group was created in the UI as well
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.isUserGroupWithNameVisible(userGroupName);
await umbracoUi.userGroup.isUserGroupWithNameVisible(oldUserGroupName, false);
});
test('can update a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickPermissionsByName([allPermissions.uiPermission[0]]);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.doesUserGroupHavePermission(allPermissions.uiPermission[0]);
const userGroupData = await umbracoApi.userGroup.getByName(userGroupName);
expect(userGroupData.fallbackPermissions).toContain(allPermissions.verbPermission[0]);
});
test('can delete a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickDeleteButton();
await umbracoUi.userGroup.clickConfirmToDeleteButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.deleted);
expect(await umbracoApi.userGroup.doesNameExist(userGroupName)).toBeFalsy();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.isUserGroupWithNameVisible(userGroupName, false);
});
test('can add a section to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.addSectionWithNameToUserGroup('Content');
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content');
})
test('can add multiple sections to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.addSectionWithNameToUserGroup('Media');
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content');
await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Media');
});
test('can remove a section from a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickRemoveSectionFromUserGroup('Content');
await umbracoUi.userGroup.clickConfirmRemoveButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content', false);
const userGroupData = await umbracoApi.userGroup.getByName(userGroupName);
expect(userGroupData.sections).toEqual([]);
});
test('can add a language to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.addLanguageToUserGroup(englishLanguage);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.doesUserGroupContainLanguage(englishLanguage);
expect(await umbracoApi.userGroup.doesUserGroupContainLanguage(userGroupName, 'en-US')).toBeTruthy();
})
test('can enable all languages for a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickAllowAccessToAllLanguages();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainAccessToAllLanguages(userGroupName)).toBeTruthy();
})
test('can add multiple languages to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createUserGroupWithLanguage(userGroupName, 'en-US');
const danishLanguage = 'Danish';
await umbracoApi.language.ensureNameNotExists(danishLanguage);
await umbracoApi.language.createDanishLanguage();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.addLanguageToUserGroup(danishLanguage);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.doesUserGroupContainLanguage(englishLanguage);
await umbracoUi.userGroup.doesUserGroupContainLanguage(danishLanguage);
expect(await umbracoApi.userGroup.doesUserGroupContainLanguage(userGroupName, 'en-US')).toBeTruthy();
expect(await umbracoApi.userGroup.doesUserGroupContainLanguage(userGroupName, 'da')).toBeTruthy();
// Clean
await umbracoApi.language.ensureNameNotExists(danishLanguage);
})
test('can remove language from a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createUserGroupWithLanguage(userGroupName, 'en-US');
expect(await umbracoApi.userGroup.doesUserGroupContainLanguage(userGroupName, 'en-US')).toBeTruthy();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickRemoveLanguageFromUserGroup(englishLanguage);
await umbracoUi.userGroup.clickConfirmRemoveButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.doesUserGroupContainLanguage(englishLanguage, false);
expect(await umbracoApi.userGroup.doesUserGroupContainLanguage(userGroupName, 'en-US')).toBeFalsy();
})
test('can add a content start node to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickChooseContentStartNodeButton();
await umbracoUi.userGroup.clickLabelWithName(documentName);
await umbracoUi.userGroup.clickChooseContainerButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainContentStartNodeId(userGroupName, documentId)).toBeTruthy();
// Clean
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can remove a content start node from a user group ', async ({umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoApi.userGroup.createUserGroupWithDocumentStartNode(userGroupName, documentId);
expect(await umbracoApi.userGroup.doesUserGroupContainContentStartNodeId(userGroupName, documentId)).toBeTruthy();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickRemoveContentStartNodeFromUserGroup(documentName);
await umbracoUi.userGroup.clickConfirmRemoveButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainContentStartNodeId(userGroupName, documentId)).toBeFalsy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentTypeName);
});
test('can enable access to all content from a user group ', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickAllowAccessToAllDocuments();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainDocumentRootAccess(userGroupName)).toBeTruthy();
});
test('can add a media start node to a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
const mediaName = 'TestMedia';
await umbracoApi.media.ensureNameNotExists(mediaName);
const mediaId = await umbracoApi.media.createDefaultMediaFile(mediaName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickChooseMediaStartNodeButton();
await umbracoUi.userGroup.clickMediaCardWithName(mediaName);
await umbracoUi.userGroup.clickSubmitButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainMediaStartNodeId(userGroupName, mediaId)).toBeTruthy();
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
});
test('can remove a media start node from a user group ', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaName = 'TestMedia';
await umbracoApi.media.ensureNameNotExists(mediaName);
const mediaId = await umbracoApi.media.createDefaultMediaFile(mediaName);
await umbracoApi.userGroup.createUserGroupWithMediaStartNode(userGroupName, mediaId);
expect(await umbracoApi.userGroup.doesUserGroupContainMediaStartNodeId(userGroupName, mediaId)).toBeTruthy();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickRemoveMediaStartNodeFromUserGroup(mediaName);
await umbracoUi.userGroup.clickConfirmRemoveButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainMediaStartNodeId(userGroupName, mediaId)).toBeFalsy();
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
});
test('can enable access to all media in a user group ', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickAllowAccessToAllMedia();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainMediaRootAccess(userGroupName)).toBeTruthy();
});
test('can enable all permissions for a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
// Act
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
await umbracoUi.userGroup.clickPermissionsByName(allPermissions.uiPermission);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(allPermissions.uiPermission);
const userGroupData = await umbracoApi.userGroup.getByName(userGroupName);
expect(userGroupData.fallbackPermissions).toEqual(allPermissions.verbPermission);
});
test('can add granular permission to a specific document for a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickAddGranularPermission();
await umbracoUi.userGroup.clickLabelWithName(documentName);
await umbracoUi.userGroup.clickGranularPermissionsByName([allPermissions.uiPermission[0]]);
await umbracoUi.userGroup.clickConfirmButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainGranularPermissionsForDocument(userGroupName, documentId, [allPermissions.verbPermission[0]])).toBeTruthy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentTypeName);
});
test('can add all granular permissions to a specific document for a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoApi.userGroup.createEmptyUserGroup(userGroupName);
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickAddGranularPermission();
await umbracoUi.userGroup.clickLabelWithName(documentName);
await umbracoUi.userGroup.clickGranularPermissionsByName(allPermissions.uiPermission);
await umbracoUi.userGroup.clickConfirmButton();
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
await umbracoUi.reloadPage();
await umbracoUi.userGroup.clickGranularPermissionWithName(documentName);
await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(allPermissions.uiPermission);
expect(await umbracoApi.userGroup.doesUserGroupContainGranularPermissionsForDocument(userGroupName, documentId, allPermissions.verbPermission)).toBeTruthy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentTypeName);
});
test('can remove granular permission to a specific document for a user group', async ({umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoApi.userGroup.createUserGroupWithPermissionsForSpecificDocumentWithBrowseNode(userGroupName, documentId);
expect(await umbracoApi.userGroup.doesUserGroupContainGranularPermissionsForDocument(userGroupName, documentId, [allPermissions.verbPermission[0]])).toBeTruthy();
await umbracoUi.userGroup.clickUserGroupsTabButton();
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);
// Act
await umbracoUi.userGroup.clickRemoveGranularPermissionWithName(documentName);
await umbracoUi.userGroup.clickSaveButton();
// Assert
await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved);
expect(await umbracoApi.userGroup.doesUserGroupContainGranularPermissionsForDocument(userGroupName, documentId, [allPermissions.verbPermission[0]])).toBeFalsy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentTypeName);
});