// Copyright (c) Umbraco. // See LICENSE for more details. using System.Data; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Runtime; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; using Umbraco.Cms.Core.Web; using Umbraco.Cms.Infrastructure; using Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs; using Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs.DistributedJobs; using Umbraco.Cms.Infrastructure.HostedServices; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.BackgroundJobs.Jobs; [TestFixture] public class ScheduledPublishingJobTests { private Mock _mockContentService; private Mock> _mockLogger; [Test] public async Task Does_Not_Execute_When_Not_Enabled() { var sut = CreateScheduledPublishing(enabled: false); await sut.ExecuteAsync(); VerifyScheduledPublishingNotPerformed(); } [Test] public async Task Executes_And_Performs_Scheduled_Publishing() { var sut = CreateScheduledPublishing(); await sut.ExecuteAsync(); VerifyScheduledPublishingPerformed(); } private ScheduledPublishingJob CreateScheduledPublishing( bool enabled = true) { if (enabled) { Suspendable.ScheduledPublishing.Resume(); } else { Suspendable.ScheduledPublishing.Suspend(); } _mockContentService = new Mock(); var mockUmbracoContextFactory = new Mock(); mockUmbracoContextFactory.Setup(x => x.EnsureUmbracoContext()) .Returns(new UmbracoContextReference(null, false, null)); _mockLogger = new Mock>(); var mockServerMessenger = 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(Mock.Of()); return new ScheduledPublishingJob( _mockContentService.Object, mockUmbracoContextFactory.Object, _mockLogger.Object, mockServerMessenger.Object, mockScopeProvider.Object, TimeProvider.System); } private void VerifyScheduledPublishingNotPerformed() => VerifyScheduledPublishingPerformed(Times.Never()); private void VerifyScheduledPublishingPerformed() => VerifyScheduledPublishingPerformed(Times.Once()); private void VerifyScheduledPublishingPerformed(Times times) => _mockContentService.Verify(x => x.PerformScheduledPublish(It.IsAny()), times); }