public void can_determine_negative_trigger_effect() { var filter1 = Mock <IPreProcessor>(); var filter2 = Mock <IPreProcessor>(); var sourceNode = Stub <IInteractionNode>(); var message = new ActionMessage(); message.Initialize(sourceNode); var handlingNode = Stub <IInteractionNode>(); var target = new object(); var parameters = new object[] { 5, "param" }; messageBinder.Expect(x => x.DetermineParameters(message, null, handlingNode, null)) .Return(parameters); filterManager.Stub(x => x.TriggerEffects) .Return(new[] { filter1, filter2 }).Repeat.Any(); filter1.Expect(x => x.Execute(message, handlingNode, parameters)) .Return(false); filter2.Expect(x => x.Execute(message, handlingNode, parameters)) .Return(true); var result = action.ShouldTriggerBeAvailable(message, handlingNode); result.ShouldBeFalse(); }
public void alters_return_with_post_execute_filters() { var handlingNode = Stub <IInteractionNode>(); var sourceNode = Stub <IInteractionNode>(); var result = Mock <IResult>(); var message = new ActionMessage(); message.Initialize(sourceNode); var target = new object(); var parameters = new object[] { 5, "param" }; var returnValue = new object(); var filter = MockRepository.GenerateMock <IPostProcessor>(); var context = EventArgs.Empty; var handler = Stub <IRoutedMessageHandler>(); handler.Stub(x => x.Unwrap()).Return(new object()); handlingNode.Stub(x => x.MessageHandler).Return(handler); messageBinder.Expect(x => x.DetermineParameters(message, null, handlingNode, context)) .Return(parameters); filterManager.Stub(x => x.PreProcessors) .Return(new IPreProcessor[] {}); method.Expect(x => x.Invoke(target, parameters)) .Return(returnValue); filterManager.Stub(x => x.PostProcessors) .Return(new[] { filter }); var outcome = new MessageProcessingOutcome(returnValue, returnValue.GetType(), false); filter.Expect(x => x.Execute(message, handlingNode, outcome)); messageBinder.Expect(x => x.CreateResult(outcome)) .IgnoreArguments() .Return(result); result.Expect(x => x.Execute(null)).IgnoreArguments(); action.Execute(message, handlingNode, context); }