* Added tests for notification emails for content * Bumped version * Updated tests for notification permission in content * Added appsettings.json for smtp tests * Added smtp test project * Updated nightly E2E test pipeline yaml file to run smtp project in the pipeline * Fixed command to run smtp4dev in Docker * Fixed pipeline * Only run smtp tests on Linux * Debugged * Debugging * Added step to stop smtp4dev container * Debugging * Updated port * Reverted tests * Added more tests for notification emails * Formatted code
681 lines
35 KiB
TypeScript
681 lines
35 KiB
TypeScript
import {ConstantHelper, NotificationConstantHelper, test} from "@umbraco/playwright-testhelpers";
|
|
import {expect} from "@playwright/test";
|
|
|
|
// Document Type
|
|
const rootDocumentTypeName = 'RootDocumentType';
|
|
const childDocumentTypeOneName = 'ChildDocumentTypeOne';
|
|
const childDocumentTypeTwoName = 'ChildDocumentTypeTwo';
|
|
let childDocumentTypeId = null;
|
|
let rootDocumentTypeId = null;
|
|
|
|
// Document
|
|
const rootDocumentName = 'RootDocument';
|
|
const childDocumentOneName = 'ChildDocumentOne';
|
|
const childDocumentTwoName = 'SecondChildDocument';
|
|
let rootDocumentId = null;
|
|
|
|
// Data Type
|
|
const dataTypeName = 'Textstring';
|
|
let dataTypeId = null;
|
|
const documentText = 'This is test document text';
|
|
|
|
// Document Blueprint
|
|
const testDocumentName = 'TestDocument';
|
|
const documentBlueprintName = 'TestBlueprintName';
|
|
|
|
// User
|
|
const testUser = ConstantHelper.testUserCredentials;
|
|
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
|
|
|
|
// User Group
|
|
const userGroupName = 'TestUserGroup';
|
|
let userGroupId = 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);
|
|
await umbracoApi.documentBlueprint.ensureNameNotExists(documentBlueprintName);
|
|
const dataType = await umbracoApi.dataType.getByName(dataTypeName);
|
|
dataTypeId = dataType.id;
|
|
childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeOneName);
|
|
rootDocumentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNodeAndDataType(rootDocumentTypeName, childDocumentTypeId, dataTypeName, dataTypeId);
|
|
rootDocumentId = await umbracoApi.document.createDocumentWithTextContent(rootDocumentName, rootDocumentTypeId, documentText, dataTypeName);
|
|
await umbracoApi.document.createDefaultDocumentWithParent(childDocumentOneName, childDocumentTypeId, 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);
|
|
await umbracoApi.documentBlueprint.ensureNameNotExists(documentBlueprintName);
|
|
});
|
|
|
|
test('can read content node with permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermission(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();
|
|
await umbracoUi.userGroup.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.goToContentWithName(rootDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesDocumentHaveName(rootDocumentName);
|
|
});
|
|
|
|
// Skip this test due to this issue: https://github.com/umbraco/Umbraco-CMS/issues/20505
|
|
test.skip('can not read content node with permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermission(userGroupName, false);
|
|
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);
|
|
|
|
// Act
|
|
await umbracoUi.content.goToContentWithName(rootDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesDocumentWorkspaceHaveText('Not found');
|
|
});
|
|
|
|
test('can create document blueprint with permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCreateDocumentBlueprintPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickCreateBlueprintActionMenuOption();
|
|
await umbracoUi.content.enterDocumentBlueprintName(documentBlueprintName);
|
|
await umbracoUi.content.clickSaveDocumentBlueprintButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.documentBlueprintCreated);
|
|
});
|
|
|
|
test('can not create document blueprint with permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCreateDocumentBlueprintPermission(userGroupName, false);
|
|
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.documentBlueprint.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can delete content with delete permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDeleteDocumentPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickTrashActionMenuOption();
|
|
await umbracoUi.content.clickConfirmTrashButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.waitForContentToBeTrashed();
|
|
await umbracoUi.content.isItemVisibleInRecycleBin(rootDocumentName);
|
|
});
|
|
|
|
test('can not delete content with delete permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDeleteDocumentPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can empty recycle bin with delete permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.moveToRecycleBin(rootDocumentId);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDeleteDocumentPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickRecycleBinButton();
|
|
await umbracoUi.waitForTimeout(700);
|
|
await umbracoUi.content.clickEmptyRecycleBinButton();
|
|
await umbracoUi.content.clickConfirmEmptyRecycleBinButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.waitForRecycleBinToBeEmptied();
|
|
await umbracoUi.content.isItemVisibleInRecycleBin(rootDocumentName, false, false);
|
|
});
|
|
|
|
test('can not empty recycle bin with delete permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.moveToRecycleBin(rootDocumentId);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDeleteDocumentPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForRecycleBinVisible(false);
|
|
});
|
|
|
|
test('can create content with create permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCreateDocumentPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuAtRoot();
|
|
await umbracoUi.content.clickCreateActionMenuOption();
|
|
await umbracoUi.content.chooseDocumentType(rootDocumentTypeName);
|
|
await umbracoUi.content.enterContentName(testDocumentName);
|
|
await umbracoUi.content.clickSaveButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.waitForContentToBeCreated();
|
|
expect(await umbracoApi.document.doesNameExist(testDocumentName)).toBeTruthy();
|
|
await umbracoUi.content.isDocumentReadOnly(true);
|
|
});
|
|
|
|
test('can not create content with create permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCreateDocumentPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can set up notifications with notification permission enabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const notificationActionIds = ['Umb.Document.Delete', 'Umb.Document.Publish'];
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithNotificationsPermission(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.content.goToSection(ConstantHelper.sections.content, false);
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickNotificationsActionMenuOption();
|
|
await umbracoUi.content.clickDocumentNotificationOptionWithName(notificationActionIds[0]);
|
|
await umbracoUi.content.clickDocumentNotificationOptionWithName(notificationActionIds[1]);
|
|
await umbracoUi.content.clickSaveModalButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.isSuccessNotificationVisible();
|
|
expect(await umbracoApi.document.doesNotificationExist(rootDocumentId, notificationActionIds[0])).toBeTruthy();
|
|
expect(await umbracoApi.document.doesNotificationExist(rootDocumentId, notificationActionIds[1])).toBeTruthy();
|
|
});
|
|
|
|
test('can not set up notifications with notification permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithNotificationsPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can publish content with publish permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithPublishPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickPublishActionMenuOption();
|
|
await umbracoUi.content.clickConfirmToPublishButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published);
|
|
expect(await umbracoApi.document.isDocumentPublished(rootDocumentId)).toBeTruthy();
|
|
});
|
|
|
|
test('can not publish content with publish permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithPublishPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
// Skip this as this function is removed from the front-end.
|
|
test.skip('can set permissions with set permissions permission enabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithSetPermissionsPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
// await umbracoUi.content.clickSetPermissionsButton();
|
|
|
|
// Assert
|
|
// await umbracoUi.content.doesDocumentPermissionsDialogExist();
|
|
});
|
|
|
|
// Skip this as this function is removed from the front-end.
|
|
test.skip('can not set permissions with set permissions permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithSetPermissionsPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can unpublish content with unpublish permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.publish(rootDocumentId);
|
|
expect(await umbracoApi.document.isDocumentPublished(rootDocumentId)).toBeTruthy();
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithUnpublishPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickUnpublishActionMenuOption();
|
|
await umbracoUi.content.clickConfirmToUnpublishButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.unpublished);
|
|
expect(await umbracoApi.document.isDocumentPublished(rootDocumentId)).toBeFalsy();
|
|
});
|
|
|
|
test('can not unpublish content with unpublish permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.publish(rootDocumentId);
|
|
expect(await umbracoApi.document.isDocumentPublished(rootDocumentId)).toBeTruthy();
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithUnpublishPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can update content with update permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.goToContentWithName(rootDocumentName);
|
|
await umbracoUi.content.isDocumentReadOnly(false);
|
|
await umbracoUi.content.enterContentName(testDocumentName);
|
|
await umbracoUi.content.clickSaveButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.isSuccessStateVisibleForSaveButton();
|
|
expect(await umbracoApi.document.doesNameExist(testDocumentName)).toBeTruthy();
|
|
expect(await umbracoApi.document.doesNameExist(rootDocumentName)).toBeFalsy();
|
|
});
|
|
|
|
test('can not update content with update permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
await umbracoUi.content.goToContentWithName(rootDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
await umbracoUi.content.isDocumentReadOnly(true);
|
|
});
|
|
|
|
test('can duplicate content with duplicate permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const duplicatedContentName = rootDocumentName + ' (1)';
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDuplicatePermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
// Duplicate to root
|
|
await umbracoUi.content.clickDuplicateToActionMenuOption();
|
|
await umbracoUi.content.clickLabelWithName('Content');
|
|
await umbracoUi.content.clickDuplicateButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.duplicated);
|
|
expect(await umbracoApi.document.doesNameExist(rootDocumentName)).toBeTruthy();
|
|
expect(await umbracoApi.document.doesNameExist(duplicatedContentName)).toBeTruthy();
|
|
await umbracoUi.content.isContentInTreeVisible(rootDocumentName);
|
|
await umbracoUi.content.isContentInTreeVisible(duplicatedContentName);
|
|
const rootContent = await umbracoApi.document.getByName(rootDocumentName);
|
|
const rootDuplicatedContent = await umbracoApi.document.getByName(duplicatedContentName);
|
|
expect(rootContent.values[0].value).toEqual(rootDuplicatedContent.values[0].value);
|
|
});
|
|
|
|
test('can not duplicate content with duplicate permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDuplicatePermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can move content with move to permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const moveToDocumentName = 'SecondRootDocument';
|
|
const moveToDocumentId = await umbracoApi.document.createDocumentWithTextContent(moveToDocumentName, rootDocumentTypeId, documentText, dataTypeName);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithMoveToPermission(userGroupName, true);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.openContentCaretButtonForName(rootDocumentName);
|
|
await umbracoUi.content.clickActionsMenuForContent(childDocumentOneName);
|
|
await umbracoUi.content.clickMoveToActionMenuOption();
|
|
await umbracoUi.content.moveToContentWithName([], moveToDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.moved);
|
|
await umbracoUi.content.clickActionsMenuForContent(moveToDocumentName);
|
|
await umbracoUi.content.clickReloadChildrenActionMenuOption();
|
|
await umbracoUi.content.isCaretButtonVisibleForContentName(moveToDocumentName, true);
|
|
await umbracoUi.content.openContentCaretButtonForName(moveToDocumentName);
|
|
await umbracoUi.content.isChildContentInTreeVisible(moveToDocumentName, childDocumentOneName, true);
|
|
await umbracoUi.content.isCaretButtonVisibleForContentName(rootDocumentName, false);
|
|
expect(await umbracoApi.document.getChildrenAmount(rootDocumentId)).toEqual(0);
|
|
expect(await umbracoApi.document.getChildrenAmount(moveToDocumentId)).toEqual(1);
|
|
});
|
|
|
|
test('can not move content with move to permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const moveToDocumentName = 'SecondRootDocument';
|
|
await umbracoApi.document.createDocumentWithTextContent(moveToDocumentName, rootDocumentTypeId, documentText, dataTypeName);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithMoveToPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
// Needs a better way to assert
|
|
test('can sort children with sort children permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.createDefaultDocumentWithParent(childDocumentTwoName, childDocumentTypeId, rootDocumentId);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithSortChildrenPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickSortChildrenActionMenuOption();
|
|
const childDocumentOneLocator = umbracoUi.content.getTextLocatorWithName(childDocumentOneName);
|
|
const childDocumentTwoLocator = umbracoUi.content.getTextLocatorWithName(childDocumentTwoName)
|
|
await umbracoUi.content.dragAndDrop(childDocumentTwoLocator, childDocumentOneLocator);
|
|
await umbracoUi.content.clickSortButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.openContentCaretButtonForName(rootDocumentName);
|
|
await umbracoUi.content.doesIndexDocumentInTreeContainName(rootDocumentName, childDocumentTwoName, 0);
|
|
await umbracoUi.content.doesIndexDocumentInTreeContainName(rootDocumentName, childDocumentOneName, 1);
|
|
});
|
|
|
|
test('can not sort children with sort children permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
await umbracoApi.document.createDefaultDocumentWithParent(childDocumentTwoName, childDocumentTypeId, rootDocumentId);
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithSortChildrenPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can set culture and hostnames with culture and hostnames permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const domainName = '/domain';
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCultureAndHostnamesPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickCultureAndHostnamesActionMenuOption();
|
|
await umbracoUi.content.clickAddNewDomainButton();
|
|
await umbracoUi.content.enterDomain(domainName);
|
|
await umbracoUi.content.clickSaveModalButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.waitForDomainToBeCreated();
|
|
const document = await umbracoApi.document.getByName(rootDocumentName);
|
|
const domains = await umbracoApi.document.getDomains(document.id);
|
|
expect(domains.domains[0].domainName).toEqual(domainName);
|
|
expect(domains.domains[0].isoCode).toEqual('en-US');
|
|
});
|
|
|
|
test('can not set culture and hostnames with culture and hostnames permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCultureAndHostnamesPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can set public access with public access permission enabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithPublicAccessPermission(userGroupName);
|
|
const testMemberGroup = 'TestMemberGroup';
|
|
await umbracoApi.memberGroup.ensureNameNotExists(testMemberGroup);
|
|
await umbracoApi.memberGroup.create(testMemberGroup)
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
await umbracoUi.content.clickPublicAccessActionMenuOption();
|
|
await umbracoUi.content.addGroupBasedPublicAccess(testMemberGroup, rootDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.publicAccessSettingCreated);
|
|
});
|
|
|
|
test('can not set public access with public access permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithPublicAccessPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can rollback content with rollback permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithRollbackPermission(userGroupName);
|
|
await umbracoApi.document.publish(rootDocumentId);
|
|
const updatedTextStringText = 'This is an updated textString text';
|
|
const content = await umbracoApi.document.get(rootDocumentId);
|
|
content.values[0].value = updatedTextStringText;
|
|
await umbracoApi.document.update(rootDocumentId, content);
|
|
await umbracoApi.document.publish(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.goToContentWithName(rootDocumentName);
|
|
await umbracoUi.content.doesDocumentPropertyHaveValue(dataTypeName, updatedTextStringText);
|
|
await umbracoUi.content.clickInfoTab();
|
|
await umbracoUi.content.clickRollbackButton();
|
|
await umbracoUi.waitForTimeout(700); // Wait for the rollback items to load
|
|
await umbracoUi.content.clickLatestRollBackItem();
|
|
await umbracoUi.content.clickRollbackContainerButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.clickContentTab();
|
|
await umbracoUi.content.doesDocumentPropertyHaveValue(dataTypeName, documentText);
|
|
});
|
|
|
|
test('can not rollback content with rollback permission disabled', async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithRollbackPermission(userGroupName, false);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isActionsMenuForNameVisible(rootDocumentName, false);
|
|
});
|
|
|
|
test('can not see delete button in content for userGroup with delete permission disabled and create permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithDeletePermissionAndCreatePermission(userGroupName, false, true);
|
|
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.content.goToSection(ConstantHelper.sections.content, false);
|
|
await umbracoUi.content.clickActionsMenuForContent(rootDocumentName);
|
|
|
|
// Assert
|
|
await umbracoUi.content.isPermissionInActionsMenuVisible('Delete…', false);
|
|
await umbracoUi.content.isPermissionInActionsMenuVisible('Create…', true);
|
|
});
|
|
|
|
test('can create and update content with permission enabled', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => {
|
|
// Arrange
|
|
const updatedDocumentName = testDocumentName + ' Updated';
|
|
userGroupId = await umbracoApi.userGroup.createUserGroupWithCreateAndUpdateDocumentPermission(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();
|
|
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
|
|
|
|
// Act
|
|
await umbracoUi.content.clickActionsMenuAtRoot();
|
|
await umbracoUi.content.clickCreateActionMenuOption();
|
|
await umbracoUi.content.chooseDocumentType(rootDocumentTypeName);
|
|
await umbracoUi.content.enterContentName(testDocumentName);
|
|
await umbracoUi.content.clickSaveButton();
|
|
|
|
// Assert
|
|
await umbracoUi.content.waitForContentToBeCreated();
|
|
expect(await umbracoApi.document.doesNameExist(testDocumentName)).toBeTruthy();
|
|
// Update the content
|
|
await umbracoUi.content.goToContentWithName(testDocumentName);
|
|
await umbracoUi.content.isDocumentReadOnly(false);
|
|
await umbracoUi.content.enterContentName(updatedDocumentName);
|
|
await umbracoUi.content.clickSaveButton();
|
|
await umbracoUi.content.isSuccessStateVisibleForSaveButton();
|
|
expect(await umbracoApi.document.doesNameExist(updatedDocumentName)).toBeTruthy();
|
|
await umbracoUi.content.doesDocumentHaveName(updatedDocumentName);
|
|
|
|
// Cleanup
|
|
await umbracoApi.document.ensureNameNotExists(updatedDocumentName);
|
|
});
|