diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index cc69130fd9..bf03842d46 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,8 +7,8 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.29", - "@umbraco/playwright-testhelpers": "^15.0.38", + "@umbraco/json-models-builders": "^2.0.31", + "@umbraco/playwright-testhelpers": "^15.0.39", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" @@ -67,10 +67,9 @@ } }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "15.0.38", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.38.tgz", - "integrity": "sha512-eWJdK2qkdcJJ7st4eAMCJAdYprX7pgDOQoTVTEt62uFCkILuBkGd/MpCYUhFu7IMbFMjNEhWW/+sGSBjS5G14g==", - "license": "MIT", + "version": "15.0.39", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.39.tgz", + "integrity": "sha512-dNl+P5LOW4CZrlzt7TnXOKUDeHI3juN/BfG9b0P/selpiFPrseH1HrB0myJVmPfuq4KCa+490VTu46qXHGwGLw==", "dependencies": { "@umbraco/json-models-builders": "2.0.31", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 99c4008a8d..82bbc68831 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -20,8 +20,8 @@ "typescript": "^4.8.3" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.29", - "@umbraco/playwright-testhelpers": "^15.0.38", + "@umbraco/json-models-builders": "^2.0.31", + "@umbraco/playwright-testhelpers": "^15.0.39", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts index c56fa1675c..c52f5ed27b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts @@ -136,7 +136,7 @@ test('can add a section to a user group', async ({umbracoApi, umbracoUi}) => { // Assert await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.userGroup.clickUserGroupsButton(); - await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content'); + await umbracoUi.userGroup.doesUserGroupTableHaveSection(userGroupName, 'Content'); }) test('can add multiple sections to a user group', async ({umbracoApi, umbracoUi}) => { @@ -152,8 +152,8 @@ test('can add multiple sections to a user group', async ({umbracoApi, umbracoUi} // Assert await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.userGroup.clickUserGroupsButton(); - await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content'); - await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Media'); + await umbracoUi.userGroup.doesUserGroupTableHaveSection(userGroupName, 'Content'); + await umbracoUi.userGroup.doesUserGroupTableHaveSection(userGroupName, 'Media'); }); test('can remove a section from a user group', async ({umbracoApi, umbracoUi}) => { @@ -170,7 +170,7 @@ test('can remove a section from a user group', async ({umbracoApi, umbracoUi}) = // Assert await umbracoUi.userGroup.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.userGroup.clickUserGroupsButton(); - await umbracoUi.userGroup.doesUserGroupHaveSection(userGroupName, 'Content', false); + await umbracoUi.userGroup.doesUserGroupTableHaveSection(userGroupName, 'Content', false); const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); expect(userGroupData.sections).toEqual([]); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroupsDefaultConfiguration.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroupsDefaultConfiguration.spec.ts new file mode 100644 index 0000000000..d164753ea8 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroupsDefaultConfiguration.spec.ts @@ -0,0 +1,224 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.beforeEach(async ({umbracoUi}) => { + await umbracoUi.goToBackOffice(); + await umbracoUi.userGroup.goToSection(ConstantHelper.sections.users); + await umbracoUi.userGroup.clickUserGroupsButton(); +}); + +test('the default configuration of Administrators is correct', async ({umbracoApi, umbracoUi}) => { + // Arrange + const userGroupName = 'Administrators'; + const sections = [ + "Umb.Section.Content", + "Umb.Section.Media", + "Umb.Section.Members", + "Umb.Section.Packages", + "Umb.Section.Settings", + "Umb.Section.Translation", + "Umb.Section.Users" + ]; + const fallbackPermissions = [ + "Umb.Document.Create", + "Umb.Document.Update", + "Umb.Document.Delete", + "Umb.Document.Move", + "Umb.Document.Duplicate", + "Umb.Document.Sort", + "Umb.Document.Rollback", + "Umb.Document.PublicAccess", + "Umb.Document.CultureAndHostnames", + "Umb.Document.Publish", + "Umb.Document.Permissions", + "Umb.Document.Unpublish", + "Umb.Document.Read", + "Umb.Document.CreateBlueprint", + "Umb.Document.Notifications", + ]; + const granularPermissions = []; + const hasAccessToAllLanguages = true; + const documentRootAccess = true; + const mediaRootAccess = true; + const uiPermissions = await umbracoApi.userGroup.convertApiPermissionsToUiPermissions(fallbackPermissions); + const uiSections = await umbracoApi.userGroup.convertApiSectionsToUiSections(sections); + + // Act + await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); + + // Act + await umbracoUi.userGroup.doesSettingHaveValue('Assign access', ConstantHelper.userGroupAssignAccessSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Default permissions', ConstantHelper.userGroupDefaultPermissionsSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Granular permissions', ConstantHelper.userGroupGranularPermissionsSettings); + await umbracoUi.userGroup.doesPermissionsSettingsHaveValue(ConstantHelper.userGroupPermissionsSettings); + await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(uiPermissions); + await umbracoUi.userGroup.doesUserGroupHaveSections(uiSections); + await umbracoUi.userGroup.doesUserGroupSectionsHaveCount(uiSections.length); + // Fixme - Uncomment this when the front-end is ready. Currently the sections includes "Umb.Section.Forms" which should be removed. + //expect(await umbracoApi.userGroup.doesUserGroupHaveSections(userGroupName, sections)).toBeTruthy(); + // Fixme - Uncomment this when the front-end is ready. Currently the fallbackPermissions includes some unnecessary values such as ":", "5", "T" + //expect(await umbracoApi.userGroup.doesUserGroupHaveFallbackPermissions(userGroupName, fallbackPermissions)).toBeTruthy(); + const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); + expect(userGroupData.hasAccessToAllLanguages).toEqual(hasAccessToAllLanguages); + expect(userGroupData.documentRootAccess).toEqual(documentRootAccess); + expect(userGroupData.mediaRootAccess).toEqual(mediaRootAccess); + expect(userGroupData.permissions).toEqual(granularPermissions); +}); + +test('the default configuration of Editors is correct', async ({umbracoApi, umbracoUi}) => { + // Arrange + const userGroupName = 'Editors'; + const sections = [ + "Umb.Section.Content", + "Umb.Section.Media" + ]; + const fallbackPermissions = [ + "Umb.Document.Create", + "Umb.Document.Update", + "Umb.Document.Delete", + "Umb.Document.Move", + "Umb.Document.Duplicate", + "Umb.Document.Sort", + "Umb.Document.Rollback", + "Umb.Document.PublicAccess", + "Umb.Document.Publish", + "Umb.Document.Unpublish", + "Umb.Document.Read", + "Umb.Document.CreateBlueprint", + "Umb.Document.Notifications", + ]; + const granularPermissions = []; + const hasAccessToAllLanguages = true; + const documentRootAccess = true; + const mediaRootAccess = true; + const uiPermissions = await umbracoApi.userGroup.convertApiPermissionsToUiPermissions(fallbackPermissions); + const uiSections = await umbracoApi.userGroup.convertApiSectionsToUiSections(sections); + + // Act + await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); + + // Act + await umbracoUi.userGroup.doesSettingHaveValue('Assign access', ConstantHelper.userGroupAssignAccessSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Default permissions', ConstantHelper.userGroupDefaultPermissionsSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Granular permissions', ConstantHelper.userGroupGranularPermissionsSettings); + await umbracoUi.userGroup.doesPermissionsSettingsHaveValue(ConstantHelper.userGroupPermissionsSettings); + await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(uiPermissions); + await umbracoUi.userGroup.doesUserGroupHaveSections(uiSections); + await umbracoUi.userGroup.doesUserGroupSectionsHaveCount(uiSections.length); + // Fixme - Uncomment this when the front-end is ready. Currently the sections includes "Umb.Section.Forms" which should be removed. + //expect(await umbracoApi.userGroup.doesUserGroupHaveSections(userGroupName, sections)).toBeTruthy(); + // Fixme - Uncomment this when the front-end is ready. Currently the fallbackPermissions includes some unnecessary values such as ":", "5", "T" + //expect(await umbracoApi.userGroup.doesUserGroupHaveFallbackPermissions(userGroupName, fallbackPermissions)).toBeTruthy(); + const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); + expect(userGroupData.hasAccessToAllLanguages).toEqual(hasAccessToAllLanguages); + expect(userGroupData.documentRootAccess).toEqual(documentRootAccess); + expect(userGroupData.mediaRootAccess).toEqual(mediaRootAccess); + expect(userGroupData.permissions).toEqual(granularPermissions); +}); + +test('the default configuration of Sensitive data is correct', async ({umbracoApi, umbracoUi}) => { + // Arrange + const userGroupName = 'Sensitive data'; + const sections = []; + const fallbackPermissions = []; + const granularPermissions = []; + const hasAccessToAllLanguages = false; + const documentRootAccess = false; + const mediaRootAccess = false; + const uiPermissions = await umbracoApi.userGroup.convertApiPermissionsToUiPermissions(fallbackPermissions); + const uiSections = await umbracoApi.userGroup.convertApiSectionsToUiSections(sections); + + // Act + await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); + + // Act + await umbracoUi.userGroup.doesSettingHaveValue('Assign access', ConstantHelper.userGroupAssignAccessSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Default permissions', ConstantHelper.userGroupDefaultPermissionsSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Granular permissions', ConstantHelper.userGroupGranularPermissionsSettings); + await umbracoUi.userGroup.doesPermissionsSettingsHaveValue(ConstantHelper.userGroupPermissionsSettings); + await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(uiPermissions); + await umbracoUi.userGroup.doesUserGroupHaveSections(uiSections); + await umbracoUi.userGroup.doesUserGroupSectionsHaveCount(uiSections.length); + // Fixme - Uncomment this when the front-end is ready. Currently the sections includes "Umb.Section.Forms" which should be removed. + //expect(await umbracoApi.userGroup.doesUserGroupHaveSections(userGroupName, sections)).toBeTruthy(); + // Fixme - Uncomment this when the front-end is ready. Currently the fallbackPermissions includes some unnecessary values such as ":", "5", "T" + //expect(await umbracoApi.userGroup.doesUserGroupHaveFallbackPermissions(userGroupName, fallbackPermissions)).toBeTruthy(); + const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); + expect(userGroupData.hasAccessToAllLanguages).toEqual(hasAccessToAllLanguages); + expect(userGroupData.documentRootAccess).toEqual(documentRootAccess); + expect(userGroupData.mediaRootAccess).toEqual(mediaRootAccess); + expect(userGroupData.permissions).toEqual(granularPermissions); +}); + +test('the default configuration of Translators data is correct', async ({umbracoApi, umbracoUi}) => { + // Arrange + const userGroupName = 'Translators'; + const sections = ["Umb.Section.Translation"]; + const fallbackPermissions = [ + "Umb.Document.Update", + "Umb.Document.Read" + ]; + const granularPermissions = []; + const hasAccessToAllLanguages = true; + const documentRootAccess = true; + const mediaRootAccess = true; + const uiPermissions = await umbracoApi.userGroup.convertApiPermissionsToUiPermissions(fallbackPermissions); + const uiSections = await umbracoApi.userGroup.convertApiSectionsToUiSections(sections); + + // Act + await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); + + // Act + await umbracoUi.userGroup.doesSettingHaveValue('Assign access', ConstantHelper.userGroupAssignAccessSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Default permissions', ConstantHelper.userGroupDefaultPermissionsSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Granular permissions', ConstantHelper.userGroupGranularPermissionsSettings); + await umbracoUi.userGroup.doesPermissionsSettingsHaveValue(ConstantHelper.userGroupPermissionsSettings); + await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(uiPermissions); + await umbracoUi.userGroup.doesUserGroupHaveSections(uiSections); + await umbracoUi.userGroup.doesUserGroupSectionsHaveCount(uiSections.length); + expect(await umbracoApi.userGroup.doesUserGroupHaveSections(userGroupName, sections)).toBeTruthy(); + expect(await umbracoApi.userGroup.doesUserGroupHaveFallbackPermissions(userGroupName, fallbackPermissions)).toBeTruthy(); + const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); + expect(userGroupData.hasAccessToAllLanguages).toEqual(hasAccessToAllLanguages); + expect(userGroupData.documentRootAccess).toEqual(documentRootAccess); + expect(userGroupData.mediaRootAccess).toEqual(mediaRootAccess); + expect(userGroupData.permissions).toEqual(granularPermissions); +}); + +test('the default configuration of Writers data is correct', async ({umbracoApi, umbracoUi}) => { + // Arrange + const userGroupName = 'Writers'; + const sections = ["Umb.Section.Content"]; + const fallbackPermissions = [ + "Umb.Document.Create", + "Umb.Document.Update", + "Umb.Document.Read", + "Umb.Document.Notifications" + ]; + const granularPermissions = []; + const hasAccessToAllLanguages = true; + const documentRootAccess = true; + const mediaRootAccess = true; + const uiPermissions = await umbracoApi.userGroup.convertApiPermissionsToUiPermissions(fallbackPermissions); + const uiSections = await umbracoApi.userGroup.convertApiSectionsToUiSections(sections); + + // Act + await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); + + // Act + await umbracoUi.userGroup.doesSettingHaveValue('Assign access', ConstantHelper.userGroupAssignAccessSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Default permissions', ConstantHelper.userGroupDefaultPermissionsSettings); + await umbracoUi.userGroup.doesSettingHaveValue('Granular permissions', ConstantHelper.userGroupGranularPermissionsSettings); + await umbracoUi.userGroup.doesPermissionsSettingsHaveValue(ConstantHelper.userGroupPermissionsSettings); + await umbracoUi.userGroup.doesUserGroupHavePermissionEnabled(uiPermissions); + await umbracoUi.userGroup.doesUserGroupHaveSections(uiSections); + await umbracoUi.userGroup.doesUserGroupSectionsHaveCount(uiSections.length); + expect(await umbracoApi.userGroup.doesUserGroupHaveSections(userGroupName, sections)).toBeTruthy(); + // Fixme - Uncomment this when the front-end is ready. Currently the fallbackPermissions includes some unnecessary values such as ":", "5", "T" + //expect(await umbracoApi.userGroup.doesUserGroupHaveFallbackPermissions(userGroupName, fallbackPermissions)).toBeTruthy(); + const userGroupData = await umbracoApi.userGroup.getByName(userGroupName); + expect(userGroupData.hasAccessToAllLanguages).toEqual(hasAccessToAllLanguages); + expect(userGroupData.documentRootAccess).toEqual(documentRootAccess); + expect(userGroupData.mediaRootAccess).toEqual(mediaRootAccess); + expect(userGroupData.permissions).toEqual(granularPermissions); +}); \ No newline at end of file