public void TriggerEventHandler_WhenEventHandlersExist()
        {
            var container = new Container();

            var evt = new FakeEventWithoutValidation();

            Assert.IsAssignableFrom <IEvent>(evt);

            var handlers = new List <IHandleEvent <FakeEventWithoutValidation> > {
                new HandleFakeEventWithoutValidation()
            };

            var decorated = new Mock <ITriggerEvent <FakeEventWithoutValidation> >(MockBehavior.Strict);

            decorated.Setup(x => x.Trigger(evt));

            var taskFactory = new Mock <ITaskFactory>(MockBehavior.Strict);

            taskFactory.Setup(factory => factory.StartTask(It.IsAny <Action>())).Callback <Action>(action => action());

            var decorator = new TriggerEventWhenHandlersExistDecorator <FakeEventWithoutValidation>(container, taskFactory.Object, () => decorated.Object, handlers);

            decorator.Trigger(evt);

            taskFactory.Verify(x => x.StartTask(It.IsAny <Action>()), Times.Once);
            decorated.Verify(x => x.Trigger(evt), Times.Once);
        }
        public void DoNotTriggerEventHandler_WhenEventHandlersDoesNotExist()
        {
            var container = new Container();

            var evt = new FakeEventWithoutValidation();
            Assert.IsAssignableFrom<IEvent>(evt);

            var decorated = new Mock<ITriggerEvent<FakeEventWithoutValidation>>(MockBehavior.Strict);
            decorated.Setup(x => x.Trigger(evt));

            var taskFactory = new Mock<ITaskFactory>(MockBehavior.Strict);
            taskFactory.Setup(factory => factory.StartTask(It.IsAny<Action>())).Callback<Action>(action => action());

            var decorator = new TriggerEventWhenHandlersExistDecorator<FakeEventWithoutValidation>(container, taskFactory.Object, () => decorated.Object, null);
            decorator.Trigger(evt);

            taskFactory.Verify(x => x.StartTask(It.IsAny<Action>()), Times.Never);
            decorated.Verify(x => x.Trigger(evt), Times.Never);
        }