Merge remote-tracking branch 'origin/netcore/netcore' into netcore/feature/8518-migrate-tests

# Conflicts:
#	src/Umbraco.Tests.Integration/Services/MacroServiceTests.cs
#	src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs
This commit is contained in:
Mole
2020-10-06 15:16:28 +02:00
17 changed files with 307 additions and 402 deletions

View File

@@ -1,11 +1,12 @@
using System;
using Examine;
using Microsoft.Extensions.Options;
using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
using Umbraco.Core.Composing.CompositionExtensions;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Grid;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Dashboards;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Events;
@@ -18,7 +19,6 @@ using Umbraco.Core.Migrations;
using Umbraco.Core.Migrations.Install;
using Umbraco.Core.Migrations.PostMigrations;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Templates;
using Umbraco.Core.Persistence;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.PropertyEditors.Validators;
@@ -29,6 +29,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
using Umbraco.Core.Strings;
using Umbraco.Core.Sync;
using Umbraco.Core.Templates;
using Umbraco.Examine;
using Umbraco.Infrastructure.Examine;
using Umbraco.Infrastructure.Media;
@@ -41,6 +42,7 @@ using Umbraco.Web.Features;
using Umbraco.Web.HealthCheck;
using Umbraco.Web.HealthCheck.NotificationMethods;
using Umbraco.Web.Install;
using Umbraco.Web.Media;
using Umbraco.Web.Media.EmbedProviders;
using Umbraco.Web.Migrations.PostMigrations;
using Umbraco.Web.Models.PublishedContent;
@@ -55,9 +57,6 @@ using Umbraco.Web.Templates;
using Umbraco.Web.Trees;
using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidator;
using TextStringValueConverter = Umbraco.Core.PropertyEditors.ValueConverters.TextStringValueConverter;
using Umbraco.Core.Configuration.Models;
using Microsoft.Extensions.Options;
using Umbraco.Web.Media;
namespace Umbraco.Core.Runtime
{
@@ -204,13 +203,6 @@ namespace Umbraco.Core.Runtime
// Config manipulator
composition.RegisterUnique<IConfigManipulator, JsonConfigManipulator>();
// register the http context and umbraco context accessors
// we *should* use the HttpContextUmbracoContextAccessor, however there are cases when
// we have no http context, eg when booting Umbraco or in background threads, so instead
// let's use an hybrid accessor that can fall back to a ThreadStatic context.
composition.RegisterUnique<IUmbracoContextAccessor, HybridUmbracoContextAccessor>();
// register the umbraco context factory
// composition.RegisterUnique<IUmbracoContextFactory, UmbracoContextFactory>();
composition.RegisterUnique<IPublishedUrlProvider, UrlProvider>();
@@ -353,7 +345,6 @@ namespace Umbraco.Core.Runtime
return new PublishedContentQuery(umbCtx.UmbracoContext.PublishedSnapshot, factory.GetInstance<IVariationContextAccessor>(), factory.GetInstance<IExamineManager>());
}, Lifetime.Request);
composition.RegisterUnique<IPublishedUrlProvider, UrlProvider>();
// register the http context and umbraco context accessors

View File

@@ -26,7 +26,7 @@ namespace Umbraco.Tests.Common.Builders
private string _icon;
private string _name;
private IEnumerable<string> _permissions = Enumerable.Empty<string>();
private IEnumerable<string> _sectionCollection = Enumerable.Empty<string>();
private IEnumerable<string> _allowedSections = Enumerable.Empty<string>();
private string _suffix;
private int? _startContentId;
private int? _startMediaId;
@@ -55,7 +55,7 @@ namespace Umbraco.Tests.Common.Builders
public UserGroupBuilder<TParent> WithPermissions(string permissions)
{
_permissions = permissions.Split();
_permissions = permissions.ToCharArray().Select(x => x.ToString());
return this;
}
@@ -65,6 +65,12 @@ namespace Umbraco.Tests.Common.Builders
return this;
}
public UserGroupBuilder<TParent> WithAllowedSections(IList<string> allowedSections)
{
_allowedSections = allowedSections;
return this;
}
public UserGroupBuilder<TParent> WithStartContentId(int startContentId)
{
_startContentId = startContentId;
@@ -107,9 +113,9 @@ namespace Umbraco.Tests.Common.Builders
userGroup.StartContentId = startContentId;
userGroup.StartMediaId = startMediaId;
foreach (var item in _sectionCollection)
foreach (var section in _allowedSections)
{
userGroup.AddAllowedSection(item);
userGroup.AddAllowedSection(section);
}
return userGroup;

View File

@@ -1,62 +0,0 @@
using Moq;
using System;
using System.Collections.Generic;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Models.Membership;
namespace Umbraco.Tests.Common.TestHelpers.Entities
{
public static class MockedUser
{
/// <summary>
/// Returns a <see cref="Mock{IUser}"/> and ensures that the ToUserCache and FromUserCache methods are mapped correctly for
/// dealing with start node caches
/// </summary>
/// <returns></returns>
public static Mock<IUser> GetUserMock()
{
var userCache = new Dictionary<string, object>();
var userMock = new Mock<IUser>();
userMock.Setup(x => x.FromUserCache<int[]>(It.IsAny<string>())).Returns((string key) => userCache.TryGetValue(key, out var val) ? val is int[] iVal ? iVal : null : null);
userMock.Setup(x => x.ToUserCache<int[]>(It.IsAny<string>(), It.IsAny<int[]>())).Callback((string key, int[] val) => userCache[key] = val);
return userMock;
}
public static User CreateUser(string suffix = "")
{
var globalSettings = new GlobalSettings();
var user = new User(globalSettings)
{
Language = "en",
IsApproved = true,
Name = "TestUser" + suffix,
RawPasswordValue = "testing",
IsLockedOut = false,
Email = "test" + suffix + "@test.com",
Username = "TestUser" + suffix
};
return user;
}
public static IEnumerable<IUser> CreateMulipleUsers(int amount, Action<int, IUser> onCreating = null)
{
var list = new List<IUser>();
var globalSettings = new GlobalSettings();
for (var i = 0; i < amount; i++)
{
var name = "Member No-" + i;
var user = new User(globalSettings, name, "test" + i + "@test.com", "test" + i, "test" + i);
onCreating?.Invoke(i, user);
user.ResetDirtyProperties(false);
list.Add(user);
}
return list;
}
}
}

View File

@@ -9,7 +9,7 @@ using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Integration.Testing;
using Umbraco.Tests.Testing;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.Integration.Services
{
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)]

View File

@@ -7,24 +7,29 @@ using Umbraco.Core.Models;
using Umbraco.Core.Persistence.Repositories.Implement;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Integration.Testing;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Testing;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.Integration.Services
{
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest,
PublishedRepositoryEvents = true,
WithApplication = true,
Logger = UmbracoTestOptions.Logger.Console)]
public class ContentServiceEventTests : TestWithSomeContentBase
public class ContentServiceEventTests : UmbracoIntegrationTest
{
private IContentTypeService ContentTypeService => GetRequiredService<IContentTypeService>();
private ContentService ContentService => (ContentService)GetRequiredService<IContentService>();
private ILocalizationService LocalizationService => GetRequiredService<ILocalizationService>();
private IFileService FileService => GetRequiredService<IFileService>();
private GlobalSettings _globalSettings;
public override void SetUp()
[SetUp]
public void SetupTest()
{
base.SetUp();
ContentRepositoryBase.ThrowOnWarning = true;
_globalSettings = new GlobalSettings();
}
@@ -38,28 +43,22 @@ namespace Umbraco.Tests.Services
[Test]
public void Saving_Culture()
{
var languageService = ServiceContext.LocalizationService;
languageService.Save(new Language(_globalSettings, "fr-FR"));
var contentTypeService = ServiceContext.ContentTypeService;
LocalizationService.Save(new Language(_globalSettings, "fr-FR"));
var contentType = MockedContentTypes.CreateTextPageContentType();
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
FileService.SaveTemplate(contentType.DefaultTemplate);
contentType.Variations = ContentVariation.Culture;
foreach (var propertyType in contentType.PropertyTypes)
propertyType.Variations = ContentVariation.Culture;
contentTypeService.Save(contentType);
var contentService = ServiceContext.ContentService;
ContentTypeService.Save(contentType);
IContent document = new Content("content", -1, contentType);
document.SetCultureName("hello", "en-US");
document.SetCultureName("bonjour", "fr-FR");
contentService.Save(document);
ContentService.Save(document);
//re-get - dirty properties need resetting
document = contentService.GetById(document.Id);
document = ContentService.GetById(document.Id);
// properties: title, bodyText, keywords, description
document.SetValue("title", "title-en", "en-US");
@@ -88,7 +87,7 @@ namespace Umbraco.Tests.Services
ContentService.Saved += OnSaved;
try
{
contentService.Save(document);
ContentService.Save(document);
}
finally
{
@@ -100,13 +99,9 @@ namespace Umbraco.Tests.Services
[Test]
public void Saving_Set_Value()
{
var contentTypeService = ServiceContext.ContentTypeService;
var contentType = MockedContentTypes.CreateTextPageContentType();
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
contentTypeService.Save(contentType);
var contentService = ServiceContext.ContentService;
FileService.SaveTemplate(contentType.DefaultTemplate);
ContentTypeService.Save(contentType);
IContent document = new Content("content", -1, contentType);
@@ -136,44 +131,37 @@ namespace Umbraco.Tests.Services
ContentService.Saved += OnSaved;
try
{
contentService.Save(document);
ContentService.Save(document);
}
finally
{
ContentService.Saving -= OnSaving;
ContentService.Saved -= OnSaved;
}
}
[Test]
public void Publishing_Culture()
{
var languageService = ServiceContext.LocalizationService;
languageService.Save(new Language(_globalSettings, "fr-FR"));
var contentTypeService = ServiceContext.ContentTypeService;
LocalizationService.Save(new Language(_globalSettings, "fr-FR"));
var contentType = MockedContentTypes.CreateTextPageContentType();
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
FileService.SaveTemplate(contentType.DefaultTemplate);
contentType.Variations = ContentVariation.Culture;
foreach (var propertyType in contentType.PropertyTypes)
propertyType.Variations = ContentVariation.Culture;
contentTypeService.Save(contentType);
var contentService = ServiceContext.ContentService;
ContentTypeService.Save(contentType);
IContent document = new Content("content", -1, contentType);
document.SetCultureName("hello", "en-US");
document.SetCultureName("bonjour", "fr-FR");
contentService.Save(document);
ContentService.Save(document);
Assert.IsFalse(document.IsCulturePublished("fr-FR"));
Assert.IsFalse(document.IsCulturePublished("en-US"));
//re-get - dirty properties need resetting
document = contentService.GetById(document.Id);
document = ContentService.GetById(document.Id);
void OnPublishing(IContentService sender, ContentPublishingEventArgs e)
{
@@ -199,7 +187,7 @@ namespace Umbraco.Tests.Services
ContentService.Published += OnPublished;
try
{
contentService.SaveAndPublish(document, "fr-FR");
ContentService.SaveAndPublish(document, "fr-FR");
}
finally
{
@@ -207,7 +195,7 @@ namespace Umbraco.Tests.Services
ContentService.Published -= OnPublished;
}
document = contentService.GetById(document.Id);
document = ContentService.GetById(document.Id);
// ensure it works and does not throw
Assert.IsTrue(document.IsCulturePublished("fr-FR"));
@@ -217,13 +205,9 @@ namespace Umbraco.Tests.Services
[Test]
public void Publishing_Set_Value()
{
var contentTypeService = ServiceContext.ContentTypeService;
var contentType = MockedContentTypes.CreateTextPageContentType();
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
contentTypeService.Save(contentType);
var contentService = ServiceContext.ContentService;
FileService.SaveTemplate(contentType.DefaultTemplate);
ContentTypeService.Save(contentType);
IContent document = new Content("content", -1, contentType);
@@ -242,21 +226,21 @@ namespace Umbraco.Tests.Services
Assert.AreSame("title", document.GetValue<string>("title"));
//we're only dealing with invariant here
// We're only dealing with invariant here.
var propValue = saved.Properties["title"].Values.First(x => x.Culture == null && x.Segment == null);
Assert.AreEqual("title", propValue.EditedValue);
Assert.AreEqual("title", propValue.PublishedValue);
}
//We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be
//used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model
//are published, but Saving is raised BEFORE.
// We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be
// used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model
// are published, but Saving is raised BEFORE.
ContentService.Saving += OnSaving;
ContentService.Saved += OnSaved;
try
{
contentService.SaveAndPublish(document);
ContentService.SaveAndPublish(document);
}
finally
{
@@ -268,19 +252,15 @@ namespace Umbraco.Tests.Services
[Test]
public void Publishing_Set_Mandatory_Value()
{
var contentTypeService = ServiceContext.ContentTypeService;
var contentType = MockedContentTypes.CreateTextPageContentType();
var titleProperty = contentType.PropertyTypes.First(x => x.Alias == "title");
titleProperty.Mandatory = true; // make this required!
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
contentTypeService.Save(contentType);
var contentService = ServiceContext.ContentService;
FileService.SaveTemplate(contentType.DefaultTemplate);
ContentTypeService.Save(contentType);
IContent document = new Content("content", -1, contentType);
var result = contentService.SaveAndPublish(document);
var result = ContentService.SaveAndPublish(document);
Assert.IsFalse(result.Success);
Assert.AreEqual("title", result.InvalidProperties.First().Alias);
@@ -297,13 +277,13 @@ namespace Umbraco.Tests.Services
saved.SetValue("title", "title");
}
//We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be
//used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model
//are published, but Saving is raised BEFORE.
// We are binding to Saving (not Publishing), because the Publishing event is really just used for cancelling, it should not be
// used for setting values and it won't actually work! This is because the Publishing event is raised AFTER the values on the model
// are published, but Saving is raised BEFORE.
ContentService.Saving += OnSaving;
try
{
result = contentService.SaveAndPublish(document);
result = ContentService.SaveAndPublish(document);
Assert.IsTrue(result.Success); //will succeed now because we were able to specify the required value in the Saving event
}
finally
@@ -315,20 +295,16 @@ namespace Umbraco.Tests.Services
[Test]
public void Unpublishing_Culture()
{
var languageService = ServiceContext.LocalizationService;
languageService.Save(new Language(_globalSettings, "fr-FR"));
var contentTypeService = ServiceContext.ContentTypeService;
LocalizationService.Save(new Language(_globalSettings, "fr-FR"));
var contentType = MockedContentTypes.CreateTextPageContentType();
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate);
FileService.SaveTemplate(contentType.DefaultTemplate);
contentType.Variations = ContentVariation.Culture;
foreach (var propertyType in contentType.PropertyTypes)
propertyType.Variations = ContentVariation.Culture;
contentTypeService.Save(contentType);
ContentTypeService.Save(contentType);
var contentService = (ContentService)ServiceContext.ContentService;
var contentService = (ContentService)ContentService;
IContent document = new Content("content", -1, contentType);
document.SetCultureName("hello", "en-US");

View File

@@ -9,10 +9,12 @@ using Umbraco.Core.Models;
using Umbraco.Core.Persistence.Repositories.Implement;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Tests.Integration.Testing;
using Umbraco.Tests.Testing;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.Integration.Services
{
[TestFixture]
[Apartment(ApartmentState.STA)]
@@ -20,19 +22,13 @@ namespace Umbraco.Tests.Services
public class MacroServiceTests : UmbracoIntegrationTest
{
private IMacroService MacroService => GetRequiredService<IMacroService>();
[SetUp]
public void SetupTestData()
public void SetupTest()
{
CreateTestData();
}
public void CreateTestData()
{
var provider = ScopeProvider;
using (var scope = provider.CreateScope())
var sp = ScopeProvider;
using (var scope = sp.CreateScope())
{
var repository = new MacroRepository((IScopeAccessor) provider, AppCaches.Disabled, Mock.Of<ILogger>(), ShortStringHelper);
var repository = new MacroRepository((IScopeAccessor) sp, AppCaches.Disabled, Mock.Of<ILogger>(), ShortStringHelper);
repository.Save(new Macro(ShortStringHelper, "test1", "Test1", "~/views/macropartials/test1.cshtml"));
repository.Save(new Macro(ShortStringHelper, "test2", "Test2", "~/views/macropartials/test2.cshtml"));
@@ -41,19 +37,13 @@ namespace Umbraco.Tests.Services
}
}
[TearDown]
public override void TearDown()
{
base.TearDown();
}
[Test]
public void Can_Get_By_Alias()
{
// Act
var macro = MacroService.GetByAlias("test1");
//assert
// Assert
Assert.IsNotNull(macro);
Assert.AreEqual("Test1", macro.Name);
}
@@ -64,7 +54,7 @@ namespace Umbraco.Tests.Services
// Act
var result = MacroService.GetAll();
//assert
// Assert
Assert.AreEqual(3, result.Count());
}
@@ -72,10 +62,12 @@ namespace Umbraco.Tests.Services
public void Can_Create()
{
// Act
var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
var macro = CreateMacro();
MacroService.Save(macro);
//assert
MacroService.Save(macro);
// Assert
Assert.IsTrue(macro.HasIdentity);
Assert.Greater(macro.Id, 0);
Assert.AreNotEqual(Guid.Empty, macro.Key);
@@ -95,13 +87,14 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Delete()
{
// Arrange
var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
MacroService.Save(macro);
// Act
MacroService.Delete(macro);
//assert
// Assert
var result = MacroService.GetById(macro.Id);
Assert.IsNull(result);
@@ -112,7 +105,8 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Update()
{
IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
// Arrange
var macro = CreateMacro();
MacroService.Save(macro);
// Act
@@ -121,10 +115,9 @@ namespace Umbraco.Tests.Services
macro.Alias = "NewAlias";
MacroService.Save(macro);
macro = MacroService.GetById(macro.Id);
//assert
// Assert
Assert.AreEqual("New name", macro.Name);
Assert.AreEqual("NewAlias", macro.Alias);
Assert.AreEqual(currKey, macro.Key);
@@ -134,7 +127,8 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Update_Property()
{
IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
// Arrange
var macro = CreateMacro();
macro.Properties.Add(new MacroProperty("blah", "Blah", 0, "blah"));
MacroService.Save(macro);
@@ -150,7 +144,7 @@ namespace Umbraco.Tests.Services
macro = MacroService.GetById(macro.Id);
//assert
// Assert
Assert.AreEqual(1, macro.Properties.Count);
Assert.AreEqual(currPropKey, macro.Properties[0].Key);
Assert.AreEqual("new Alias", macro.Properties[0].Alias);
@@ -163,7 +157,8 @@ namespace Umbraco.Tests.Services
[Test]
public void Can_Update_Remove_Property()
{
IMacro macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
// Arrange
var macro = CreateMacro();
macro.Properties.Add(new MacroProperty("blah1", "Blah1", 0, "blah1"));
macro.Properties.Add(new MacroProperty("blah2", "Blah2", 1, "blah2"));
macro.Properties.Add(new MacroProperty("blah3", "Blah3", 2, "blah3"));
@@ -190,7 +185,7 @@ namespace Umbraco.Tests.Services
macro = MacroService.GetById(macro.Id);
//assert
// Assert
Assert.AreEqual(2, macro.Properties.Count);
Assert.AreEqual("newAlias", macro.Properties["newAlias"].Alias);
Assert.AreEqual("new Name", macro.Properties["newAlias"].Name);
@@ -200,15 +195,14 @@ namespace Umbraco.Tests.Services
{
Assert.AreEqual(propKey.Key, macro.Properties[propKey.Alias].Key);
}
}
[Test]
public void Can_Add_And_Remove_Properties()
{
var macro = new Macro(ShortStringHelper, "test", "Test", "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
var macro = CreateMacro();
//adds some properties
// Adds some properties
macro.Properties.Add(new MacroProperty("blah1", "Blah1", 0, "blah1"));
macro.Properties.Add(new MacroProperty("blah2", "Blah2", 0, "blah2"));
macro.Properties.Add(new MacroProperty("blah3", "Blah3", 0, "blah3"));
@@ -218,19 +212,18 @@ namespace Umbraco.Tests.Services
var result1 = MacroService.GetById(macro.Id);
Assert.AreEqual(4, result1.Properties.Values.Count());
//simulate clearing the sections
// Simulate clearing the sections
foreach (var s in result1.Properties.Values.ToArray())
{
result1.Properties.Remove(s.Alias);
}
//now just re-add a couple
// Now just re-add a couple
result1.Properties.Add(new MacroProperty("blah3", "Blah3", 0, "blah3"));
result1.Properties.Add(new MacroProperty("blah4", "Blah4", 0, "blah4"));
MacroService.Save(result1);
//assert
//re-get
// Assert
result1 = MacroService.GetById(result1.Id);
Assert.AreEqual(2, result1.Properties.Values.Count());
@@ -239,21 +232,21 @@ namespace Umbraco.Tests.Services
[Test]
public void Cannot_Save_Macro_With_Empty_Name()
{
var macro = new Macro(ShortStringHelper, "test", string.Empty, "~/Views/MacroPartials/Test.cshtml", cacheDuration: 1234);
// Arrange
var macro = CreateMacro(name: string.Empty);
// Act & Assert
Assert.Throws<ArgumentException>(() => MacroService.Save(macro));
}
//[Test]
//public void Can_Get_Many_By_Alias()
//{
// // Act
// var result = MacroService.GetAll("test1", "test2");
// //assert
// Assert.AreEqual(2, result.Count());
//}
private static IMacro CreateMacro(string name = "Test")
{
return new MacroBuilder()
.WithAlias("test")
.WithName(name)
.WithSource("~/Views/MacroPartials/Test.cshtml")
.WithCacheDuration(1234)
.Build();
}
}
}

View File

@@ -1,17 +1,14 @@
using NUnit.Framework;
using System.Linq;
using System.Linq;
using System.Threading;
using Umbraco.Core;
using Umbraco.Core.Composing;
using NUnit.Framework;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Integration.Testing;
using Umbraco.Tests.Testing;
using Umbraco.Web.Services;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.Integration.Services
{
/// <summary>
/// Tests covering the SectionService

View File

@@ -26,7 +26,7 @@ namespace Umbraco.Tests.Integration.Services
private IContentTypeService ContentTypeService => GetRequiredService<IContentTypeService>();
private ITagService TagService => GetRequiredService<ITagService>();
private IDataTypeService DataTypeService => GetRequiredService<IDataTypeService>();
public PropertyEditorCollection PropertyEditorCollection => GetRequiredService<PropertyEditorCollection>();
private PropertyEditorCollection PropertyEditorCollection => GetRequiredService<PropertyEditorCollection>();
[Test]
public void TagApiConsistencyTest()

View File

@@ -12,11 +12,12 @@ using Umbraco.Core.Models.Membership;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Tests.Integration.Testing;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Testing;
using Umbraco.Web.Actions;
using MockedUser = Umbraco.Tests.Common.TestHelpers.Entities.MockedUser;
namespace Umbraco.Tests.Integration.Services
{
@@ -495,10 +496,10 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Find_By_Email_Starts_With()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
//don't find this
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.Email = "hello@hello.com";
UserService.Save(customUser);
@@ -510,10 +511,10 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Find_By_Email_Ends_With()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
//include this
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.Email = "hello@test.com";
UserService.Save(customUser);
@@ -525,10 +526,10 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Find_By_Email_Contains()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
//include this
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.Email = "hello@test.com";
UserService.Save(customUser);
@@ -540,10 +541,10 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Find_By_Email_Exact()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
//include this
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.Email = "hello@test.com";
UserService.Save(customUser);
@@ -555,7 +556,7 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Get_All_Paged_Users()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
var found = UserService.GetAll(0, 2, out var totalRecs);
@@ -570,7 +571,7 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Get_All_Paged_Users_With_Filter()
{
var users = MockedUser.CreateMulipleUsers(10).ToArray();
var users = CreateMulipleUsers(10).ToArray();
UserService.Save(users);
var found = UserService.GetAll(0, 2, out var totalRecs, "username", Direction.Ascending, filter: "test");
@@ -587,7 +588,7 @@ namespace Umbraco.Tests.Integration.Services
var userGroup = MockedUserGroup.CreateUserGroup();
UserService.Save(userGroup);
var users = MockedUser.CreateMulipleUsers(10).ToArray();
var users = CreateMulipleUsers(10).ToArray();
for (var i = 0; i < 10;)
{
users[i].AddGroup(userGroup.ToReadOnlyGroup());
@@ -610,7 +611,7 @@ namespace Umbraco.Tests.Integration.Services
var userGroup = MockedUserGroup.CreateUserGroup();
UserService.Save(userGroup);
var users = MockedUser.CreateMulipleUsers(10).ToArray();
var users = CreateMulipleUsers(10).ToArray();
for (var i = 0; i < 10;)
{
users[i].AddGroup(userGroup.ToReadOnlyGroup());
@@ -635,9 +636,9 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Count_All_Users()
{
var users = MockedUser.CreateMulipleUsers(10);
var users = CreateMulipleUsers(10);
UserService.Save(users);
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
UserService.Save(customUser);
var found = UserService.GetCount(MemberCountType.All);
@@ -650,20 +651,20 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Count_All_Online_Users()
{
var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.LastLoginDate = DateTime.Now.AddMinutes(i * -2));
var users = CreateMulipleUsers(10, (i, member) => member.LastLoginDate = DateTime.Now.AddMinutes(i * -2));
UserService.Save(users);
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
throw new NotImplementedException();
}
[Test]
public void Count_All_Locked_Users()
{
var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.IsLockedOut = i % 2 == 0);
var users = CreateMulipleUsers(10, (i, member) => member.IsLockedOut = i % 2 == 0);
UserService.Save(users);
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.IsLockedOut = true;
UserService.Save(customUser);
@@ -675,10 +676,10 @@ namespace Umbraco.Tests.Integration.Services
[Test]
public void Count_All_Approved_Users()
{
var users = MockedUser.CreateMulipleUsers(10, (i, member) => member.IsApproved = i % 2 == 0);
var users = CreateMulipleUsers(10, (i, member) => member.IsApproved = i % 2 == 0);
UserService.Save(users);
var customUser = MockedUser.CreateUser();
var customUser = CreateUser();
customUser.IsApproved = false;
UserService.Save(customUser);
@@ -896,7 +897,7 @@ namespace Umbraco.Tests.Integration.Services
public void Get_By_Profile_Id()
{
// Arrange
var user = (IUser)UserService.CreateUserWithIdentity("test1", "test1@test.com");
var user = UserService.CreateUserWithIdentity("test1", "test1@test.com");
// Act
var profile = UserService.GetProfileById((int)user.Id);
@@ -908,7 +909,7 @@ namespace Umbraco.Tests.Integration.Services
}
[Test]
public void Get_By_Profile_Id_Must_return_null_if_user_not_exists()
public void Get_By_Profile_Id_Must_Return_Null_If_User_Does_Not_Exist()
{
var profile = UserService.GetProfileById(42);
@@ -917,7 +918,7 @@ namespace Umbraco.Tests.Integration.Services
}
[Test]
public void GetProfilesById_Must_empty_if_users_not_exists()
public void GetProfilesById_Must_Return_Empty_If_User_Does_Not_Exist()
{
var profiles = UserService.GetProfilesById(42);
@@ -983,6 +984,39 @@ namespace Umbraco.Tests.Integration.Services
return startContentItems.ToArray();
}
private static IEnumerable<IUser> CreateMulipleUsers(int amount, Action<int, IUser> onCreating = null)
{
var list = new List<IUser>();
for (var i = 0; i < amount; i++)
{
var name = "User No-" + i;
var user = new UserBuilder()
.WithName(name)
.WithEmail("test" + i + "@test.com")
.WithLogin("test" + i, "test" + i)
.Build();
onCreating?.Invoke(i, user);
user.ResetDirtyProperties(false);
list.Add(user);
}
return list;
}
private static User CreateUser(string suffix = "")
{
return new UserBuilder()
.WithIsApproved(true)
.WithName("TestUser" + suffix)
.WithLogin("TestUser" + suffix, "testing")
.WithEmail("test" + suffix + "@test.com")
.Build();
}
private IUser CreateTestUser(out IUserGroup userGroup)
{
userGroup = CreateTestUserGroup();
@@ -1018,19 +1052,16 @@ namespace Umbraco.Tests.Integration.Services
private UserGroup CreateTestUserGroup(string alias = "testGroup", string name = "Test Group")
{
var userGroup = new UserGroup(ShortStringHelper)
{
Alias = alias,
Name = name,
Permissions = "ABCDEFGHIJ1234567".ToCharArray().Select(x => x.ToString())
};
userGroup.AddAllowedSection("content");
userGroup.AddAllowedSection("media");
var userGroup = new UserGroupBuilder()
.WithAlias(alias)
.WithName(name)
.WithPermissions("ABCDEFGHIJ1234567")
.WithAllowedSections(new[] { "content", "media" })
.Build();
UserService.Save(userGroup);
return userGroup;
return (UserGroup)userGroup;
}
}
}

View File

@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
@@ -10,8 +7,8 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Web.Editors;
namespace Umbraco.Tests.Web.Controllers
@@ -22,8 +19,8 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Admin_Is_Authorized()
{
var currentUser = GetAdminUser();
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateAdminUser();
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -36,7 +33,7 @@ namespace Umbraco.Tests.Web.Controllers
userService.Object,
entityService.Object);
var result = authHelper.IsAuthorized(currentUser, savingUser.Object, new int[0], new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]);
Assert.IsTrue(result.Success);
}
@@ -44,8 +41,8 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Non_Admin_Cannot_Save_Admin()
{
var currentUser = MockedUser.GetUserMock();
var savingUser = GetAdminUser();
var currentUser = CreateUser();
var savingUser = CreateAdminUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -58,7 +55,7 @@ namespace Umbraco.Tests.Web.Controllers
userService.Object,
entityService.Object);
var result = authHelper.IsAuthorized(currentUser.Object, savingUser, new int[0], new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]);
Assert.IsFalse(result.Success);
}
@@ -66,12 +63,8 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Cannot_Grant_Group_Membership_Without_Being_A_Member()
{
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.Groups).Returns(new[]
{
new ReadOnlyUserGroup(1, "Test", "icon-user", null, null, "test", new string[0], new string[0])
});
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(withGroup: true);
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -84,7 +77,7 @@ namespace Umbraco.Tests.Web.Controllers
userService.Object,
entityService.Object);
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new int[0], new[] {"FunGroup"});
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] {"FunGroup"});
Assert.IsFalse(result.Success);
}
@@ -92,12 +85,8 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Can_Grant_Group_Membership_With_Being_A_Member()
{
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.Groups).Returns(new[]
{
new ReadOnlyUserGroup(1, "Test", "icon-user", null, null, "test", new string[0], new string[0])
});
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(withGroup: true);
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -110,7 +99,7 @@ namespace Umbraco.Tests.Web.Controllers
userService.Object,
entityService.Object);
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new int[0], new[] { "test" });
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] { "test" });
Assert.IsTrue(result.Success);
}
@@ -126,10 +115,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
savingUser.Setup(x => x.StartContentIds).Returns(new[] { 1234 });
var currentUser = CreateUser(startContentIds: new[] { 9876 });
var savingUser = CreateUser(startContentIds: new[] { 1234 });
var contentService = new Mock<IContentService>();
contentService.Setup(x => x.GetById(It.IsAny<int>()))
@@ -150,7 +137,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 1234, 5555 }, new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234, 5555 }, new int[0], new string[0]);
Assert.IsTrue(result.Success);
}
@@ -166,10 +153,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
savingUser.Setup(x => x.StartContentIds).Returns(new[] { 1234, 4567 });
var currentUser = CreateUser(startContentIds: new[] { 9876 });
var savingUser = CreateUser(startContentIds: new[] { 1234, 4567 });
var contentService = new Mock<IContentService>();
contentService.Setup(x => x.GetById(It.IsAny<int>()))
@@ -190,7 +175,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 1234 }, new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234 }, new int[0], new string[0]);
Assert.IsTrue(result.Success);
}
@@ -206,9 +191,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(startContentIds: new[] { 9876 });
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
contentService.Setup(x => x.GetById(It.IsAny<int>()))
@@ -229,7 +213,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 1234 but currentUser doesn't have access to it ... nope
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new []{1234}, new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new []{1234}, new int[0], new string[0]);
Assert.IsFalse(result.Success);
}
@@ -245,9 +229,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(startContentIds: new[] { 9876 });
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
contentService.Setup(x => x.GetById(It.IsAny<int>()))
@@ -268,7 +251,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 5555 which currentUser has access to since it's a child of 9876 ... ok
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new[] { 5555 }, new int[0], new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 5555 }, new int[0], new string[0]);
Assert.IsTrue(result.Success);
}
@@ -285,9 +268,8 @@ namespace Umbraco.Tests.Web.Controllers
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartContentIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -308,7 +290,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 1234 but currentUser doesn't have access to it ... nope
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] {1234}, new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] {1234}, new string[0]);
Assert.IsFalse(result.Success);
}
@@ -324,9 +306,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
var savingUser = CreateUser();
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -347,7 +328,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 5555 which currentUser has access to since it's a child of 9876 ... ok
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 5555 }, new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 5555 }, new string[0]);
Assert.IsTrue(result.Success);
}
@@ -363,10 +344,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
savingUser.Setup(x => x.StartMediaIds).Returns(new[] { 1234 });
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
var savingUser = CreateUser(startMediaIds: new[] { 1234 });
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -387,7 +366,7 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 1234, 5555 }, new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234, 5555 }, new string[0]);
Assert.IsTrue(result.Success);
}
@@ -403,10 +382,8 @@ namespace Umbraco.Tests.Web.Controllers
{4567, "-1,4567"},
};
var currentUser = MockedUser.GetUserMock();
currentUser.Setup(x => x.StartMediaIds).Returns(new[] { 9876 });
var savingUser = MockedUser.GetUserMock();
savingUser.Setup(x => x.StartMediaIds).Returns(new[] { 1234, 4567 });
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
var savingUser = CreateUser(startMediaIds: new[] { 1234, 4567 });
var contentService = new Mock<IContentService>();
var mediaService = new Mock<IMediaService>();
@@ -427,19 +404,37 @@ namespace Umbraco.Tests.Web.Controllers
entityService.Object);
//removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok
var result = authHelper.IsAuthorized(currentUser.Object, savingUser.Object, new int[0], new[] { 1234 }, new string[0]);
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234 }, new string[0]);
Assert.IsTrue(result.Success);
}
private IUser GetAdminUser()
private static IUser CreateUser(bool withGroup = false, int[] startContentIds = null, int[] startMediaIds = null)
{
var admin = MockedUser.GetUserMock();
admin.Setup(x => x.Groups).Returns(new[]
var builder = new UserBuilder()
.WithStartContentIds(startContentIds != null ? startContentIds : new int[0])
.WithStartMediaIds(startMediaIds != null ? startMediaIds : new int[0]);
if (withGroup)
{
new ReadOnlyUserGroup(1, "Admin", "icon-user", null, null, Constants.Security.AdminGroupAlias, new string[0], new string[0])
});
return admin.Object;
builder = (UserBuilder)builder
.AddUserGroup()
.WithName("Test")
.WithAlias("test")
.Done();
}
return builder.Build();
}
private static IUser CreateAdminUser()
{
return new UserBuilder()
.AddUserGroup()
.WithId(1)
.WithName("Admin")
.WithAlias(Constants.Security.AdminGroupAlias)
.Done()
.Build();
}
}
}

View File

@@ -5,7 +5,7 @@ using NUnit.Framework;
using Umbraco.Core.Events;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Tests.Services
namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Services
{
[TestFixture]
public class AmbiguousEventTests
@@ -75,4 +75,4 @@ namespace Umbraco.Tests.Services
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System.Linq;
using NUnit.Framework;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
@@ -41,7 +41,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
Assert.AreEqual(testName, userGroup.Name);
Assert.AreEqual(testUserCount, userGroup.UserCount);
Assert.AreEqual(testIcon, userGroup.Icon);
Assert.AreEqual(testPermissions, string.Join(string.Empty, userGroup.Permissions));
Assert.AreEqual(testPermissions.Length, userGroup.Permissions.Count());
Assert.AreEqual(testStartContentId, userGroup.StartContentId);
Assert.AreEqual(testStartMediaId, userGroup.StartMediaId);
}

View File

@@ -1,27 +1,23 @@
using System.Collections.Generic;
using Moq;
using Moq;
using NUnit.Framework;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
namespace Umbraco.Tests.Web.Controllers
{
[TestFixture]
public class ContentControllerUnitTests
{
[Test]
public void Access_Allowed_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -44,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Content_Found()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -72,10 +66,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 9876 });
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 9876);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -103,9 +94,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -134,10 +123,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_Allowed_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var contentMock = new Mock<IContent>();
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
var content = contentMock.Object;
@@ -166,10 +152,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -188,10 +171,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -210,10 +190,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startContentId: 1234);
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -234,10 +211,8 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startContentId: 1234);
var contentServiceMock = new Mock<IContentService>();
var contentService = contentServiceMock.Object;
var userServiceMock = new Mock<IUserService>();
@@ -258,10 +233,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -276,7 +248,6 @@ namespace Umbraco.Tests.Web.Controllers
var entityServiceMock = new Mock<IEntityService>();
var entityService = entityServiceMock.Object;
//act
var result = ContentPermissionsHelper.CheckPermissions(-1, user, userService, contentService, entityService, out var foundContent, new[] { 'A' });
@@ -288,9 +259,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
var user = userMock.Object;
var user = CreateUser(withUserGroup: false);
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -316,10 +285,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -346,9 +312,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Permission()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
var user = userMock.Object;
var user = CreateUser(withUserGroup: false);
var userServiceMock = new Mock<IUserService>();
var permissions = new EntityPermissionCollection
@@ -369,6 +333,24 @@ namespace Umbraco.Tests.Web.Controllers
//assert
Assert.AreEqual(ContentPermissionsHelper.ContentAccess.Denied, result);
}
private IUser CreateUser(int id = 0, int? startContentId = null, bool withUserGroup = true)
{
var builder = new UserBuilder()
.WithId(id)
.WithStartContentIds(startContentId.HasValue ? new[] { startContentId.Value } : new int[0]);
if (withUserGroup)
{
builder = builder
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done();
}
return builder.Build();
}
}
//NOTE: The below self hosted stuff does work so need to get some tests written. Some are not possible atm because

View File

@@ -5,7 +5,8 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Web.BackOffice.Controllers;
using Umbraco.Web.Common.Exceptions;
@@ -18,10 +19,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_Allowed_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -42,9 +40,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Throws_Exception_When_No_Media_Found()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
var user = userMock.Object;
var user = CreateUser(id: 9);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -62,10 +58,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 9876 });
var user = userMock.Object;
var user = CreateUser(id: 9, startMediaId: 9876);
var mediaMock = new Mock<IMedia>();
mediaMock.Setup(m => m.Path).Returns("-1,1234,5678");
var media = mediaMock.Object;
@@ -88,10 +81,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -108,10 +98,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Root_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -130,10 +117,7 @@ namespace Umbraco.Tests.Web.Controllers
public void Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.Groups).Returns(new[] { new ReadOnlyUserGroup(1, "admin", "", -1, -1, "admin", new string[0], new List<string>()) });
var user = userMock.Object;
var user = CreateUser();
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -150,10 +134,7 @@ namespace Umbraco.Tests.Web.Controllers
public void No_Access_To_Recycle_Bin_By_Path()
{
//arrange
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(0);
userMock.Setup(u => u.StartMediaIds).Returns(new[] { 1234 });
var user = userMock.Object;
var user = CreateUser(startMediaId: 1234);
var mediaServiceMock = new Mock<IMediaService>();
var mediaService = mediaServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -167,5 +148,18 @@ namespace Umbraco.Tests.Web.Controllers
//assert
Assert.IsFalse(result);
}
private IUser CreateUser(int id = 0, int? startMediaId = null)
{
return new UserBuilder()
.WithId(id)
.WithStartMediaIds(startMediaId.HasValue ? new[] { startMediaId.Value } : new int[0])
.AddUserGroup()
.WithId(1)
.WithName("admin")
.WithAlias("admin")
.Done()
.Build();
}
}
}

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NUnit.Framework;
@@ -10,11 +9,11 @@ using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Tests.Common.TestHelpers.Entities;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Web.Actions;
using Umbraco.Web.BackOffice.Filters;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Security;
namespace Umbraco.Tests.Web.Controllers
{
@@ -78,10 +77,7 @@ namespace Umbraco.Tests.Web.Controllers
[Test]
public void Filter_On_Start_Node()
{
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new[] { 5 });
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 5);
var userServiceMock = new Mock<IUserService>();
var userService = userServiceMock.Object;
var entityServiceMock = new Mock<IEntityService>();
@@ -124,10 +120,7 @@ namespace Umbraco.Tests.Web.Controllers
}
var ids = list.Select(x => (int)x.Id).ToArray();
var userMock = MockedUser.GetUserMock();
userMock.Setup(u => u.Id).Returns(9);
userMock.Setup(u => u.StartContentIds).Returns(new int[0]);
var user = userMock.Object;
var user = CreateUser(id: 9, startContentId: 0);
var userServiceMock = new Mock<IUserService>();
//we're only assigning 3 nodes browse permissions so that is what we expect as a result
@@ -155,6 +148,14 @@ namespace Umbraco.Tests.Web.Controllers
Assert.AreEqual(3, list.ElementAt(2).Id);
}
private IUser CreateUser(int id = 0, int? startContentId = null)
{
return new UserBuilder()
.WithId(id)
.WithStartContentIds(startContentId.HasValue ? new[] { startContentId.Value } : new int[0])
.Build();
}
private class MyTestClass
{
public IEnumerable<ContentItemBasic> MyList { get; set; }

View File

@@ -140,6 +140,8 @@
<Compile Include="Scoping\ScopeEventDispatcherTests.cs" />
<Compile Include="Security\BackOfficeOwinUserManagerTests.cs" />
<Compile Include="Security\OwinDataProtectorTokenProviderTests.cs" />
<Compile Include="Services\ContentServicePublishBranchTests.cs" />
<Compile Include="Services\KeyValueServiceTests.cs" />
<Compile Include="Persistence\Repositories\UserRepositoryTest.cs" />
<Compile Include="TestHelpers\Entities\MockedEntity.cs" />
<Compile Include="TestHelpers\Entities\MockedPropertyTypes.cs" />

View File

@@ -96,7 +96,6 @@ namespace Umbraco.Web
if (currentUmbracoContext != null)
return new UmbracoContextReference(currentUmbracoContext, false, _umbracoContextAccessor);
var umbracoContext = CreateUmbracoContext();
_umbracoContextAccessor.UmbracoContext = umbracoContext;