PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/Framework/src/Ncqrs.Tests/Eventing/Sourcing/Mapping/ExpressionBasedDomainEventHandlerMappingStrategyTests.cs

http://github.com/ncqrs/ncqrs
C# | 194 lines | 155 code | 39 blank | 0 comment | 0 complexity | da2d2870568b9d2fa82801d040263bc8 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0
  1. using System;
  2. using FluentAssertions;
  3. using Ncqrs.Domain;
  4. using Ncqrs.Eventing.Sourcing;
  5. using Ncqrs.Eventing.Sourcing.Mapping;
  6. using Xunit;
  7. using System.Linq;
  8. namespace Ncqrs.Tests.Eventing.Sourcing.Mapping
  9. {
  10. public class ExpressionBasedDomainEventHandlerMappingStrategyTests
  11. {
  12. public class IlligalStaticMethodTarget : AggregateRootMappedWithExpressions
  13. {
  14. public override void InitializeEventHandlers()
  15. {
  16. Map<object>().ToHandler(OnDomainEvent);
  17. }
  18. public static void OnDomainEvent(object e)
  19. { }
  20. }
  21. public class GoodTarget : AggregateRootMappedWithExpressions
  22. {
  23. public override void InitializeEventHandlers()
  24. {
  25. Map<PublicEvent>().ToHandler(OnPublicEvent);
  26. Map<ProtectedEvent>().ToHandler(OnProtectedEvent);
  27. Map<InternalEvent>().ToHandler(OnInternalEvent);
  28. Map<PrivateEvent>().ToHandler(OnPrivateEvent);
  29. }
  30. public class PublicEvent { }
  31. public class ProtectedEvent { }
  32. public class InternalEvent { }
  33. public class PrivateEvent { }
  34. public int PublicEventHandlerInvokeCount;
  35. public int ProtectedEventHandlerInvokeCount;
  36. public int InternalEventHandlerInvokeCount;
  37. public int PrivateEventHandlerInvokeCount;
  38. public void OnPublicEvent(PublicEvent e)
  39. {
  40. PublicEventHandlerInvokeCount++;
  41. }
  42. private void OnProtectedEvent(ProtectedEvent e)
  43. {
  44. ProtectedEventHandlerInvokeCount++;
  45. }
  46. private void OnInternalEvent(InternalEvent e)
  47. {
  48. InternalEventHandlerInvokeCount++;
  49. }
  50. private void OnPrivateEvent(PrivateEvent e)
  51. {
  52. PrivateEventHandlerInvokeCount++;
  53. }
  54. }
  55. public class MismatchOnEventTypeTarget : AggregateRootMappedWithExpressions
  56. {
  57. public override void InitializeEventHandlers()
  58. {
  59. Map<DerivedEvent>().ToHandler(OnPublicEvent);
  60. }
  61. public void OnPublicEvent(BaseEvent e)
  62. { }
  63. public class BaseEvent
  64. { }
  65. public class DerivedEvent : BaseEvent
  66. { }
  67. }
  68. public class EventMappedExactOnMethodWithDerivedEventTypeTarget : AggregateRootMappedWithExpressions
  69. {
  70. public override void InitializeEventHandlers()
  71. {
  72. Map<BaseEvent>().ToHandler(OnPublicEvent).MatchExact();
  73. }
  74. public class BaseEvent
  75. { }
  76. public class DerivedEvent : BaseEvent
  77. { }
  78. public void OnPublicEvent(BaseEvent e)
  79. { }
  80. }
  81. public class EventMappedOnMethodWithDerivedEventTypeTarget : AggregateRootMappedWithExpressions
  82. {
  83. public override void InitializeEventHandlers()
  84. {
  85. Map<BaseEvent>().ToHandler(OnPublicEvent);
  86. }
  87. public class BaseEvent
  88. { }
  89. public class DerivedEvent : BaseEvent
  90. { }
  91. public void OnPublicEvent(BaseEvent e)
  92. { }
  93. }
  94. [Fact]
  95. public void It_should_throw_an_exception_when_mapped_method_is_static()
  96. {
  97. Action act = () => new IlligalStaticMethodTarget();
  98. act.ShouldThrow<InvalidEventHandlerMappingException>();
  99. }
  100. [Fact]
  101. public void It_should_map_the_mapped_events()
  102. {
  103. var aggregate = new GoodTarget();
  104. var mapping = new ExpressionBasedEventHandlerMappingStrategy();
  105. var handlers = mapping.GetEventHandlers(aggregate);
  106. handlers.Count().Should().Be(4);
  107. handlers.Should().OnlyHaveUniqueItems();
  108. }
  109. [Fact]
  110. public void It_should_create_the_correct_event_handlers()
  111. {
  112. var aggregate = new GoodTarget();
  113. var mapping = new ExpressionBasedEventHandlerMappingStrategy();
  114. var handlers = mapping.GetEventHandlers(aggregate);
  115. foreach (var handler in handlers)
  116. {
  117. handler.HandleEvent(new GoodTarget.PublicEvent());
  118. handler.HandleEvent(new GoodTarget.ProtectedEvent());
  119. handler.HandleEvent(new GoodTarget.InternalEvent());
  120. handler.HandleEvent(new GoodTarget.PrivateEvent());
  121. }
  122. aggregate.PublicEventHandlerInvokeCount.Should().Be(1);
  123. aggregate.ProtectedEventHandlerInvokeCount.Should().Be(1);
  124. aggregate.InternalEventHandlerInvokeCount.Should().Be(1);
  125. aggregate.PrivateEventHandlerInvokeCount.Should().Be(1);
  126. }
  127. [Fact]
  128. public void It_should_not_handle_event_when_there_is_a_mapping_inheritance_type_mismatch()
  129. {
  130. var aggregate = new MismatchOnEventTypeTarget();
  131. var mapping = new ExpressionBasedEventHandlerMappingStrategy();
  132. var handlers = mapping.GetEventHandlers(aggregate);
  133. foreach (var handler in handlers)
  134. handler.HandleEvent(new MismatchOnEventTypeTarget.BaseEvent()).Should().BeFalse();
  135. }
  136. [Fact]
  137. public void It_should_not_handle_event_when_there_needs_to_be_an_exact_match_and_event_types_are_derived()
  138. {
  139. var aggregate = new EventMappedExactOnMethodWithDerivedEventTypeTarget();
  140. var mapping = new ExpressionBasedEventHandlerMappingStrategy();
  141. var handlers = mapping.GetEventHandlers(aggregate);
  142. foreach (var handler in handlers)
  143. handler.HandleEvent(new EventMappedExactOnMethodWithDerivedEventTypeTarget.DerivedEvent()).Should().BeFalse();
  144. }
  145. [Fact]
  146. public void It_should_handle_event_when_there_is_no_exact_match_and_event_types_are_derived()
  147. {
  148. var aggregate = new EventMappedOnMethodWithDerivedEventTypeTarget();
  149. var mapping = new ExpressionBasedEventHandlerMappingStrategy();
  150. var handlers = mapping.GetEventHandlers(aggregate);
  151. foreach (var handler in handlers)
  152. handler.HandleEvent(new EventMappedOnMethodWithDerivedEventTypeTarget.DerivedEvent()).Should().BeTrue();
  153. }
  154. }
  155. }