using System.Collections.Generic; using System.Linq; using Moq; using NUnit.Framework; using NzbDrone.Common.Eventing; using NzbDrone.Test.Common; namespace NzbDrone.Common.Test.EventingTests { [TestFixture] public class ServiceNameFixture : TestBase { [Test] public void should_publish_event_to_handlers() { var eventA = new EventA(); var intHandler = new Mock>(); var aggregator = new EventAggregator(TestLogger, () => new List { intHandler.Object }); aggregator.Publish(eventA); intHandler.Verify(c => c.Handle(eventA), Times.Once()); } [Test] public void should_publish_to_more_than_one_handler() { var eventA = new EventA(); var intHandler1 = new Mock>(); var intHandler2 = new Mock>(); var aggregator = new EventAggregator(TestLogger, () => new List { intHandler1.Object, intHandler2.Object }); aggregator.Publish(eventA); intHandler1.Verify(c => c.Handle(eventA), Times.Once()); intHandler2.Verify(c => c.Handle(eventA), Times.Once()); } [Test] public void should_not_publish_to_incompatible_handlers() { var eventA = new EventA(); var aHandler = new Mock>(); var bHandler = new Mock>(); var aggregator = new EventAggregator(TestLogger, () => new List { aHandler.Object, bHandler.Object }); aggregator.Publish(eventA); aHandler.Verify(c => c.Handle(eventA), Times.Once()); bHandler.Verify(c => c.Handle(It.IsAny()), Times.Never()); } } public class EventA:IEvent { } public class EventB : IEvent { } }