PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

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

http://github.com/ncqrs/ncqrs
C# | 157 lines | 129 code | 28 blank | 0 comment | 0 complexity | c09882c846e17f293df1ffa4c6bbceff MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0
  1. using System;
  2. using System.Linq;
  3. using FluentAssertions;
  4. using Ncqrs.Eventing.Sourcing;
  5. using Ncqrs.Eventing.Sourcing.Mapping;
  6. using Xunit;
  7. using Ncqrs.Domain;
  8. namespace Ncqrs.Tests.Eventing.Sourcing.Mapping
  9. {
  10. public class AttributeBasedDomainEventHandlerMappingStrategyTests
  11. {
  12. public class IlligalStaticMethodTarget
  13. : AggregateRoot
  14. {
  15. [EventHandler]
  16. public static void MyEventHandlerMethod(object e)
  17. {}
  18. }
  19. public class NoParameterMethodTarget : AggregateRoot
  20. {
  21. [EventHandler]
  22. public void MyEventHandlerMethod()
  23. {
  24. }
  25. }
  26. public class MoreThenOneParameterMethodTarget : AggregateRoot
  27. {
  28. [EventHandler]
  29. public void MyEventHandlerMethod(object e1, object e2)
  30. {
  31. }
  32. }
  33. public class NotADomainEventTarget : AggregateRoot
  34. {
  35. [EventHandler]
  36. public void MyEventHandlerMethod(String e)
  37. {
  38. }
  39. }
  40. public class GoodTarget : AggregateRoot
  41. {
  42. public class PublicEvent { }
  43. public class ProtectedEvent { }
  44. public class InternalEvent { }
  45. public class PrivateEvent { }
  46. public int PublicEventHandlerInvokeCount;
  47. public int ProtectedEventHandlerInvokeCount;
  48. public int InternalEventHandlerInvokeCount;
  49. public int PrivateEventHandlerInvokeCount;
  50. public int CatchAllEventHandlerInvokeCount;
  51. [EventHandler]
  52. public void PublicEventHandler(PublicEvent e)
  53. {
  54. PublicEventHandlerInvokeCount++;
  55. }
  56. [EventHandler]
  57. private void ProtectedEventHandler(ProtectedEvent e)
  58. {
  59. ProtectedEventHandlerInvokeCount++;
  60. }
  61. [EventHandler]
  62. private void InternalEventHandler(InternalEvent e)
  63. {
  64. InternalEventHandlerInvokeCount++;
  65. }
  66. [EventHandler]
  67. private void PrivateEventHandler(PrivateEvent e)
  68. {
  69. PrivateEventHandlerInvokeCount++;
  70. }
  71. [EventHandler]
  72. private void CatchAllEventHandler(object e)
  73. {
  74. CatchAllEventHandlerInvokeCount++;
  75. }
  76. }
  77. [Fact]
  78. public void It_should_throw_an_exception_when_mapped_method_is_static()
  79. {
  80. var aggregate = new IlligalStaticMethodTarget();
  81. var mapping = new AttributeBasedEventHandlerMappingStrategy();
  82. Action act = () => mapping.GetEventHandlers(aggregate);
  83. act.ShouldThrow<InvalidEventHandlerMappingException>();
  84. }
  85. [Fact]
  86. public void It_should_throw_an_exception_when_mapped_method_does_not_have_a_parameter()
  87. {
  88. var aggregate = new NoParameterMethodTarget();
  89. var mapping = new AttributeBasedEventHandlerMappingStrategy();
  90. Action act = () => mapping.GetEventHandlers(aggregate);
  91. act.ShouldThrow<InvalidEventHandlerMappingException>();
  92. }
  93. [Fact]
  94. public void It_should_throw_an_exception_when_mapped_method_does_have_more_then_one_parameter()
  95. {
  96. var aggregate = new MoreThenOneParameterMethodTarget();
  97. var mapping = new AttributeBasedEventHandlerMappingStrategy();
  98. Action act = () => mapping.GetEventHandlers(aggregate);
  99. act.ShouldThrow<InvalidEventHandlerMappingException>();
  100. }
  101. [Fact]
  102. public void It_should_map_the_mapped_events()
  103. {
  104. var aggregate = new GoodTarget();
  105. var mapping = new AttributeBasedEventHandlerMappingStrategy();
  106. var handlers = mapping.GetEventHandlers(aggregate);
  107. handlers.Count().Should().Be(5);
  108. }
  109. [Fact]
  110. public void It_should_create_the_correct_event_handlers()
  111. {
  112. var aggregate = new GoodTarget();
  113. var mapping = new AttributeBasedEventHandlerMappingStrategy();
  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. aggregate.CatchAllEventHandlerInvokeCount.Should().Be(4);
  127. }
  128. }
  129. }