PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

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

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