PageRenderTime 43ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/ncqrs/ncqrs
C# | 152 lines | 122 code | 30 blank | 0 comment | 0 complexity | faf32c5cf617b645a94fd641dd531051 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.Domain;
  5. using Ncqrs.Eventing.Sourcing;
  6. using Ncqrs.Eventing.Sourcing.Mapping;
  7. using Xunit;
  8. namespace Ncqrs.Tests.Eventing.Sourcing.Mapping
  9. {
  10. public class ConventionBasedDomainEventHandlerMappingStrategyTests
  11. {
  12. public class IlligalStaticMethodTarget : AggregateRootMappedByConvention
  13. {
  14. public static void OnDomainEvent(object e)
  15. { }
  16. }
  17. public class NoParameterMethodTarget : AggregateRootMappedByConvention
  18. {
  19. public void OnMyEvent()
  20. {
  21. }
  22. }
  23. public class MoreThenOneParameterMethodTarget : AggregateRootMappedByConvention
  24. {
  25. public void OnDomainEvent(object e1, object e2)
  26. {
  27. }
  28. }
  29. public class NotAIEventSourceTarget : AggregateRootMappedByConvention
  30. {
  31. public void OnDomainEvent(String e)
  32. {
  33. }
  34. }
  35. public class GoodTarget : AggregateRootMappedByConvention
  36. {
  37. public class PublicEvent { }
  38. public class ProtectedEvent { }
  39. public class InternalEvent { }
  40. public class PrivateEvent { }
  41. public int PublicEventHandlerInvokeCount;
  42. public int ProtectedEventHandlerInvokeCount;
  43. public int InternalEventHandlerInvokeCount;
  44. public int PrivateEventHandlerInvokeCount;
  45. public void OnPublicEvent(PublicEvent e)
  46. {
  47. PublicEventHandlerInvokeCount++;
  48. }
  49. private void OnProtectedEvent(ProtectedEvent e)
  50. {
  51. ProtectedEventHandlerInvokeCount++;
  52. }
  53. private void OnInternalEvent(InternalEvent e)
  54. {
  55. InternalEventHandlerInvokeCount++;
  56. }
  57. private void OnPrivateEvent(PrivateEvent e)
  58. {
  59. PrivateEventHandlerInvokeCount++;
  60. }
  61. }
  62. [Fact]
  63. public void It_should_skip_when_mapped_method_is_static()
  64. {
  65. var aggregate = new IlligalStaticMethodTarget();
  66. var mapping = new ConventionBasedEventHandlerMappingStrategy();
  67. var handlers = mapping.GetEventHandlers(aggregate);
  68. handlers.Should().BeEmpty();
  69. }
  70. [Fact]
  71. public void It_should_skip_when_mapped_method_does_not_have_a_parameter()
  72. {
  73. var aggregate = new NoParameterMethodTarget();
  74. var mapping = new ConventionBasedEventHandlerMappingStrategy();
  75. var handlers = mapping.GetEventHandlers(aggregate);
  76. handlers.Should().BeEmpty();
  77. }
  78. [Fact]
  79. public void It_should_skip_when_mapped_method_does_have_more_then_one_parameter()
  80. {
  81. var aggregate = new MoreThenOneParameterMethodTarget();
  82. var mapping = new ConventionBasedEventHandlerMappingStrategy();
  83. var handlers = mapping.GetEventHandlers(aggregate);
  84. handlers.Should().BeEmpty();
  85. }
  86. [Fact]
  87. public void It_should_skip_when_mapped_method_does_not_have_a_EventBaseType_as_parameter()
  88. {
  89. var aggregate = new NotAIEventSourceTarget();
  90. var mapping = new ConventionBasedEventHandlerMappingStrategy {EventBaseType = typeof (ISourcedEvent)};
  91. var handlers = mapping.GetEventHandlers(aggregate);
  92. handlers.Should().BeEmpty();
  93. }
  94. [Fact]
  95. public void It_should_map_the_mapped_events()
  96. {
  97. var aggregate = new GoodTarget();
  98. var mapping = new ConventionBasedEventHandlerMappingStrategy();
  99. var handlers = mapping.GetEventHandlers(aggregate);
  100. handlers.Count().Should().Be(4);
  101. handlers.Should().OnlyHaveUniqueItems();
  102. }
  103. [Fact]
  104. public void It_should_create_the_correct_event_handlers()
  105. {
  106. var aggregate = new GoodTarget();
  107. var mapping = new ConventionBasedEventHandlerMappingStrategy();
  108. var handlers = mapping.GetEventHandlers(aggregate);
  109. foreach (var handler in handlers)
  110. {
  111. handler.HandleEvent(new GoodTarget.PublicEvent());
  112. handler.HandleEvent(new GoodTarget.ProtectedEvent());
  113. handler.HandleEvent(new GoodTarget.InternalEvent());
  114. handler.HandleEvent(new GoodTarget.PrivateEvent());
  115. }
  116. aggregate.PublicEventHandlerInvokeCount.Should().Be(1);
  117. aggregate.ProtectedEventHandlerInvokeCount.Should().Be(1);
  118. aggregate.InternalEventHandlerInvokeCount.Should().Be(1);
  119. aggregate.PrivateEventHandlerInvokeCount.Should().Be(1);
  120. }
  121. }
  122. }