Merge branch 'v14/dev' into contrib

This commit is contained in:
Sebastiaan Janssen
2024-06-26 10:45:31 +02:00
75 changed files with 1604 additions and 436 deletions

View File

@@ -5,7 +5,7 @@
<ItemGroup>
<!-- Microsoft packages -->
<PackageVersion Include="BenchmarkDotNet" Version="0.13.12" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.6" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageVersion Include="System.Data.DataSetExtensions" Version="4.5.0" />

View File

@@ -7,8 +7,8 @@
"name": "acceptancetest",
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^2.0.6",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.60",
"@umbraco/json-models-builders": "^2.0.7",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.63",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",
@@ -132,9 +132,9 @@
}
},
"node_modules/@umbraco/json-models-builders": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.6.tgz",
"integrity": "sha512-eoOhTSH7rcC7NESId0vhqtxNXPuoy+ZaQo1moXxpv8/T6vqmKoDdLEydjtDz0FOXzqVZ5yQ1xWK0cpag37Laag==",
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.7.tgz",
"integrity": "sha512-roR5A+jzIFN9z1BhogMGOEzSzoR8jOrIYIAevT7EnyS3H3OM0m0uREgvjYCQo0+QMfVws4zq4Ydjx2TIfGYvlQ==",
"dependencies": {
"camelize": "^1.0.1",
"faker": "^6.6.6"
@@ -146,11 +146,11 @@
"integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg=="
},
"node_modules/@umbraco/playwright-testhelpers": {
"version": "2.0.0-beta.60",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.60.tgz",
"integrity": "sha512-5KJkn1GtfCXqbwYP8RnDyjWUNqSQ/62UYFARuXhUzQoz4xvv3Fme8rPeiOBxqJRWWoj3MQCaP7nyPPs3FDe8vQ==",
"version": "2.0.0-beta.63",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.63.tgz",
"integrity": "sha512-fLXUcWNJupfGKkD6zOGg6WcU5cmqQ6gQkyIyG+UsKSrkgCxK23+N5LrOz2OVp2NZ8GQ8kB5pJ4izvCp+yMMOnA==",
"dependencies": {
"@umbraco/json-models-builders": "2.0.6",
"@umbraco/json-models-builders": "2.0.7",
"camelize": "^1.0.0",
"faker": "^4.1.0",
"form-data": "^4.0.0",

View File

@@ -21,8 +21,8 @@
"wait-on": "^7.2.0"
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.6",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.60",
"@umbraco/json-models-builders": "^2.0.7",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.63",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",

View File

@@ -15,64 +15,64 @@ test.afterEach(async ({umbracoApi}) => {
test('can create a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickCreateLink();
await umbracoUi.translation.enterDictionaryName(dictionaryName);
await umbracoUi.translation.clickSaveButton();
await umbracoUi.dictionary.clickCreateLink();
await umbracoUi.dictionary.enterDictionaryName(dictionaryName);
await umbracoUi.dictionary.clickSaveButton();
// Assert
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeTruthy();
await umbracoUi.translation.isSuccessNotificationVisible();
await umbracoUi.translation.clickLeftArrowButton();
await umbracoUi.dictionary.isSuccessNotificationVisible();
await umbracoUi.dictionary.clickLeftArrowButton();
// Verify the dictionary item displays in the tree and in the list
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName);
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
await umbracoUi.dictionary.isDictionaryTreeItemVisible(dictionaryName);
expect(await umbracoUi.dictionary.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
});
test('can delete a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.deleteDictionary();
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.deleteDictionary();
// Assert
await umbracoUi.translation.isSuccessNotificationVisible();
await umbracoUi.dictionary.isSuccessNotificationVisible();
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeFalsy();
// Verify the dictionary item does not display in the tree
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName, false);
await umbracoUi.dictionary.isDictionaryTreeItemVisible(dictionaryName, false);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the dictionary item does not display in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeFalsy();
//expect(await umbracoUi.dictionary.doesDictionaryListHaveText(dictionaryName)).toBeFalsy();
});
test('can create a dictionary item in a dictionary', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.translation.clickCreateDictionaryItemButton();
await umbracoUi.translation.enterDictionaryName(dictionaryName);
await umbracoUi.translation.clickSaveButton();
await umbracoUi.dictionary.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.dictionary.clickCreateDictionaryItemButton();
await umbracoUi.dictionary.enterDictionaryName(dictionaryName);
await umbracoUi.dictionary.clickSaveButton();
// Assert
await umbracoUi.translation.isSuccessNotificationVisible();
await umbracoUi.dictionary.isSuccessNotificationVisible();
const dictionaryChildren = await umbracoApi.dictionary.getChildren(parentDictionaryId);
expect(dictionaryChildren[0].name).toEqual(dictionaryName);
await umbracoUi.translation.clickLeftArrowButton();
await umbracoUi.dictionary.clickLeftArrowButton();
// Verify the new dictionary item displays in the list
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
expect(await umbracoUi.dictionary.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
// Verify the new dictionary item displays in the tree
await umbracoUi.translation.reloadTree(parentDictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName);
await umbracoUi.dictionary.reloadTree(parentDictionaryName);
await umbracoUi.dictionary.isDictionaryTreeItemVisible(dictionaryName);
// Clean
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
@@ -82,12 +82,12 @@ test('can export a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
const dictionaryId = await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickExportMenu();
const exportData = await umbracoUi.translation.exportDictionary(false);
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickExportMenu();
const exportData = await umbracoUi.dictionary.exportDictionary(false);
// Assert
expect(exportData).toEqual(dictionaryId + '.udt');
@@ -98,12 +98,12 @@ test('can export a dictionary item with descendants', {tag: '@smoke'}, async ({u
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.translation.clickExportMenu();
const exportData = await umbracoUi.translation.exportDictionary(true);
await umbracoUi.dictionary.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.dictionary.clickExportMenu();
const exportData = await umbracoUi.dictionary.exportDictionary(true);
// Assert
expect(exportData).toEqual(parentDictionaryId + '.udt');
@@ -119,20 +119,20 @@ test('can import a dictionary item', async ({umbracoApi, umbracoUi}) => {
const importDictionaryName = 'TestImportDictionary';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickImportMenu();
await umbracoUi.translation.importDictionary(udtFilePath);
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickImportMenu();
await umbracoUi.dictionary.importDictionary(udtFilePath);
// Assert
// Verify the imported dictionary item displays in the tree
await umbracoUi.translation.reloadTree(dictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importDictionaryName);
await umbracoUi.dictionary.reloadTree(dictionaryName);
await umbracoUi.dictionary.isDictionaryTreeItemVisible(importDictionaryName);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the imported dictionary item displays in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importDictionaryName)).toBeTruthy();
//expect(await umbracoUi.dictionary.doesDictionaryListHaveText(importDictionaryName)).toBeTruthy();
});
test('can import a dictionary item with descendants', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
@@ -143,23 +143,23 @@ test('can import a dictionary item with descendants', {tag: '@smoke'}, async ({u
const importChildDictionaryName = 'TestImportChild';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickImportMenu();
await umbracoUi.translation.importDictionary(udtFilePath);
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickImportMenu();
await umbracoUi.dictionary.importDictionary(udtFilePath);
// Assert
// Verify the imported dictionary items display in the tree
await umbracoUi.translation.reloadTree(dictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importParentDictionaryName);
await umbracoUi.translation.reloadTree(importParentDictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importChildDictionaryName);
await umbracoUi.dictionary.reloadTree(dictionaryName);
await umbracoUi.dictionary.isDictionaryTreeItemVisible(importParentDictionaryName);
await umbracoUi.dictionary.reloadTree(importParentDictionaryName);
await umbracoUi.dictionary.isDictionaryTreeItemVisible(importChildDictionaryName);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the imported dictionary items display in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importParentDictionaryName)).toBeTruthy();
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importChildDictionaryName)).toBeTruthy();
//expect(await umbracoUi.dictionary.doesDictionaryListHaveText(importParentDictionaryName)).toBeTruthy();
//expect(await umbracoUi.dictionary.doesDictionaryListHaveText(importChildDictionaryName)).toBeTruthy();
});
// Skip this test as the search function is removed
@@ -167,13 +167,13 @@ test.skip('can search a dictionary item in list when have results', async ({umbr
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.enterSearchKeywordAndPressEnter(dictionaryName);
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter(dictionaryName);
// Assert
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
expect(await umbracoUi.dictionary.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
});
// Skip this test as the search function is removed
@@ -182,11 +182,11 @@ test.skip('can search a dictionary item in list when have no results', async ({u
const emptySearchResultMessage = 'No Dictionary items to choose from';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.translation.enterSearchKeywordAndPressEnter('xyz');
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter('xyz');
// Assert
await umbracoUi.translation.isSearchResultMessageDisplayEmpty(emptySearchResultMessage);
await umbracoUi.dictionary.isSearchResultMessageDisplayEmpty(emptySearchResultMessage);
});

View File

@@ -0,0 +1,577 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from '@playwright/test';
const nameOfTheUser = 'TestUser';
const userEmail = 'TestUser@EmailTest.test';
const defaultUserGroupName = 'Writers';
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoApi.user.ensureNameNotExists(nameOfTheUser);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.user.ensureNameNotExists(nameOfTheUser);
});
test('can create a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickCreateButton();
await umbracoUi.user.enterNameOfTheUser(nameOfTheUser);
await umbracoUi.user.enterUserEmail(userEmail);
await umbracoUi.user.clickChooseButton();
await umbracoUi.user.clickButtonWithName(defaultUserGroupName);
await umbracoUi.user.clickSubmitButton();
await umbracoUi.user.clickCreateUserButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesNameExist(nameOfTheUser)).toBeTruthy();
});
test('can rename a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongName = 'WrongName';
await umbracoApi.user.ensureNameNotExists(wrongName);
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(wrongName, wrongName + userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(wrongName);
await umbracoUi.user.enterUpdatedNameOfUser(nameOfTheUser);
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesNameExist(nameOfTheUser)).toBeTruthy();
});
test('can delete a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickDeleteButton();
await umbracoUi.user.clickConfirmToDeleteButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesNameExist(nameOfTheUser)).toBeFalsy();
// Checks if the user is deleted from the list
await umbracoUi.user.clickUsersTabButton();
await umbracoUi.user.isUserVisible(nameOfTheUser, false);
});
test('can add multiple user groups to a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const secondUserGroupName = 'Translators';
const userGroupWriters = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userGroupTranslators = await umbracoApi.userGroup.getByName(secondUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroupWriters.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChooseUserGroupsButton();
await umbracoUi.user.clickButtonWithName(secondUserGroupName);
await umbracoUi.user.clickSubmitButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(await umbracoApi.user.doesUserContainUserGroupIds(nameOfTheUser, [userGroupWriters.id, userGroupTranslators.id])).toBeTruthy();
});
test('can remove a user group from a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickRemoveButtonForUserGroupWithName(defaultUserGroupName);
await umbracoUi.user.clickConfirmRemoveButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.userGroupIds).toEqual([]);
});
test('can update culture for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const danishIsoCode = 'da-dk';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.selectUserLanguage('Dansk');
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.languageIsoCode).toEqual(danishIsoCode);
});
test('can add a content start node to a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChooseContentStartNodeButton();
await umbracoUi.user.clickLabelWithName(documentName);
await umbracoUi.user.clickChooseContainerButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainContentStartNodeIds(nameOfTheUser, [documentId])).toBeTruthy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can add multiple content start nodes for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
const secondDocumentName = 'SecondDocument';
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.document.ensureNameNotExists(secondDocumentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
// Adds the content start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.documentStartNodeIds.push({id: documentId});
await umbracoApi.user.update(userId, userData);
const secondDocumentId = await umbracoApi.document.createDefaultDocument(secondDocumentName, documentTypeId);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChooseContentStartNodeButton();
await umbracoUi.user.clickLabelWithName(secondDocumentName);
await umbracoUi.user.clickChooseContainerButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainContentStartNodeIds(nameOfTheUser, [documentId, secondDocumentId])).toBeTruthy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.document.ensureNameNotExists(secondDocumentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can remove a content start node from a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
// Adds the content start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.documentStartNodeIds.push({id: documentId});
await umbracoApi.user.update(userId, userData);
expect(await umbracoApi.user.doesUserContainContentStartNodeIds(nameOfTheUser, [documentId])).toBeTruthy();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickRemoveButtonForContentNodeWithName(documentName);
await umbracoUi.user.clickConfirmRemoveButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainContentStartNodeIds(nameOfTheUser, [documentId])).toBeFalsy();
// Clean
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can add media start nodes for a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'File';
const mediaName = 'TestMediaFile';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoApi.media.ensureNameNotExists(mediaName);
const mediaId = await umbracoApi.media.createDefaultMedia(mediaName, mediaTypeName);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChooseMediaStartNodeButton();
await umbracoUi.user.clickMediaCardWithName(mediaName);
await umbracoUi.user.clickSubmitButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [mediaId])).toBeTruthy();
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
});
test('can add multiple media start nodes for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'File';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const mediaName = 'TestMediaFile';
const secondMediaName = 'SecondMediaFile';
await umbracoApi.media.ensureNameNotExists(mediaName);
await umbracoApi.media.ensureNameNotExists(secondMediaName);
const firstMediaId = await umbracoApi.media.createDefaultMedia(mediaName, mediaTypeName);
const secondMediaId = await umbracoApi.media.createDefaultMedia(secondMediaName, mediaTypeName);
// Adds the media start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.mediaStartNodeIds.push({id: firstMediaId});
await umbracoApi.user.update(userId, userData);
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [firstMediaId])).toBeTruthy();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChooseMediaStartNodeButton();
await umbracoUi.user.clickMediaCardWithName(secondMediaName);
await umbracoUi.user.clickSubmitButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [firstMediaId, secondMediaId])).toBeTruthy();
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
await umbracoApi.media.ensureNameNotExists(secondMediaName);
});
test('can remove a media start node from a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'File';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const mediaName = 'TestMediaFile';
await umbracoApi.media.ensureNameNotExists(mediaName);
const mediaId = await umbracoApi.media.createDefaultMedia(mediaName, mediaTypeName);
// Adds the media start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.mediaStartNodeIds.push({id: mediaId});
await umbracoApi.user.update(userId, userData);
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [mediaId])).toBeTruthy();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickRemoveButtonForMediaNodeWithName(mediaName);
await umbracoUi.user.clickConfirmRemoveButton();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [mediaId])).toBeFalsy();
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
});
test('can allow access to all documents for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickAllowAccessToAllDocumentsSlider();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.hasDocumentRootAccess).toBeTruthy()
});
test('can allow access to all media for a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickAllowAccessToAllMediaSlider();
await umbracoUi.user.clickSaveButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.hasMediaRootAccess).toBeTruthy();
});
test('can see if the user has the correct access based on content start nodes', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
// Adds the content start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.documentStartNodeIds.push({id: documentId});
await umbracoApi.user.update(userId, userData);
expect(await umbracoApi.user.doesUserContainContentStartNodeIds(nameOfTheUser, [documentId])).toBeTruthy();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
// Assert
await umbracoUi.user.doesUserHaveAccessToContentNode(documentName);
// Clean
await umbracoApi.document.ensureNameNotExists(documentName);
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
test('can see if the user has the correct access based on media start nodes', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'File';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const mediaName = 'TestMediaFile';
await umbracoApi.media.ensureNameNotExists(mediaName);
const mediaId = await umbracoApi.media.createDefaultMedia(mediaName, mediaTypeName);
// Adds the media start node to the user
const userData = await umbracoApi.user.getByName(nameOfTheUser);
userData.mediaStartNodeIds.push({id: mediaId});
await umbracoApi.user.update(userId, userData);
expect(await umbracoApi.user.doesUserContainMediaStartNodeIds(nameOfTheUser, [mediaId])).toBeTruthy();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
// Assert
await umbracoUi.user.doesUserHaveAccessToMediaNode(mediaName);
// Clean
await umbracoApi.media.ensureNameNotExists(mediaName);
});
test('can change password for a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userPassword = 'TestPassword';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickChangePasswordButton();
await umbracoUi.user.updatePassword(userPassword);
// Assert
await umbracoUi.user.isPasswordUpdatedForUserWithId(userId);
});
test('can disable a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const disabledStatus = 'Disabled';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickDisableButton();
await umbracoUi.user.clickConfirmDisableButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
expect(umbracoUi.user.isUserDisabledTextVisible()).toBeTruthy();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.state).toBe(disabledStatus);
});
test('can enable a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const inactiveStatus = 'Inactive';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoApi.user.disable([userId]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickEnableButton();
await umbracoUi.user.clickConfirmEnableButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
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);
expect(userData.state).toBe(inactiveStatus);
});
test('can add an avatar to a user', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
const filePath = './fixtures/mediaLibrary/Umbraco.png';
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.changePhotoWithFileChooser(filePath);
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.avatarUrls).not.toHaveLength(0);
});
test('can remove an avatar from a user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
const userId = await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoApi.user.addDefaultAvatarImageToUser(userId);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(nameOfTheUser);
await umbracoUi.user.clickRemovePhotoButton();
// Assert
await umbracoUi.user.isSuccessNotificationVisible();
const userData = await umbracoApi.user.getByName(nameOfTheUser);
expect(userData.avatarUrls).toHaveLength(0);
});
test('can see if the inactive label is removed from the admin user', async ({umbracoApi, umbracoUi}) => {
// Arrange
const userLabel = 'Active';
const currentUser = await umbracoApi.user.getCurrentUser();
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.clickUserWithName(currentUser.name);
// Assert
await umbracoUi.user.isTextWithExactNameVisible(userLabel);
const userData = await umbracoApi.user.getByName(currentUser.name);
expect(userData.state).toBe(userLabel);
});
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]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.searchInUserSection(nameOfTheUser);
// Assert
// Wait for filtering to be done
await umbracoUi.waitForTimeout(200);
await umbracoUi.user.doesUserSectionContainUserAmount(1);
await umbracoUi.user.doesUserSectionContainUserWithText(nameOfTheUser);
});
test('can filter by status', async ({umbracoApi, umbracoUi}) => {
// Arrange
const inactiveStatus = 'Inactive';
const userGroup = await umbracoApi.userGroup.getByName(defaultUserGroupName);
await umbracoApi.user.createDefaultUser(nameOfTheUser, userEmail, [userGroup.id]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.filterByStatusName(inactiveStatus);
// Assert
// Wait for filtering to be done
await umbracoUi.waitForTimeout(200);
await umbracoUi.user.doesUserSectionContainUserAmount(1);
await umbracoUi.user.doesUserSectionContainUserWithText(nameOfTheUser);
await umbracoUi.user.doesUserSectionContainUserWithText(inactiveStatus);
});
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]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.filterByGroupName(defaultUserGroupName);
// Assert
// Wait for filtering to be done
await umbracoUi.waitForTimeout(200);
await umbracoUi.user.doesUserSectionContainUserAmount(1);
await umbracoUi.user.doesUserSectionContainUserWithText(defaultUserGroupName);
});
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]);
await umbracoUi.user.goToSection(ConstantHelper.sections.users);
// Act
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.orderByNewestUser();
// Assert
// Wait for filtering to be done
await umbracoUi.waitForTimeout(200);
await umbracoUi.user.doesUserSectionContainUserAmount(2);
await umbracoUi.user.isUserWithNameTheFirstUserInList(nameOfTheUser);
});
// TODO: Sometimes the frontend does not switch from grid to table, or table to grid.
test.skip('can change from grid to table view', async ({page, umbracoApi, umbracoUi}) => {
});

View File

@@ -0,0 +1,48 @@
using Microsoft.AspNetCore.Http;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Api.Delivery.Services;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Cms.Api.Delivery.Services;
[TestFixture]
public class RequestHeaderHandlerTests
{
private const string HeaderName = "TestHeader";
[Test]
public void GetHeaderValue_return_null_when_http_context_is_unavailable()
{
IHttpContextAccessor httpContextAccessor = Mock.Of<IHttpContextAccessor>();
var sut = new TestRequestHeaderHandler(httpContextAccessor);
Assert.IsNull(sut.TestGetHeaderValue(HeaderName));
}
[Test]
public void GetHeaderValue_return_header_value_when_http_context_is_available()
{
const string headerValue = "TestValue";
HttpContext httpContext = new DefaultHttpContext();
httpContext.Request.Headers[HeaderName] = headerValue;
IHttpContextAccessor httpContextAccessor = Mock.Of<IHttpContextAccessor>();
Mock.Get(httpContextAccessor).Setup(x => x.HttpContext).Returns(httpContext);
var sut = new TestRequestHeaderHandler(httpContextAccessor);
Assert.AreEqual(headerValue, sut.TestGetHeaderValue(HeaderName));
}
}
internal class TestRequestHeaderHandler : RequestHeaderHandler
{
public TestRequestHeaderHandler(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
public string? TestGetHeaderValue(string headerName) => base.GetHeaderValue(headerName);
}

View File

@@ -21,7 +21,7 @@ public class ApiMediaUrlProviderTests : PropertyValueConverterTests
var publishedUrlProvider = new Mock<IPublishedUrlProvider>();
publishedUrlProvider
.Setup(p => p.GetMediaUrl(content.Object, UrlMode.Relative, It.IsAny<string?>(), It.IsAny<string?>(), It.IsAny<Uri?>()))
.Setup(p => p.GetMediaUrl(content.Object, UrlMode.Default, It.IsAny<string?>(), It.IsAny<string?>(), It.IsAny<Uri?>()))
.Returns(publishedUrl);
var apiMediaUrlProvider = new ApiMediaUrlProvider(publishedUrlProvider.Object);

View File

@@ -9,7 +9,6 @@ using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Infrastructure.DeliveryApi;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.DeliveryApi;
@@ -474,7 +473,7 @@ public class RichTextParserTests : PropertyValueConverterTests
Mock.Of<ILogger<ApiRichTextMarkupParser>>());
}
private void SetupTestContent(out IApiContentRouteBuilder routeBuilder, out IPublishedSnapshotAccessor snapshotAccessor, out IPublishedUrlProvider urlProvider)
private void SetupTestContent(out IApiContentRouteBuilder routeBuilder, out IPublishedSnapshotAccessor snapshotAccessor, out IApiMediaUrlProvider apiMediaUrlProvider)
{
var contentMock = new Mock<IPublishedContent>();
contentMock.SetupGet(m => m.Key).Returns(_contentKey);
@@ -502,14 +501,14 @@ public class RichTextParserTests : PropertyValueConverterTests
.Setup(m => m.Build(contentMock.Object, null))
.Returns(new ApiContentRoute("/some-content-path", new ApiContentStartItem(_contentRootKey, "the-root-path")));
var urlProviderMock = new Mock<IPublishedUrlProvider>();
urlProviderMock
.Setup(m => m.GetMediaUrl(mediaMock.Object, It.IsAny<UrlMode>(), It.IsAny<string?>(), It.IsAny<string>(), It.IsAny<Uri?>()))
var apiMediaUrlProviderMock = new Mock<IApiMediaUrlProvider>();
apiMediaUrlProviderMock
.Setup(m => m.GetUrl(mediaMock.Object))
.Returns("/some-media-url");
routeBuilder = routeBuilderMock.Object;
snapshotAccessor = snapshotAccessorMock.Object;
urlProvider = urlProviderMock.Object;
apiMediaUrlProvider = apiMediaUrlProviderMock.Object;
}
private IPublishedElement CreateElement(Guid id, int propertyValue)

View File

@@ -2,6 +2,7 @@
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Cache.PropertyEditors;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Models.Blocks;
using Umbraco.Cms.Core.PropertyEditors;
@@ -43,7 +44,7 @@ public class DataValueEditorReuseTests
_propertyEditorCollection,
_dataValueReferenceFactories,
Mock.Of<IDataTypeConfigurationCache>(),
Mock.Of<IContentTypeService>(),
Mock.Of<IBlockEditorElementTypeCache>(),
Mock.Of<ILocalizedTextService>(),
Mock.Of<ILogger<BlockListPropertyEditorBase.BlockListEditorPropertyValueEditor>>(),
Mock.Of<IShortStringHelper>(),

View File

@@ -31,7 +31,7 @@ public class ContentFinderByAliasWithDomainsTests : UrlRoutingTestBase
var request = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// must lookup domain
publishedRouter.FindDomain(request);
publishedRouter.FindAndSetDomain(request);
if (expectedNode > 0)
{

View File

@@ -207,7 +207,7 @@ public class ContentFinderByUrlWithDomainsTests : UrlRoutingTestBase
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// must lookup domain else lookup by URL fails
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
var lookup = new ContentFinderByUrl(Mock.Of<ILogger<ContentFinderByUrl>>(), umbracoContextAccessor);
var result = await lookup.TryFindContent(frequest);
@@ -245,7 +245,7 @@ public class ContentFinderByUrlWithDomainsTests : UrlRoutingTestBase
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// must lookup domain else lookup by URL fails
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
Assert.AreEqual(expectedCulture, frequest.Culture);
var lookup = new ContentFinderByUrl(Mock.Of<ILogger<ContentFinderByUrl>>(), umbracoContextAccessor);

View File

@@ -261,7 +261,7 @@ public class DomainsAndCulturesTests : UrlRoutingTestBase
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// lookup domain
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
Assert.AreEqual(expectedCulture, frequest.Culture);
@@ -310,7 +310,7 @@ public class DomainsAndCulturesTests : UrlRoutingTestBase
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// lookup domain
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
// find document
var finder = new ContentFinderByUrl(Mock.Of<ILogger<ContentFinderByUrl>>(), umbracoContextAccessor);
@@ -345,7 +345,7 @@ public class DomainsAndCulturesTests : UrlRoutingTestBase
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
// lookup domain
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
Assert.IsNotNull(frequest.Domain);
Assert.AreEqual(expectedCulture, frequest.Culture);

View File

@@ -62,7 +62,7 @@ public class UrlsWithNestedDomains : UrlRoutingTestBase
var publishedRouter = CreatePublishedRouter(umbracoContextAccessor);
var frequest = await publishedRouter.CreateRequestAsync(umbracoContext.CleanedUmbracoUrl);
publishedRouter.FindDomain(frequest);
publishedRouter.FindAndSetDomain(frequest);
Assert.IsTrue(frequest.HasDomain());
// check that it's been routed