diff --git a/src/Umbraco.Tests.Common/Builders/AuditEntryBuilder.cs b/src/Umbraco.Tests.Common/Builders/AuditEntryBuilder.cs new file mode 100644 index 0000000000..cf31c2a14f --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/AuditEntryBuilder.cs @@ -0,0 +1,107 @@ +using System; +using System.Globalization; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class AuditEntryBuilder : AuditEntryBuilder + { + public AuditEntryBuilder() : base(null) + { + } + } + + public class AuditEntryBuilder + : ChildBuilderBase, + IWithIdBuilder, + IWithKeyBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder + { + private DateTime? _createDate; + private DateTime? _deleteDate; + private int? _id; + private Guid? _key; + private DateTime? _updateDate; + private string _affectedDetails; + private int? _affectedUserId; + private string _eventDetails; + private string _eventType; + private string _performingDetails; + private string _performingIp; + private DateTime? _eventDateUtc; + private int? _performingUserId; + + public AuditEntryBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + + + + public override IAuditEntry Build() + { + var id = _id ?? 0; + var key = _key ?? Guid.NewGuid(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; + var affectedDetails = _affectedDetails ?? Guid.NewGuid().ToString(); + var affectedUserId = _affectedUserId ?? -1; + var eventDetails = _eventDetails ?? Guid.NewGuid().ToString(); + var eventType = _eventType ?? "umbraco/user"; + var performingDetails = _performingDetails ?? Guid.NewGuid().ToString(); + var performingIp = _performingIp ?? "127.0.0.1"; + var eventDateUtc = _eventDateUtc ?? DateTime.UtcNow; + var performingUserId = _performingUserId ?? -1; + + return new AuditEntry + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate, + AffectedDetails = affectedDetails, + AffectedUserId = affectedUserId, + EventDetails = eventDetails, + EventType = eventType, + PerformingDetails = performingDetails, + PerformingIp = performingIp, + EventDateUtc = eventDateUtc, + PerformingUserId = performingUserId, + }; + } + } +} diff --git a/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs b/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs new file mode 100644 index 0000000000..9a0ba54082 --- /dev/null +++ b/src/Umbraco.Tests.Integration/Services/AuditServiceTests.cs @@ -0,0 +1,108 @@ +using System; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Core.Services; +using Umbraco.Core.Services.Implement; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Integration.Testing; +using Umbraco.Tests.Testing; + +namespace Umbraco.Tests.Services +{ + [TestFixture] + [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] + public class AuditServiceTests : UmbracoIntegrationTest + { + [Test] + public void GetPage() + { + var sut = (AuditService) GetRequiredService(); + var expected = new AuditEntryBuilder().Build(); + + + for (var i = 0; i < 10; i++) + { + sut.Write( + expected.PerformingUserId + i, + expected.PerformingDetails, + expected.PerformingIp, + expected.EventDateUtc.AddMinutes(i), + expected.AffectedUserId+ i, + expected.AffectedDetails, + expected.EventType, + expected.EventDetails); + } + + var entries = sut.GetPage(2, 2, out var count).ToArray(); + + Assert.Multiple(() => + { + Assert.AreEqual(2, entries.Length); + Assert.AreEqual(expected.PerformingUserId + 5, entries[0].PerformingUserId); + Assert.AreEqual(expected.PerformingUserId + 4, entries[1].PerformingUserId); + }); + } + + [Test] + public void GetUserLogs() + { + var sut = (AuditService) Services.GetRequiredService(); + + var eventDateUtc = DateTime.UtcNow.AddDays(-1); + + var numberOfEntries = 10; + for (var i = 0; i < numberOfEntries; i++) + { + eventDateUtc = eventDateUtc.AddMinutes(1); + sut.Add(AuditType.Unpublish, -1, 33, "", "blah"); + } + + sut.Add(AuditType.Publish, -1, 33, "", "blah"); + + var logs = sut.GetUserLogs(-1, AuditType.Unpublish).ToArray(); + + Assert.Multiple(() => + { + Assert.IsNotNull(logs); + CollectionAssert.AllItemsAreNotNull(logs); + Assert.AreEqual(numberOfEntries, logs.Length); + Assert.AreEqual(numberOfEntries, logs.Count(x => x.AuditType == AuditType.Unpublish)); + }); + } + + [Test] + public void Write_and_GetAll() + { + var sut = (AuditService) Services.GetRequiredService(); + var expected = new AuditEntryBuilder().Build(); + + var actual = sut.Write( + expected.PerformingUserId, + expected.PerformingDetails, + expected.PerformingIp, + expected.EventDateUtc, + expected.AffectedUserId, + expected.AffectedDetails, + expected.EventType, + expected.EventDetails); + + var entries = sut.GetAll().ToArray(); + + Assert.Multiple(() => + { + Assert.AreEqual(expected.PerformingUserId, actual.PerformingUserId); + Assert.AreEqual(expected.PerformingDetails, actual.PerformingDetails); + Assert.AreEqual(expected.EventDateUtc, actual.EventDateUtc); + Assert.AreEqual(expected.AffectedUserId, actual.AffectedUserId); + Assert.AreEqual(expected.AffectedDetails, actual.AffectedDetails); + Assert.AreEqual(expected.EventType, actual.EventType); + Assert.AreEqual(expected.EventDetails, actual.EventDetails); + Assert.IsNotNull(entries); + Assert.AreEqual(1, entries.Length); + Assert.AreEqual(expected.PerformingUserId, entries[0].PerformingUserId); + }); + } + } +} diff --git a/src/Umbraco.Tests.Integration/TestServerTest/Controllers/UsersControllerTests.cs b/src/Umbraco.Tests.Integration/TestServerTest/Controllers/UsersControllerTests.cs index 7451740a15..4c492ed4f2 100644 --- a/src/Umbraco.Tests.Integration/TestServerTest/Controllers/UsersControllerTests.cs +++ b/src/Umbraco.Tests.Integration/TestServerTest/Controllers/UsersControllerTests.cs @@ -180,7 +180,7 @@ namespace Umbraco.Tests.Integration.TestServerTest.Controllers var user = new UserBuilder() .AddUserGroup() - .WithAlias("writer") // Needs to be an existing alias + .WithAlias("writer") // Needs to be an existing alias .Done() .WithIsLockedOut(true, DateTime.UtcNow) .Build(); @@ -208,6 +208,14 @@ namespace Umbraco.Tests.Integration.TestServerTest.Controllers [Test] public async Task PostUnlockUsers_When_Multiple_UserIds_Supplied_Expect_User_Locked_Out_With_Correct_Response_Message() { + + var xxx = new UserBuilder() + .WithUsername("Admin") + .AddUserGroup() + .WithAlias("writer") + .Done() + .Build(); + var numberOfUsers = 3; var userService = GetRequiredService(); diff --git a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs index 6780744c3e..89cbfa992d 100644 --- a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs +++ b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs @@ -144,6 +144,8 @@ namespace Umbraco.Tests.Integration.Testing } + protected T GetRequiredService() => Services.GetRequiredService(); + #region Common services protected string TestDBConnectionString { get; private set; } diff --git a/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj b/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj index 09a4558a84..ba986ebd86 100644 --- a/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj +++ b/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj @@ -17,7 +17,7 @@ - + diff --git a/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs b/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs index e3de162969..2ad71f195c 100644 --- a/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs +++ b/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs @@ -4,13 +4,12 @@ using AutoFixture.AutoMoq; using AutoFixture.Kernel; using AutoFixture.NUnit3; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; using Moq; using Umbraco.Core.BackOffice; using Umbraco.Core.Configuration; using Umbraco.Web.BackOffice.Controllers; -namespace Umbraco.Tests.Common.AutoFixture +namespace Umbraco.Tests.UnitTests.AutoFixture { [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor)] public class AutoMoqDataAttribute : AutoDataAttribute diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/UsersControllerUnitTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/UsersControllerUnitTests.cs index f068108b90..4c038a58e6 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/UsersControllerUnitTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/UsersControllerUnitTests.cs @@ -1,11 +1,10 @@ using System.Threading; -using System.Threading.Tasks; using AutoFixture.NUnit3; using Microsoft.AspNetCore.Identity; using Moq; using NUnit.Framework; using Umbraco.Core.BackOffice; -using Umbraco.Tests.Common.AutoFixture; +using Umbraco.Tests.UnitTests.AutoFixture; using Umbraco.Web.BackOffice.Controllers; using Umbraco.Web.Common.Exceptions; @@ -15,7 +14,7 @@ namespace Umbraco.Tests.Web.Controllers public class UsersControllerUnitTests { [Test,AutoMoqData] - public async Task PostUnlockUsers_When_User_Lockout_Update_Fails_Expect_Failure_Response( + public void PostUnlockUsers_When_User_Lockout_Update_Fails_Expect_Failure_Response( [Frozen] IUserStore userStore, UsersController sut, BackOfficeIdentityUser user, diff --git a/src/Umbraco.Tests/Services/AuditServiceTests.cs b/src/Umbraco.Tests/Services/AuditServiceTests.cs deleted file mode 100644 index bfec246e61..0000000000 --- a/src/Umbraco.Tests/Services/AuditServiceTests.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Linq; -using NUnit.Framework; -using Umbraco.Core.Services.Implement; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; -using Umbraco.Core.Models; - -namespace Umbraco.Tests.Services -{ - [TestFixture] - [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)] - public class AuditServiceTests : TestWithDatabaseBase - { - [Test] - public void CanCrudAuditEntry() - { - var yesterday = DateTime.UtcNow.AddDays(-1); - var entry = ServiceContext.AuditService.Write(123, "user 123, bob@example.com", null, yesterday, 456, "user 456, alice@example.com", "umbraco/user", "change property whatever value"); - Assert.AreEqual(123, entry.PerformingUserId); - Assert.AreEqual("user 123, bob@example.com", entry.PerformingDetails); - Assert.AreEqual(yesterday, entry.EventDateUtc); - Assert.AreEqual(456, entry.AffectedUserId); - Assert.AreEqual("user 456, alice@example.com", entry.AffectedDetails); - Assert.AreEqual("umbraco/user", entry.EventType); - Assert.AreEqual("change property whatever value", entry.EventDetails); - - var entries = ((AuditService)ServiceContext.AuditService).GetAll().ToArray(); - Assert.IsNotNull(entries); - Assert.AreEqual(1, entries.Length); - Assert.AreEqual(123, entries[0].PerformingUserId); - - for (var i = 0; i < 10; i++) - { - yesterday = yesterday.AddMinutes(1); - entry = ServiceContext.AuditService.Write(123 + i, "user 123, bob@example.com", null, yesterday, 456 + i, "user 456, alice@example.com", "umbraco/user", "change property whatever value"); - } - - // - // page 0 contains 123+9, 123+8 - // page 1 contains 123+7, 123+6 - // page 2 contains 123+5, 123+4 - // ... - - entries = ((AuditService)ServiceContext.AuditService).GetPage(2, 2, out var count).ToArray(); - - Assert.AreEqual(2, entries.Length); - - Assert.AreEqual(123 + 5, entries[0].PerformingUserId); - Assert.AreEqual(123 + 4, entries[1].PerformingUserId); - } - - [Test] - public void CanReadEntries() - { - var yesterday = DateTime.UtcNow.AddDays(-1); - - for (var i = 0; i < 10; i++) - { - yesterday = yesterday.AddMinutes(1); - ServiceContext.AuditService.Add(AuditType.Unpublish, -1, 33, "", "blah"); - } - - var logs = ServiceContext.AuditService.GetUserLogs(-1, AuditType.Unpublish); - } - } -} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d3e50a987a..3bd34295cf 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -207,7 +207,6 @@ -