using System; using System.Collections.Generic; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Cache; using NzbDrone.Common.Messaging; using NzbDrone.Common.TPL; using NzbDrone.Core.HealthCheck; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.HealthCheck { public class HealthCheckServiceFixture : CoreTest { private FakeHealthCheck _healthCheck; [SetUp] public void SetUp() { _healthCheck = new FakeHealthCheck(); Mocker.SetConstant>(new[] { _healthCheck }); Mocker.SetConstant(Mocker.Resolve()); Mocker.SetConstant(Mocker.Resolve()); Mocker.GetMock().Setup(s => s.CreateDebouncer(It.IsAny(), It.IsAny())) .Returns((a, t) => new MockDebouncer(a, t)); } [Test] public void should_not_execute_conditional() { Subject.HandleAsync(new FakeEvent()); _healthCheck.Executed.Should().BeFalse(); } [Test] public void should_execute_conditional() { Subject.HandleAsync(new FakeEvent() { ShouldExecute = true }); _healthCheck.Executed.Should().BeTrue(); } [Test] public void should_execute_unconditional() { Subject.HandleAsync(new FakeEvent2()); _healthCheck.Executed.Should().BeTrue(); } } public class FakeEvent : IEvent { public bool ShouldExecute { get; set; } } public class FakeEvent2 : IEvent { public bool ShouldExecute { get; set; } } [CheckOn(typeof(FakeEvent))] [CheckOn(typeof(FakeEvent2))] public class FakeHealthCheck : IProvideHealthCheck, ICheckOnCondition { public bool CheckOnStartup => false; public bool CheckOnSchedule => false; public bool Executed { get; set; } public bool Checked { get; set; } public Core.HealthCheck.HealthCheck Check() { Executed = true; return new Core.HealthCheck.HealthCheck(GetType()); } public bool ShouldCheckOnEvent(FakeEvent message) { return message.ShouldExecute; } } }