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

/Framework/src/Ncqrs.Tests/Eventing/Storage/Serialization/EventConverterTests.cs

http://github.com/ncqrs/ncqrs
C# | 160 lines | 132 code | 28 blank | 0 comment | 0 complexity | 4bbcfe885d68803da197ded0fbffb552 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0
  1. using System;
  2. using FluentAssertions;
  3. using Ncqrs.Eventing.Storage;
  4. using Ncqrs.Eventing.Storage.Serialization;
  5. using Newtonsoft.Json.Linq;
  6. using Rhino.Mocks;
  7. using Xunit;
  8. namespace Ncqrs.Tests.Eventing.Storage.Serialization
  9. {
  10. public class EventConverterTests
  11. {
  12. private IEventTypeResolver _typeResolver;
  13. private IEventConverter _childConverter = new NullEventConverter();
  14. private const string EventName = "bob";
  15. public EventConverterTests()
  16. {
  17. _typeResolver = MockRepository.GenerateStub<IEventTypeResolver>();
  18. _typeResolver
  19. .Stub(x => x.EventNameFor(typeof(AnEvent)))
  20. .TentativeReturn()
  21. .Return(EventName);
  22. _childConverter = MockRepository.GenerateStub<IEventConverter>();
  23. }
  24. [Fact]
  25. public void Ctor()
  26. {
  27. var converter = new EventConverter(_typeResolver);
  28. }
  29. [Fact]
  30. public void Ctor_typeResolver_null()
  31. {
  32. var ex = Assert.Throws<ArgumentNullException>(() => new EventConverter(null));
  33. ex.ParamName.Should().Be("typeResolver");
  34. }
  35. [Fact]
  36. public void Upgrade()
  37. {
  38. var event1 = CreateEvent("foo");
  39. var event2 = CreateEvent("bar");
  40. var fooConverter = MockRepository.GenerateStub<IEventConverter>();
  41. var barConverter = MockRepository.GenerateStub<IEventConverter>();
  42. var converter = new EventConverter(_typeResolver);
  43. converter.AddConverter("foo", fooConverter);
  44. converter.AddConverter("bar", barConverter);
  45. converter.Upgrade(event1);
  46. converter.Upgrade(event2);
  47. fooConverter.AssertWasCalled(x => x.Upgrade(event1));
  48. barConverter.AssertWasCalled(x => x.Upgrade(event2));
  49. }
  50. [Fact]
  51. public void Upgrade_unknown_event()
  52. {
  53. var converter = new EventConverter(_typeResolver);
  54. converter.Upgrade(CreateEvent());
  55. }
  56. [Fact]
  57. public void Upgrade_theEvent_null()
  58. {
  59. var converter = new EventConverter(_typeResolver);
  60. var ex = Assert.Throws<ArgumentNullException>(() => converter.Upgrade(null));
  61. ex.ParamName.Should().Be("theEvent");
  62. }
  63. [Fact]
  64. public void AddConverter_ByType()
  65. {
  66. var anEvent = CreateEvent();
  67. var converter = new EventConverter(_typeResolver);
  68. converter.AddConverter(typeof(AnEvent), _childConverter);
  69. converter.Upgrade(anEvent);
  70. _childConverter.AssertWasCalled(x => x.Upgrade(anEvent));
  71. }
  72. [Fact]
  73. public void AddConverter_ByType_eventType_null()
  74. {
  75. var converter = new EventConverter(_typeResolver);
  76. var ex = Assert.Throws<ArgumentNullException>(() => converter.AddConverter((Type) null, _childConverter));
  77. ex.ParamName.Should().Be("eventType");
  78. }
  79. [Fact]
  80. public void AddConverter_ByType_converter_null()
  81. {
  82. var converter = new EventConverter(_typeResolver);
  83. var ex = Assert.Throws<ArgumentNullException>(() => converter.AddConverter(typeof(AnEvent), null));
  84. ex.ParamName.Should().Be("converter");
  85. }
  86. [Fact]
  87. public void AddConverter_ByName()
  88. {
  89. var anEvent = CreateEvent();
  90. var converter = new EventConverter(_typeResolver);
  91. converter.AddConverter(EventName, _childConverter);
  92. converter.Upgrade(anEvent);
  93. _childConverter.AssertWasCalled(x => x.Upgrade(anEvent));
  94. }
  95. [Fact]
  96. public void AddConverter_ByName_eventName_null()
  97. {
  98. var converter = new EventConverter(_typeResolver);
  99. var ex = Assert.Throws<ArgumentNullException>(() => converter.AddConverter((string) null, _childConverter));
  100. ex.ParamName.Should().Be("eventName");
  101. }
  102. [Fact]
  103. public void AddConverter_ByName_converter_null()
  104. {
  105. var converter = new EventConverter(_typeResolver);
  106. var ex = Assert.Throws<ArgumentNullException>(() => converter.AddConverter(EventName, null));
  107. ex.ParamName.Should().Be("converter");
  108. }
  109. [Fact]
  110. public void AddConverter_duplicate_name()
  111. {
  112. var converter = new EventConverter(_typeResolver);
  113. converter.AddConverter(EventName, _childConverter);
  114. var ex = Assert.Throws<ArgumentException>(() => converter.AddConverter(EventName, _childConverter));
  115. ex.ParamName.Should().Be("eventName");
  116. ex.Message.Should().StartWith("There is already a converter for event 'bob'.");
  117. }
  118. private StoredEvent<JObject> CreateEvent()
  119. {
  120. return CreateEvent(EventName);
  121. }
  122. private StoredEvent<JObject> CreateEvent(string name)
  123. {
  124. var id = new Guid("36C84164-B324-496A-9098-1A5D9945DD88");
  125. var sourceId = new Guid("A710F584-7134-4BAB-9741-75A35F9C1E02");
  126. var theDate = new DateTime(2000, 01, 01);
  127. JObject obj = new JObject();
  128. return new StoredEvent<JObject>(id, theDate, name, new Version(1, 0), sourceId, 1, obj);
  129. }
  130. private class AnEvent {}
  131. }
  132. }