PageRenderTime 53ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/Framework/src/Ncqrs.Tests/Eventing/Conversion/EventConverterTests.cs

#
C# | 167 lines | 143 code | 23 blank | 1 comment | 0 complexity | e981aab541a6d0286303e0726e395c4d MD5 | raw file
Possible License(s): Apache-2.0
  1. using System;
  2. using FluentAssertions;
  3. using Ncqrs.Domain;
  4. using Ncqrs.Eventing.Conversion;
  5. using NUnit.Framework;
  6. using System.Reflection;
  7. namespace Ncqrs.Tests.Eventing.Conversion
  8. {
  9. public class EventConverterTests
  10. {
  11. public class FooEventV1Converter : IEventConverter<FooEventV1, FooEventV2>
  12. {
  13. public FooEventV2 Convert(FooEventV1 e)
  14. {
  15. return new FooEventV2(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp, e.Name, "");
  16. }
  17. }
  18. public class FooEventV2Converter : IEventConverter<FooEventV2, FooEventV3>
  19. {
  20. public FooEventV3 Convert(FooEventV2 e)
  21. {
  22. return new FooEventV3(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp, e.Name, e.LastName, "");
  23. }
  24. }
  25. public class FooEventV1 : DomainEvent
  26. {
  27. public string Name
  28. {
  29. get;
  30. set;
  31. }
  32. }
  33. public class FooEventV2 : DomainEvent
  34. {
  35. public string Name
  36. {
  37. get;
  38. set;
  39. }
  40. public string LastName
  41. {
  42. get;
  43. set;
  44. }
  45. public FooEventV2(Guid eventIdentifier, Guid aggregateRootId, long eventSequence, DateTime eventTimeStamp, string name, string lastName)
  46. : base(eventIdentifier, aggregateRootId, eventSequence, eventTimeStamp)
  47. {
  48. Name = name;
  49. LastName = lastName;
  50. }
  51. }
  52. public class FooEventV3 : DomainEvent
  53. {
  54. public string Name
  55. {
  56. get;
  57. set;
  58. }
  59. public string LastName
  60. {
  61. get;
  62. set;
  63. }
  64. public string Message
  65. {
  66. get;
  67. set;
  68. }
  69. public FooEventV3(Guid eventIdentifier, Guid aggregateRootId, long eventSequence, DateTime eventTimeStamp, string name, string lastName, string message)
  70. : base(eventIdentifier, aggregateRootId, eventSequence, eventTimeStamp)
  71. {
  72. Name = name;
  73. LastName = lastName;
  74. Message = message;
  75. }
  76. }
  77. public class BarEventV1 : DomainEvent
  78. {
  79. public string Name
  80. {
  81. get;
  82. set;
  83. }
  84. }
  85. public class BarEventV2 : DomainEvent
  86. {
  87. public string FullName
  88. {
  89. get;
  90. set;
  91. }
  92. public BarEventV2(Guid eventIdentifier, Guid aggregateRootId, long eventSequence, DateTime eventTimeStamp)
  93. : base(eventIdentifier, aggregateRootId, eventSequence, eventTimeStamp)
  94. {
  95. }
  96. }
  97. [Test]
  98. public void Calling_convert_should_call_convert_for_the_register_converter()
  99. {
  100. var converter = new EventConverter();
  101. converter.AddConverter(
  102. (BarEventV1 e) =>
  103. new BarEventV2(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp));
  104. converter.Convert(new BarEventV1()).Should().BeOfType<BarEventV2>();
  105. }
  106. [Test]
  107. public void Calling_convert_should_call_convert_until_there_is_no_converter_anymore()
  108. {
  109. var converter = new EventConverter();
  110. converter.AddConverter
  111. (
  112. (BarEventV1 e) =>
  113. new BarEventV2(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp)
  114. ).AddConverter
  115. (
  116. (FooEventV1 e) =>
  117. new FooEventV2(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp, e.Name, "")
  118. ).AddConverter
  119. (
  120. (FooEventV2 e) =>
  121. new FooEventV3(e.EventIdentifier, e.AggregateRootId, e.EventSequence, e.EventTimeStamp, e.Name,
  122. e.LastName, "")
  123. );
  124. converter.Convert(new FooEventV1()).Should().BeOfType<FooEventV3>();
  125. }
  126. [Test]
  127. public void Converting_should_stop_when_a_converter_converted_to_same_type()
  128. {
  129. var converter = new EventConverter();
  130. converter.AddConverter((BarEventV1 e) => e);
  131. converter.Convert(new BarEventV1());
  132. // If we do not get a infinitive loop, this test succeeds.
  133. }
  134. [Test]
  135. public void Adding_converters_from_assembly_should_find_all_converters()
  136. {
  137. var converter = new EventConverter();
  138. converter.AddConverters(typeof(EventConverterTests).Assembly);
  139. var eventToConvert = new FooEventV1();
  140. var conversionResult = converter.Convert(eventToConvert);
  141. conversionResult.Should().BeOfType<FooEventV3>();
  142. }
  143. }
  144. }