PageRenderTime 49ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Extensions/src/Ncqrs.Eventing.Storage.RavenDB.Tests/RavenDBEventStoreTests.cs

http://github.com/ncqrs/ncqrs
C# | 167 lines | 137 code | 30 blank | 0 comment | 12 complexity | 2a13737581701c825ab26d38aa422599 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using FluentAssertions;
  6. using Ncqrs.Domain;
  7. using NUnit.Framework;
  8. using Raven.Client;
  9. using Rhino.Mocks;
  10. using Ncqrs.Eventing.Sourcing;
  11. namespace Ncqrs.Eventing.Storage.RavenDB.Tests
  12. {
  13. [TestFixture]
  14. public class RavenDBEventStoreTests : RavenDBTestBase
  15. {
  16. [Serializable]
  17. public class CustomerCreatedEvent
  18. {
  19. public CustomerCreatedEvent(string name, int age)
  20. {
  21. Name = name;
  22. Age = age;
  23. }
  24. public string Name { get; set; }
  25. public int Age
  26. {
  27. get;
  28. set;
  29. }
  30. public override bool Equals(object obj)
  31. {
  32. var other = obj as CustomerCreatedEvent;
  33. if (other == null)
  34. {
  35. return false;
  36. }
  37. bool result = Name.Equals(other.Name)
  38. && Age.Equals(other.Age);
  39. return result;
  40. }
  41. }
  42. [Serializable]
  43. public class CustomerNameChanged
  44. {
  45. public string NewName { get; set; }
  46. public CustomerNameChanged(string newName)
  47. {
  48. NewName = newName;
  49. }
  50. public override bool Equals(object obj)
  51. {
  52. var other = obj as CustomerNameChanged;
  53. if (other == null)
  54. {
  55. return false;
  56. }
  57. bool result = NewName.Equals(other.NewName);
  58. return result;
  59. }
  60. }
  61. [Test]
  62. public void Event_saving_smoke_test()
  63. {
  64. var targetStore = new RavenDBEventStore(_documentStore);
  65. var id = Guid.NewGuid();
  66. int sequenceCounter = 0;
  67. var events = new UncommittedEventStream(Guid.NewGuid());
  68. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
  69. 35),
  70. new Version(1, 0)));
  71. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  72. "Name" + sequenceCounter),
  73. new Version(1, 0)));
  74. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  75. "Name" + sequenceCounter),
  76. new Version(1, 0)));
  77. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  78. "Name" + sequenceCounter),
  79. new Version(1, 0)));
  80. targetStore.Store(events);
  81. }
  82. [Test]
  83. public void Saving_event_source_while_there_is_a_newer_event_source_should_throw_concurency_exception()
  84. {
  85. var targetStore = new RavenDBEventStore(_documentStore);
  86. var id = Guid.NewGuid();
  87. int sequenceCounter = 0;
  88. var events = new UncommittedEventStream(Guid.NewGuid());
  89. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
  90. 35),
  91. new Version(1, 0)));
  92. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  93. "Name" + sequenceCounter),
  94. new Version(1, 0)));
  95. targetStore.Store(events);
  96. Action act = () => targetStore.Store(events);
  97. act.ShouldThrow<ConcurrencyException>();
  98. }
  99. [Test]
  100. public void Retrieving_all_events_should_return_the_same_as_added()
  101. {
  102. var targetStore = new RavenDBEventStore(_documentStore);
  103. var id = Guid.NewGuid();
  104. int sequenceCounter = 0;
  105. var events = new UncommittedEventStream(Guid.NewGuid());
  106. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
  107. 35),
  108. new Version(1, 0)));
  109. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  110. "Name" + sequenceCounter),
  111. new Version(1, 0)));
  112. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  113. "Name" + sequenceCounter),
  114. new Version(1, 0)));
  115. events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
  116. "Name" + sequenceCounter),
  117. new Version(1, 0)));
  118. targetStore.Store(events);
  119. var result = targetStore.ReadFrom(id, long.MinValue, long.MaxValue);
  120. result.Count().Should().Be(events.Count());
  121. result.First().EventIdentifier.Should().Be(events.First().EventIdentifier);
  122. var streamList = events.ToList();
  123. var resultList = result.ToList();
  124. for (int i = 0; i < resultList.Count; i++)
  125. {
  126. Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
  127. }
  128. }
  129. private static bool AreEqual(UncommittedEvent uncommitted, CommittedEvent committed)
  130. {
  131. return uncommitted.EventIdentifier == committed.EventIdentifier
  132. && uncommitted.EventSourceId == committed.EventSourceId
  133. && uncommitted.Payload.Equals(committed.Payload)
  134. && uncommitted.EventSequence == committed.EventSequence;
  135. }
  136. }
  137. }