Skip to content

Commit 5a56541

Browse files
authored
V16 Added acceptance tests for document property value permission (#19385)
* Updated due to test helper changes * Updated user group tests due to api helper changes * Updated tests for user group default configuration due to UI changes * Added tests for document property value permission * Added tests for document property value permission in content with block * Bumped version * Make specific tests run in the pipeline * Added skip tag and issue link for the failing tests * Fixed comment * Bumped version * Fixed comments * Bumped version and reverted npm command
1 parent 93873c3 commit 5a56541

File tree

7 files changed

+301
-17
lines changed

7 files changed

+301
-17
lines changed

tests/Umbraco.Tests.AcceptanceTest/package-lock.json

Lines changed: 9 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Umbraco.Tests.AcceptanceTest/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
"typescript": "^4.8.3"
2121
},
2222
"dependencies": {
23-
"@umbraco/json-models-builders": "^2.0.33",
24-
"@umbraco/playwright-testhelpers": "^16.0.15",
23+
"@umbraco/json-models-builders": "^2.0.35",
24+
"@umbraco/playwright-testhelpers": "^16.0.20",
2525
"camelize": "^1.0.0",
2626
"dotenv": "^16.3.1",
2727
"node-fetch": "^2.6.7"

tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/Permissions/UserGroup/DefaultPermissionsInContent.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ test.afterEach(async ({umbracoApi}) => {
5151

5252
test('can browse content node with permission enabled', async ({umbracoApi, umbracoUi}) => {
5353
// Arrange
54-
userGroupId = await umbracoApi.userGroup.createUserGroupWithBrowseNodePermission(userGroupName);
54+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermission(userGroupName);
5555
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
5656
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
5757
await umbracoUi.goToBackOffice();
@@ -66,7 +66,7 @@ test('can browse content node with permission enabled', async ({umbracoApi, umbr
6666

6767
test('can not browse content node with permission disabled', async ({umbracoApi, umbracoUi}) => {
6868
// Arrange
69-
userGroupId = await umbracoApi.userGroup.createUserGroupWithBrowseNodePermission(userGroupName, false);
69+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermission(userGroupName, false);
7070
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
7171
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
7272
await umbracoUi.goToBackOffice();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import { expect } from '@playwright/test';
2+
import {AliasHelper, ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers';
3+
4+
const testUser = ConstantHelper.testUserCredentials;
5+
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
6+
7+
const userGroupName = 'TestPropertyValuePermission';
8+
let userGroupId = null;
9+
10+
const documentName = 'TestDocument';
11+
const documentTypeName = 'TestDocumentType';
12+
const dataTypeName = 'Textstring';
13+
const textString = 'This is test textstring';
14+
15+
test.beforeEach(async ({umbracoApi}) => {
16+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
17+
await umbracoApi.document.ensureNameNotExists(documentName);
18+
const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
19+
const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id);
20+
await umbracoApi.document.createDocumentWithTextContent(documentName, documentTypeId, textString, dataTypeName);
21+
});
22+
23+
test.afterEach(async ({umbracoApi}) => {
24+
// Ensure we are logged in to admin
25+
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
26+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
27+
await umbracoApi.document.ensureNameNotExists(documentName);
28+
await umbracoApi.userGroup.ensureNameNotExists(userGroupName);
29+
});
30+
31+
test('cannot see property values without UI read permission', async ({umbracoApi, umbracoUi}) => {
32+
// Arrange
33+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermissionAndReadPropertyValuePermission(userGroupName, true, false);
34+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
35+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
36+
await umbracoUi.goToBackOffice();
37+
38+
// Act
39+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
40+
await umbracoUi.content.goToContentWithName(documentName);
41+
42+
// Assert
43+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('text-box', false);
44+
});
45+
46+
test('can see property values with UI read but not UI write permission', async ({umbracoApi, umbracoUi}) => {
47+
// Arrange
48+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermissionAndReadPropertyValuePermission(userGroupName, true, true);
49+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
50+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
51+
await umbracoUi.goToBackOffice();
52+
53+
// Act
54+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
55+
await umbracoUi.content.goToContentWithName(documentName);
56+
57+
// Assert
58+
await umbracoUi.content.isPropertyEditorUiWithNameReadOnly('text-box');
59+
});
60+
61+
test('cannot open content without document read permission even with UI read permission', async ({umbracoApi, umbracoUi}) => {
62+
// Arrange
63+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermissionAndReadPropertyValuePermission(userGroupName, false, true);
64+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
65+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
66+
await umbracoUi.goToBackOffice();
67+
68+
// Act
69+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
70+
await umbracoUi.content.goToContentWithName(documentName);
71+
72+
// Assert
73+
await umbracoUi.content.doesErrorNotificationHaveText(NotificationConstantHelper.error.permissionDenied);
74+
});
75+
76+
test('cannot edit property values without UI write permission', async ({umbracoApi, umbracoUi}) => {
77+
// Arrange
78+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, false);
79+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
80+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
81+
await umbracoUi.goToBackOffice();
82+
83+
// Act
84+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
85+
await umbracoUi.content.goToContentWithName(documentName);
86+
87+
// Assert
88+
await umbracoUi.content.isDocumentReadOnly(false);
89+
await umbracoUi.content.isPropertyEditorUiWithNameReadOnly('text-box');
90+
});
91+
92+
// Remove .skip when the front-end is ready.
93+
// Issue link: https://github.com/umbraco/Umbraco-CMS/issues/19395
94+
test.skip('can edit property values with UI write permission', async ({umbracoApi, umbracoUi}) => {
95+
// Arrange
96+
const updatedText = 'Updated test text';
97+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, false);
98+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
99+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
100+
await umbracoUi.goToBackOffice();
101+
102+
// Act
103+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
104+
await umbracoUi.content.goToContentWithName(documentName);
105+
await umbracoUi.content.enterTextstring(updatedText);
106+
await umbracoUi.content.clickSaveButton();
107+
108+
// Assert
109+
const documentData = await umbracoApi.document.getByName(documentName);
110+
expect(documentData.values[0].alias).toEqual(AliasHelper.toAlias(dataTypeName));
111+
expect(documentData.values[0].value).toEqual(updatedText);
112+
});
113+
114+
test('cannot see property values with only UI write but no UI read permission', async ({umbracoApi, umbracoUi}) => {
115+
// Arrange
116+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, true, false);
117+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
118+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
119+
await umbracoUi.goToBackOffice();
120+
121+
// Act
122+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
123+
await umbracoUi.content.goToContentWithName(documentName);
124+
125+
// Assert
126+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('text-box', false);
127+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
import { expect } from '@playwright/test';
2+
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
3+
4+
const testUser = ConstantHelper.testUserCredentials;
5+
let testUserCookieAndToken = {cookie: "", accessToken: "", refreshToken: ""};
6+
7+
const userGroupName = 'TestPropertyValuePermission';
8+
let userGroupId = null;
9+
10+
const documentName = 'TestContent';
11+
const documentTypeName = 'TestDocumentTypeForContent';
12+
const customDataTypeName = 'Custom Block List';
13+
const elementTypeName = 'BlockListElement';
14+
const propertyInBlock = 'Textstring';
15+
const groupName = 'testGroup';
16+
let elementTypeId = '';
17+
18+
test.beforeEach(async ({umbracoApi}) => {
19+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
20+
await umbracoApi.document.ensureNameNotExists(documentName);
21+
const textStringData = await umbracoApi.dataType.getByName(propertyInBlock);
22+
elementTypeId = await umbracoApi.documentType.createDefaultElementType(elementTypeName, groupName, propertyInBlock, textStringData.id);
23+
});
24+
25+
test.afterEach(async ({umbracoApi}) => {
26+
// Ensure we are logged in to admin
27+
await umbracoApi.loginToAdminUser(testUserCookieAndToken.cookie, testUserCookieAndToken.accessToken, testUserCookieAndToken.refreshToken);
28+
await umbracoApi.document.ensureNameNotExists(documentName);
29+
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
30+
await umbracoApi.documentType.ensureNameNotExists(elementTypeName);
31+
await umbracoApi.dataType.ensureNameNotExists(customDataTypeName);
32+
});
33+
34+
test('can see property values in block list with UI read but not UI write permission', async ({umbracoApi, umbracoUi}) => {
35+
// Arrange
36+
await umbracoApi.document.createDefaultDocumentWithABlockListEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
37+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermissionAndReadPropertyValuePermission(userGroupName, true, true);
38+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
39+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
40+
await umbracoUi.goToBackOffice();
41+
42+
// Act
43+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
44+
await umbracoUi.content.goToContentWithName(documentName);
45+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-list', true);
46+
await umbracoUi.content.clickEditBlockListBlockButton();
47+
48+
// Assert
49+
await umbracoUi.content.isPropertyEditorUiWithNameReadOnly('text-box');
50+
});
51+
52+
// Remove .skip when the front-end is ready.
53+
// Issue link: https://github.com/umbraco/Umbraco-CMS/issues/19395
54+
test.skip('can edit property values in block list with UI write permission', async ({umbracoApi, umbracoUi}) => {
55+
// Arrange
56+
const updatedText = 'Updated test text';
57+
await umbracoApi.document.createDefaultDocumentWithABlockListEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
58+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, false);
59+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
60+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
61+
await umbracoUi.goToBackOffice();
62+
63+
// Act
64+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
65+
await umbracoUi.content.goToContentWithName(documentName);
66+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-list', true);
67+
await umbracoUi.content.clickEditBlockListBlockButton();
68+
await umbracoUi.content.enterTextstring(updatedText);
69+
await umbracoUi.content.clickUpdateButton();
70+
await umbracoUi.content.clickSaveButton();
71+
72+
// Assert
73+
const documentData = await umbracoApi.document.getByName(documentName);
74+
expect(documentData.values[0].value.contentData[0].values[0].value).toEqual(updatedText);
75+
});
76+
77+
test('cannot see property values in block list with only UI write but no UI read permission', async ({umbracoApi, umbracoUi}) => {
78+
// Arrange
79+
await umbracoApi.document.createDefaultDocumentWithABlockListEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
80+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, true, false);
81+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
82+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
83+
await umbracoUi.goToBackOffice();
84+
85+
// Act
86+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
87+
await umbracoUi.content.goToContentWithName(documentName);
88+
89+
// Assert
90+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-list', false);
91+
});
92+
93+
test('can see property values in block grid with UI read but not UI write permission', async ({umbracoApi, umbracoUi}) => {
94+
// Arrange
95+
await umbracoApi.document.createDefaultDocumentWithABlockGridEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
96+
userGroupId = await umbracoApi.userGroup.createUserGroupWithReadPermissionAndReadPropertyValuePermission(userGroupName, true, true);
97+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
98+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
99+
await umbracoUi.goToBackOffice();
100+
101+
// Act
102+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
103+
await umbracoUi.content.goToContentWithName(documentName);
104+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-grid', true);
105+
await umbracoUi.content.clickEditBlockGridBlockButton();
106+
107+
// Assert
108+
await umbracoUi.content.isPropertyEditorUiWithNameReadOnly('text-box');
109+
});
110+
111+
// Remove .skip when the front-end is ready.
112+
// Issue link: https://github.com/umbraco/Umbraco-CMS/issues/19395
113+
test.skip('can edit property values in block grid with UI write permission', async ({umbracoApi, umbracoUi}) => {
114+
// Arrange
115+
const updatedText = 'Updated test text';
116+
await umbracoApi.document.createDefaultDocumentWithABlockGridEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
117+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, false);
118+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
119+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
120+
await umbracoUi.goToBackOffice();
121+
122+
// Act
123+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
124+
await umbracoUi.content.goToContentWithName(documentName);
125+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-grid', true);
126+
await umbracoUi.content.clickEditBlockGridBlockButton();
127+
await umbracoUi.content.enterTextstring(updatedText);
128+
await umbracoUi.content.clickUpdateButton();
129+
await umbracoUi.content.clickSaveButton();
130+
131+
// Assert
132+
const documentData = await umbracoApi.document.getByName(documentName);
133+
expect(documentData.values[0].value.contentData[0].values[0].value).toEqual(updatedText);
134+
});
135+
136+
test('cannot see property values in block grid with only UI write but no UI read permission', async ({umbracoApi, umbracoUi}) => {
137+
// Arrange
138+
await umbracoApi.document.createDefaultDocumentWithABlockGridEditor(documentName, elementTypeId, documentTypeName, customDataTypeName);
139+
userGroupId = await umbracoApi.userGroup.createUserGroupWithUpdatePermissionAndWritePropertyValuePermission(userGroupName, true, true, false);
140+
await umbracoApi.user.setUserPermissions(testUser.name, testUser.email, testUser.password, userGroupId);
141+
testUserCookieAndToken = await umbracoApi.user.loginToUser(testUser.name, testUser.email, testUser.password);
142+
await umbracoUi.goToBackOffice();
143+
144+
// Act
145+
await umbracoUi.content.goToSection(ConstantHelper.sections.content, false);
146+
await umbracoUi.content.goToContentWithName(documentName);
147+
148+
// Assert
149+
await umbracoUi.content.isPropertyEditorUiWithNameVisible('block-grid', false);
150+
});

tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ test('can remove granular permission to a specific document for a user group', a
477477
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
478478
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
479479
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
480-
await umbracoApi.userGroup.createUserGroupWithPermissionsForSpecificDocumentWithBrowseNode(userGroupName, documentId);
480+
await umbracoApi.userGroup.createUserGroupWithPermissionsForSpecificDocumentWithRead(userGroupName, documentId);
481481
expect(await umbracoApi.userGroup.doesUserGroupContainGranularPermissionsForDocument(userGroupName, documentId, [allPermissions.verbPermission[0]])).toBeTruthy();
482482
await umbracoUi.userGroup.clickUserGroupsButton();
483483
await umbracoUi.userGroup.clickUserGroupWithName(userGroupName);

0 commit comments

Comments
 (0)