V14 QA added user permission tests (#17226)

* Added test

* Small changes

* Added content start node tests

* Added media start node tests

* Cleaned up

* More updates

* Cleaned up

* Added wait

* Cleaned up

* Bumped helpers

* Updated to run user tests

* Fixed user tests

* Bumped helpers

* Added missing semicolon

* Fixes based on comments

* Run smoke tests
This commit is contained in:
Andreas Zerbst
2024-10-16 13:26:36 +02:00
committed by GitHub
parent 00563013b6
commit 2b3a91757d
4 changed files with 247 additions and 6 deletions

View File

@@ -0,0 +1,97 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from '@playwright/test';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const userGroupName = 'TestUserGroup';
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;
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);
const 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);
userGroupId = await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(userGroupName);
});
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
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [rootDocumentId]);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(rootDocumentName);
await umbracoUi.content.clickCaretButtonForContentName(rootDocumentName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentOneName);
await umbracoUi.content.isChildContentVisible(rootDocumentName, childDocumentTwoName);
});
test('can see parent of start node but not access it', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [childDocumentOneId]);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(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);
});
test('can not see any content when no start nodes specified', async ({umbracoApi, umbracoUi}) => {
// Arrange
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.user.goToSection(ConstantHelper.sections.content, false);
// Assert
await umbracoUi.content.isContentVisible(rootDocumentName, false);
});

View File

@@ -0,0 +1,88 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const userGroupName = 'TestUserGroup';
let userGroupId = null;
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
let rootFolderId = null;
let childFolderOneId = null;
const rootFolderName = 'RootFolder';
const childFolderOneName = 'ChildFolderOne';
const childFolderTwoName = 'ChildFolderTwo';
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
await umbracoApi.media.ensureNameNotExists(rootFolderName);
await umbracoApi.media.ensureNameNotExists(childFolderOneName);
await umbracoApi.media.ensureNameNotExists(childFolderTwoName);
rootFolderId = await umbracoApi.media.createDefaultMediaFolder(rootFolderName);
childFolderOneId = await umbracoApi.media.createDefaultMediaFolderAndParentId(childFolderOneName, rootFolderId);
await umbracoApi.media.createDefaultMediaFolderAndParentId(childFolderTwoName, rootFolderId);
userGroupId = await umbracoApi.userGroup.createUserGroupWithMediaSection(userGroupName);
});
test.afterEach(async ({umbracoApi}) => {
// Ensure we are logged in to admin
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
await umbracoApi.media.ensureNameNotExists(rootFolderName);
await umbracoApi.media.ensureNameNotExists(childFolderOneName);
await umbracoApi.media.ensureNameNotExists(childFolderTwoName);
});
test('can see root media start node and children', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], false, [rootFolderId]);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.user.goToSection(ConstantHelper.sections.media, false);
// Assert
await umbracoUi.media.isMediaVisible(rootFolderName);
await umbracoUi.media.clickCaretButtonForMediaName(rootFolderName);
await umbracoUi.media.isChildMediaVisible(rootFolderName, childFolderOneName);
await umbracoUi.media.isChildMediaVisible(rootFolderName, childFolderTwoName);
});
test('can see parent of start node but not access it', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], false, [childFolderOneId]);
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
await umbracoUi.goToBackOffice();
// Act
await umbracoUi.user.goToSection(ConstantHelper.sections.media, false);
// Assert
await umbracoUi.media.isMediaVisible(rootFolderName);
await umbracoUi.waitForTimeout(500);
await umbracoUi.media.goToMediaWithName(rootFolderName);
await umbracoUi.media.isTextWithMessageVisible('The authenticated user do not have access to this resource');
await umbracoUi.media.clickCaretButtonForMediaName(rootFolderName);
await umbracoUi.media.isChildMediaVisible(rootFolderName, childFolderOneName);
await umbracoUi.media.isChildMediaVisible(rootFolderName, childFolderTwoName, false);
});
test('can not see any media when no media start nodes specified', async ({umbracoApi, umbracoUi}) => {
// Arrange
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.user.goToSection(ConstantHelper.sections.media, false);
// Assert
await umbracoUi.media.isMediaVisible(rootFolderName, false);
});

View File

@@ -0,0 +1,49 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
const testUser = {
name: 'Test User',
email: 'verySecureEmail@123.test',
password: 'verySecurePassword123',
};
const userGroupName = 'TestUserGroup';
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
let userGroupId = null;
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.user.ensureNameNotExists(testUser.name);
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
userGroupId = await umbracoApi.userGroup.createSimpleUserGroupWithContentSection(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 see correct translation for content in english', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], true, [], false, 'en-us');
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
// Act
await umbracoUi.goToBackOffice();
// Assert
await umbracoUi.user.isSectionWithNameVisible(ConstantHelper.sections.content, false);
});
test('can see correct translation for content in danish', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId, [], true, [], false, 'da-dk');
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
// Act
await umbracoUi.goToBackOffice();
// Assert
// Indhold is the Danish translation of Content
await umbracoUi.user.isSectionWithNameVisible('Indhold', true);
});

View File

@@ -4,13 +4,16 @@ import {expect} from '@playwright/test';
const nameOfTheUser = 'TestUser';
const userEmail = 'TestUser@EmailTest.test';
const defaultUserGroupName = 'Writers';
let userCount = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoApi.user.ensureNameNotExists(nameOfTheUser);
});
test.afterEach(async ({umbracoApi}) => {
test.afterEach(async ({umbracoApi, umbracoUi}) => {
// Waits so we can try to avoid db locks
await umbracoUi.waitForTimeout(500);
await umbracoApi.user.ensureNameNotExists(nameOfTheUser);
});
@@ -501,10 +504,11 @@ test('can search for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
userCount = await umbracoApi.user.getUsersCount();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.doesUserSectionContainUserAmount(userCount);
await umbracoUi.user.searchInUserSection(nameOfTheUser);
// Assert
@@ -519,10 +523,11 @@ test('can filter by status', async ({umbracoApi, umbracoUi}) => {
const inactiveStatus = 'Inactive';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
userCount = await umbracoApi.user.getUsersCount();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.doesUserSectionContainUserAmount(userCount);
await umbracoUi.user.filterByStatusName(inactiveStatus);
// Assert
@@ -537,10 +542,11 @@ test('can filter by user groups', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
userCount = await umbracoApi.user.getUsersCount();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.doesUserSectionContainUserAmount(userCount);
await umbracoUi.user.filterByGroupName(defaultUserGroupName);
// Assert
@@ -554,16 +560,17 @@ test('can order by newest user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
userCount = await umbracoApi.user.getUsersCount();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.doesUserSectionContainUserAmount(userCount);
await umbracoUi.user.orderByNewestUser();
// Assert
// Wait for filtering to be done
await umbracoUi.waitForTimeout(200);
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.doesUserSectionContainUserAmount(userCount);
await umbracoUi.user.isUserWithNameTheFirstUserInList(nameOfTheUser);
});