// Copyright (c) Umbraco. // See LICENSE for more details. using System.Data; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Logging; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs.DistributedJobs; using Umbraco.Cms.Tests.Common; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.BackgroundJobs.Jobs; [TestFixture] public class LogScrubberJobTests { private Mock _mockAuditService; private const int MaxLogAgeInMinutes = 60; [Test] public async Task Executes_And_Scrubs_Logs() { var sut = CreateLogScrubber(); await sut.ExecuteAsync(); VerifyLogsScrubbed(); } private LogScrubberJob CreateLogScrubber() { var settings = new LoggingSettings { MaxLogAge = TimeSpan.FromMinutes(MaxLogAgeInMinutes) }; var mockScope = new Mock(); var mockScopeProvider = new Mock(); mockScopeProvider .Setup(x => x.CreateCoreScope( It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(mockScope.Object); var mockProfilingLogger = new Mock(); _mockAuditService = new Mock(); return new LogScrubberJob( _mockAuditService.Object, new TestOptionsMonitor(settings), mockScopeProvider.Object, mockProfilingLogger.Object); } private void VerifyLogsNotScrubbed() => VerifyLogsScrubbed(Times.Never()); private void VerifyLogsScrubbed() => VerifyLogsScrubbed(Times.Once()); private void VerifyLogsScrubbed(Times times) => _mockAuditService.Verify(x => x.CleanLogsAsync(It.Is(y => y == MaxLogAgeInMinutes)), times); }