示例#1
0
        public void WhenIRunMultipleEventsOnTheEventPlayerTheyAreEvaluated()
        {
            var evaluator1 = Substitute.For <IEventEvaluator <IView, IEventData> >();
            var evaluator2 = Substitute.For <IEventEvaluator <IView, IEventData> >();
            var evaluator3 = Substitute.For <IEventEvaluator <IView, IEventData> >();
            var eventData1 = Substitute.For <IEventData>();
            var eventData2 = Substitute.For <IEventData>();
            var eventData3 = Substitute.For <IEventData>();

            var events = new[]
            {
                CreateEvent(Guid.NewGuid().ToString()),
                CreateEvent(Guid.NewGuid().ToString()),
                CreateEvent(Guid.NewGuid().ToString()),
            };

            _eventDataDeserializationService.Deserialize(typeof(IEventData), events[0].EventData).Returns(eventData1);
            _eventDataDeserializationService.Deserialize(typeof(IEventData), events[1].EventData).Returns(eventData2);
            _eventDataDeserializationService.Deserialize(typeof(IEventData), events[2].EventData).Returns(eventData3);
            _eventEvaluatorRegistry.Filter <IView>(events[0].EventType).Returns(new IEventEvaluator[] { evaluator1 });
            _eventEvaluatorRegistry.Filter <IView>(events[1].EventType).Returns(new IEventEvaluator[] { evaluator2 });
            _eventEvaluatorRegistry.Filter <IView>(events[2].EventType).Returns(new IEventEvaluator[] { evaluator3 });

            var view = Substitute.For <IView>();

            _target.Play(events, view);

            evaluator1.Received().Evaluate(view, events[0], eventData1);
            evaluator2.Received().Evaluate(view, events[1], eventData2);
            evaluator3.Received().Evaluate(view, events[2], eventData3);
        }
        public void WhenIFilterEventEvaluatorsTheyAreFilteredCorrectly(
            int matchingQuantity,
            bool interfaceMatches,
            bool nameMatches,
            string minimumVersionCondition,
            string maximumVersionCondition)
        {
            _eventEvaluatorAttributeService = Substitute.For <IEventEvaluatorAttributeService>();
            _eventEvaluatorAttributeService.Get(Arg.Any <Type>())
            .Returns(new EventValidityData()
            {
                EventName      = Guid.NewGuid().ToString(),
                MinimumVersion = new Version(0, 0),
                MaximumVersion = null
            });

            var expectedEventName = Guid.NewGuid().ToString();
            var expectedVersion   = new Version(1, 2, 3, 4);

            var eventType = Substitute.For <IEventType>();

            eventType.Name.Returns(expectedEventName);
            eventType.Version.Returns(expectedVersion);

            var shouldMatch = interfaceMatches &&
                              nameMatches &&
                              (minimumVersionCondition == "EQ" || minimumVersionCondition == "LT") && // minimum version is {} than event version
                              (maximumVersionCondition == null || maximumVersionCondition == "GT" || maximumVersionCondition == "EQ");    // maximum version is {} than event version

            _output.WriteLine(shouldMatch ? "Expecting to match" : "Expecting no matches");

            var expectedEvaluators = new List <IEventEvaluator>();
            var allEvaluators      = new List <IEventEvaluator>();

            for (var i = 1; i <= matchingQuantity; i++)
            {
                var expectedEvaluator = CreateEventEvaluatorSubstitute(interfaceMatches, nameMatches, minimumVersionCondition,
                                                                       maximumVersionCondition, expectedEventName, expectedVersion);
                expectedEvaluators.Add(expectedEvaluator);
                allEvaluators.Add(expectedEvaluator);
            }

            allEvaluators.Add(Substitute.For <IEventEvaluator <SomeOtherView, IEventData> >());

            _target = new EventEvaluatorRegistry(_eventEvaluatorAttributeService, allEvaluators.ToArray());

            var matchingEvaluators = _target.Filter <TestView>(eventType);

            if (!shouldMatch)
            {
                Assert.Empty(matchingEvaluators);
            }
            else
            {
                var actions = expectedEvaluators.Select <IEventEvaluator, Action <IEventEvaluator> >(q => (e => Assert.Same(q, e))).ToArray();
                Assert.Collection(matchingEvaluators, actions);
            }
        }
示例#3
0
 public void Play <TView>(IEnumerable <IEvent> events, TView view)
     where TView : class, IView
 {
     foreach (var @event in events)
     {
         var eventEvaluators = _eventEvaluatorRegistry.Filter <TView>(@event.EventType);
         foreach (var eventEvaluator in eventEvaluators)
         {
             EvaluateEvent(eventEvaluator, view, @event);
         }
     }
 }