public void Errors_compensated_for_are_rethrown() { var operation = new FakeOperation { ThrowOnExecute = new Exception() }; var sut = new CompensatingOperationBehavior(new FakeOperation()); sut.AttachTo(operation); Assert.Throws<Exception>(() => sut.Execute()); }
public void When_no_error_occurs_in_the_operation_the_compensating_operation_is_not_executed() { var operation = new FakeOperation(); var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation); sut.AttachTo(operation); sut.Execute(); Assert.False(compensatingOperation.HasExecuted); }
public void When_an_error_occurs_in_the_operation_the_compensating_operation_is_immediately_executed() { var operation = new FakeOperation { ThrowOnExecute = new Exception() }; var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation); sut.AttachTo(operation); ExecuteIgnoringErrors(sut.Execute); Assert.True(compensatingOperation.HasExecuted); }
public void Compensating_operations_have_input_values_supplied_from_the_original_operation(object input) { var operation = new FakeInputOperation<object> { ThrowOnExecute = new Exception() }; var compensatingOperation = new FakeInputOperation<object>(); var sut = new CompensatingOperationBehavior(compensatingOperation); operation.Input(input); var parentOperation = new FakeOperation(new FakeOutputOperation<object> { OutputValue = input }, sut.AttachTo(new FakeOperationBehavior().AttachTo(operation))); ExecuteIgnoringErrors(parentOperation.Execute); Assert.True(compensatingOperation.InputWasProvided); Assert.Equal(input, compensatingOperation.ProvidedInput); }
public void When_specifying_a_compensated_exception_type_other_types_of_exceptions_will_not_be_compensated() { var operation = new FakeOperation { ThrowOnExecute = new Exception() }; var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation, typeof(ArgumentException)); sut.AttachTo(operation); ExecuteIgnoringErrors(sut.Execute); Assert.False(compensatingOperation.HasExecuted); }
public void When_no_compensating_action_is_triggered_no_event_is_logged(FakeWorkflowLogger log) { var operation = new FakeOperation { ThrowOnExecute = new Exception() }; var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation, typeof(ArgumentException)); sut.AttachTo(operation); sut.Initialize(new FakeWorkflowConfiguration { Logger = log }); ExecuteIgnoringErrors(sut.Execute); Assert.Equal(0, log.AppliedBehaviors.Count); }
public void Executing_a_compensating_operation_logs_an_event(FakeWorkflowLogger log) { var operation = new FakeOperation { ThrowOnExecute = new ArgumentException() }; var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation, typeof(Exception)); sut.AttachTo(operation); sut.Initialize(new FakeWorkflowConfiguration { Logger = log }); ExecuteIgnoringErrors(sut.Execute); Assert.Equal(1, log.AppliedBehaviors.Count); Assert.Equal("Executing compensating operation", log.AppliedBehaviors[0].Description); }
public void The_behavior_has_work_compensation_level_precedence() { var sut = new CompensatingOperationBehavior(new FakeOperation()); Assert.Equal(BehaviorPrecedence.WorkCompensation, sut.Precedence); }
public void When_specifying_a_compensated_exception_type_the_compensating_operation_will_be_executed_in_case_of_an_exception_inheriting_from_this_exception() { var operation = new FakeOperation { ThrowOnExecute = new ArgumentException() }; var compensatingOperation = new FakeOperation(); var sut = new CompensatingOperationBehavior(compensatingOperation, typeof(Exception)); sut.AttachTo(operation); ExecuteIgnoringErrors(sut.Execute); Assert.True(compensatingOperation.HasExecuted); }