From fcdd43692a2745403440e3b472eb10671eb3ea20 Mon Sep 17 00:00:00 2001 From: Mole Date: Wed, 21 Oct 2020 13:28:13 +0200 Subject: [PATCH] Migrate MemberRepositoryTest --- .../Implementations/TestHelper.cs | 36 ++++- .../Repositories/MemberRepositoryTest.cs | 127 ++++++++---------- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 - 3 files changed, 84 insertions(+), 80 deletions(-) rename src/{Umbraco.Tests => Umbraco.Tests.Integration/Umbraco.Infrastructure}/Persistence/Repositories/MemberRepositoryTest.cs (67%) diff --git a/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs b/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs index 22b3821b3c..e53e75aaea 100644 --- a/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs +++ b/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs @@ -163,7 +163,7 @@ namespace Umbraco.Tests.Integration.Implementations public void AssertPropertyValuesAreEqual(object actual, object expected, string dateTimeFormat = null, Func sorter = null, string[] ignoreProperties = null) { - const int dateDeltaMilliseconds = 500; // .5s + const int dateDeltaMilliseconds = 1000; // 1s var properties = expected.GetType().GetProperties(); foreach (var property in properties) @@ -173,7 +173,7 @@ namespace Umbraco.Tests.Integration.Implementations if (att != null && att.State == EditorBrowsableState.Never) continue; - // ignore explicitely ignored properties + // ignore explicitly ignored properties if (ignoreProperties != null && ignoreProperties.Contains(property.Name)) continue; @@ -209,7 +209,7 @@ namespace Umbraco.Tests.Integration.Implementations AssertAreEqual(property, expectedListEx[i], actualListEx[i], sorter, dateDeltaMilliseconds); } - private static void AssertAreEqual(PropertyInfo property, object expected, object actual, Func sorter = null, int dateDeltaMilliseconds = 0) + private static void AssertAreEqual(PropertyInfo property, object expected, object actual, Func sorter = null, int dateDeltaMilliseconds = 0) { if (!(expected is string) && expected is IEnumerable) { @@ -238,8 +238,27 @@ namespace Umbraco.Tests.Integration.Implementations Assert.Fail($"{property.DeclaringType.Name}.{property.Name}: Expected {expectedPropertyValues.Length} but got {actualPropertyValues.Length}."); for (var i = 0; i < expectedPropertyValues.Length; i++) { - Assert.AreEqual(expectedPropertyValues[i].EditedValue, actualPropertyValues[i].EditedValue, $"{property.DeclaringType.Name}.{property.Name}: Expected draft value \"{expectedPropertyValues[i].EditedValue}\" but got \"{actualPropertyValues[i].EditedValue}\"."); - Assert.AreEqual(expectedPropertyValues[i].PublishedValue, actualPropertyValues[i].PublishedValue, $"{property.DeclaringType.Name}.{property.Name}: Expected published value \"{expectedPropertyValues[i].EditedValue}\" but got \"{actualPropertyValues[i].EditedValue}\"."); + // This is not pretty, but since a property value can be a datetime we can't just always compare them as is. + // This is made worse by the fact that PublishedValue is not always set, meaning we can't lump it all into the same if block + if (expectedPropertyValues[i].EditedValue is DateTime expectedEditDateTime) + { + var actualEditDateTime = (DateTime) actualPropertyValues[i].EditedValue; + AssertDateTime(expectedEditDateTime, actualEditDateTime, $"{property.DeclaringType.Name}.{property.Name}: Expected draft value \"{expectedPropertyValues[i].EditedValue}\" but got \"{actualPropertyValues[i].EditedValue}\".", dateDeltaMilliseconds); + } + else + { + Assert.AreEqual(expectedPropertyValues[i].EditedValue, actualPropertyValues[i].EditedValue, $"{property.DeclaringType.Name}.{property.Name}: Expected draft value \"{expectedPropertyValues[i].EditedValue}\" but got \"{actualPropertyValues[i].EditedValue}\"."); + } + + if (expectedPropertyValues[i].PublishedValue is DateTime expectedPublishDateTime) + { + var actualPublishedDateTime = (DateTime) actualPropertyValues[i].PublishedValue; + AssertDateTime(expectedPublishDateTime, actualPublishedDateTime, $"{property.DeclaringType.Name}.{property.Name}: Expected published value \"{expectedPropertyValues[i].PublishedValue}\" but got \"{actualPropertyValues[i].PublishedValue}\".", dateDeltaMilliseconds); + } + else + { + Assert.AreEqual(expectedPropertyValues[i].PublishedValue, actualPropertyValues[i].PublishedValue, $"{property.DeclaringType.Name}.{property.Name}: Expected published value \"{expectedPropertyValues[i].PublishedValue}\" but got \"{actualPropertyValues[i].PublishedValue}\"."); + } } } else if (expected is IDataEditor expectedEditor) @@ -256,5 +275,12 @@ namespace Umbraco.Tests.Integration.Implementations expected?.ToString() ?? "", actual?.ToString() ?? ""); } } + + private static void AssertDateTime(DateTime expected, DateTime actual, string failureMessage, + int dateDeltaMiliseconds = 0) + { + var delta = (actual - expected).TotalMilliseconds; + Assert.IsTrue(Math.Abs(delta) <= dateDeltaMiliseconds, failureMessage); + } } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MemberRepositoryTest.cs similarity index 67% rename from src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs rename to src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MemberRepositoryTest.cs index 04bf37c8d8..fa7ae66047 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MemberRepositoryTest.cs @@ -7,7 +7,6 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Dtos; @@ -16,44 +15,42 @@ using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Core.Security; +using Umbraco.Core.Services; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; -namespace Umbraco.Tests.Persistence.Repositories +namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositories { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] - public class MemberRepositoryTest : TestWithDatabaseBase + public class MemberRepositoryTest : UmbracoIntegrationTest { - private MemberRepository CreateRepository(IScopeProvider provider, out MemberTypeRepository memberTypeRepository, out MemberGroupRepository memberGroupRepository) + private IPasswordHasher PasswordHasher => GetRequiredService(); + private IDataTypeService DataTypeService => GetRequiredService(); + private IMemberTypeRepository MemberTypeRepository => GetRequiredService(); + private IMemberGroupRepository MemberGroupRepository => GetRequiredService(); + + private MemberRepository CreateRepository(IScopeProvider provider) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettings(); - var templateRepository = Mock.Of(); - var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); - var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), Microsoft.Extensions.Options.Options.Create(globalSettings)); - memberTypeRepository = new MemberTypeRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), commonRepository, languageRepository, ShortStringHelper); - memberGroupRepository = new MemberGroupRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger()); - var tagRepo = new TagRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger()); - var relationTypeRepository = new RelationTypeRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger()); - var entityRepository = new EntityRepository(accessor); - var relationRepository = new RelationRepository(accessor, LoggerFactory.CreateLogger(), relationTypeRepository, entityRepository); + var tagRepo = GetRequiredService(); + var relationTypeRepository = GetRequiredService(); + var relationRepository = GetRequiredService(); var propertyEditors = new Lazy(() => new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()))); var dataValueReferences = new DataValueReferenceFactoryCollection(Enumerable.Empty()); - var repository = new MemberRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), memberTypeRepository, memberGroupRepository, tagRepo, Mock.Of(), relationRepository, relationTypeRepository, PasswordHasher, propertyEditors, dataValueReferences, DataTypeService); + var repository = new MemberRepository(accessor, AppCaches.Disabled, LoggerFactory.CreateLogger(), MemberTypeRepository, MemberGroupRepository, tagRepo, Mock.Of(), relationRepository, relationTypeRepository, PasswordHasher, propertyEditors, dataValueReferences, DataTypeService); return repository; } [Test] public void GetMember() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); var member = CreateTestMember(); @@ -67,12 +64,10 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void GetMembers() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); var type = CreateTestMemberType(); var m1 = CreateTestMember(type, "Test 1", "test1@test.com", "pass1", "test1"); @@ -90,12 +85,10 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void GetAllMembers() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); var type = CreateTestMemberType(); for (var i = 0; i < 5; i++) @@ -116,12 +109,10 @@ namespace Umbraco.Tests.Persistence.Repositories public void QueryMember() { // Arrange - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); var key = Guid.NewGuid(); var member = CreateTestMember(key: key); @@ -139,12 +130,10 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void SaveMember() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); var member = CreateTestMember(); @@ -164,17 +153,15 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void MemberHasBuiltinProperties() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); - var memberType = MockedContentTypes.CreateSimpleMemberType(); - memberTypeRepository.Save(memberType); + var memberType = MemberTypeBuilder.CreateSimpleMemberType(); + MemberTypeRepository.Save(memberType); - var member = MockedMember.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); + var member = MemberBuilder.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); repository.Save(member); var sut = repository.Get(member.Id); @@ -196,18 +183,16 @@ namespace Umbraco.Tests.Persistence.Repositories public void SavingPreservesPassword() { IMember sut; - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); - var memberType = MockedContentTypes.CreateSimpleMemberType(); - memberTypeRepository.Save(memberType); + var memberType = MemberTypeBuilder.CreateSimpleMemberType(); + MemberTypeRepository.Save(memberType); - var member = MockedMember.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); + var member = MemberBuilder.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); repository.Save(member); @@ -226,18 +211,16 @@ namespace Umbraco.Tests.Persistence.Repositories public void SavingUpdatesNameAndEmail() { IMember sut; - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); - var memberType = MockedContentTypes.CreateSimpleMemberType(); - memberTypeRepository.Save(memberType); + var memberType = MemberTypeBuilder.CreateSimpleMemberType(); + MemberTypeRepository.Save(memberType); - var member = MockedMember.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); + var member = MemberBuilder.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty"); repository.Save(member); @@ -256,7 +239,7 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void QueryMember_WithSubQuery() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; var query = provider.SqlContext.Query().Where(x => ((Member) x).LongStringPropertyValue.Contains("1095") && @@ -276,21 +259,19 @@ namespace Umbraco.Tests.Persistence.Repositories private IMember CreateTestMember(IMemberType memberType = null, string name = null, string email = null, string password = null, string username = null, Guid? key = null) { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); if (memberType == null) { - memberType = MockedContentTypes.CreateSimpleMemberType(); - memberTypeRepository.Save(memberType); + memberType = MemberTypeBuilder.CreateSimpleMemberType(); + MemberTypeRepository.Save(memberType); } - var member = MockedMember.CreateSimpleMember(memberType, name ?? "Johnny Hefty", email ?? "johnny@example.com", password ?? "123", username ?? "hefty", key); + var member = MemberBuilder.CreateSimpleMember(memberType, name ?? "Johnny Hefty", email ?? "johnny@example.com", password ?? "123", username ?? "hefty", key); repository.Save(member); scope.Complete(); @@ -300,15 +281,13 @@ namespace Umbraco.Tests.Persistence.Repositories private IMemberType CreateTestMemberType(string alias = null) { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; using (var scope = provider.CreateScope()) { - MemberTypeRepository memberTypeRepository; - MemberGroupRepository memberGroupRepository; - var repository = CreateRepository(provider, out memberTypeRepository, out memberGroupRepository); + var repository = CreateRepository(provider); - var memberType = MockedContentTypes.CreateSimpleMemberType(alias); - memberTypeRepository.Save(memberType); + var memberType = MemberTypeBuilder.CreateSimpleMemberType(alias); + MemberTypeRepository.Save(memberType); scope.Complete(); return memberType; } @@ -316,7 +295,7 @@ namespace Umbraco.Tests.Persistence.Repositories private Sql GetBaseQuery(bool isCount) { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; if (isCount) { var sqlCount = provider.SqlContext.Sql() @@ -356,7 +335,7 @@ namespace Umbraco.Tests.Persistence.Repositories private Sql GetSubquery() { - var provider = TestObjects.GetScopeProvider(LoggerFactory); + var provider = ScopeProvider; var sql = provider.SqlContext.Sql(); sql.Select("umbracoNode.id") .From() diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 7735e8785d..79567f076b 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -246,7 +246,6 @@ -