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

/Extensions/src/Ncqrs.Eventing.Storage.SqlLite.Tests/SQLiteEventStoreTests.cs

http://github.com/ncqrs/ncqrs
C# | 129 lines | 109 code | 19 blank | 1 comment | 10 complexity | 2732e68e3d67da60af7797d5f4729a74 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, Apache-2.0
  1. using Ncqrs.Eventing.Sourcing;
  2. namespace Ncqrs.Eventing.Storage.SQLite.Tests{
  3. using System;
  4. using System.Data.SQLite;
  5. using System.IO;
  6. using System.Linq;
  7. using Fakes;
  8. using FluentAssertions;
  9. using NUnit.Framework;
  10. using Rhino.Mocks;
  11. [TestFixture]
  12. public class SQLiteEventStoreTests{
  13. [SetUp]
  14. public void Setup()
  15. {
  16. _path = Path.GetTempFileName();
  17. _connString = string.Format("Data Source={0};", _path);
  18. File.Delete(_path);
  19. SQLiteEventStore.EnsureDatabaseExists(_connString);
  20. _store = new SQLiteEventStore(_connString);
  21. }
  22. [TearDown]
  23. public void Teardown()
  24. {
  25. File.Delete(_path);
  26. }
  27. private string _path;
  28. private string _connString;
  29. private SQLiteEventStore _store;
  30. [Test]
  31. public void EnsuresDatabaseExists()
  32. {
  33. using (var conn = new SQLiteConnection(_connString)) conn.Open();
  34. }
  35. [Test]
  36. public void Save_SmokeTest()
  37. {
  38. var sequenceCounter = 0;
  39. var id=Guid.NewGuid();
  40. var stream = new UncommittedEventStream(Guid.NewGuid());
  41. stream.Append(
  42. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
  43. new Version(1, 0)));
  44. stream.Append(
  45. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
  46. new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
  47. stream.Append(
  48. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
  49. new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
  50. _store.Store(stream);
  51. }
  52. [Test]
  53. public void Retrieving_all_events_should_return_the_same_as_added() {
  54. var id=Guid.NewGuid();
  55. var sequenceCounter=0;
  56. var stream = new UncommittedEventStream(Guid.NewGuid());
  57. stream.Append(
  58. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
  59. new Version(1, 0)));
  60. stream.Append(
  61. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
  62. new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
  63. stream.Append(
  64. new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
  65. new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
  66. _store.Store(stream);
  67. var result=_store.ReadFrom(id, long.MinValue, long.MaxValue);
  68. result.Count().Should().Be(stream.Count());
  69. result.First().EventIdentifier.Should().Be(stream.First().EventIdentifier);
  70. //TODO:
  71. var streamList = stream.ToList();
  72. var resultList = result.ToList();
  73. for (int i = 0; i < resultList.Count; i++)
  74. {
  75. Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
  76. }
  77. }
  78. private static bool AreEqual(UncommittedEvent uncommitted, CommittedEvent committed)
  79. {
  80. return uncommitted.EventIdentifier == committed.EventIdentifier
  81. && uncommitted.EventSourceId == committed.EventSourceId
  82. && uncommitted.Payload.Equals(committed.Payload)
  83. && uncommitted.EventTimeStamp == committed.EventTimeStamp
  84. && uncommitted.EventSequence == committed.EventSequence;
  85. }
  86. [Test]
  87. public void Retrieved_event_should_having_identical_timestamp_as_persisted() {
  88. var id = Guid.NewGuid();
  89. var utcNow = DateTime.UtcNow.Date.AddHours(9).AddTicks(-1);
  90. var stream = new UncommittedEventStream(Guid.NewGuid());
  91. stream.Append(
  92. new UncommittedEvent(Guid.NewGuid(), id, 1, 0, utcNow, new CustomerCreatedEvent("Foo", 35),
  93. new Version(1, 0)));
  94. _store.Store(stream);
  95. using (var conn = new SQLiteConnection(_connString))
  96. {
  97. conn.Open();
  98. using (var cmd = new SQLiteCommand("SELECT [TimeStamp] FROM [Events]", conn))
  99. using (var reader = cmd.ExecuteReader())
  100. {
  101. while (reader.Read())
  102. {
  103. var timestamp = (long)reader["Timestamp"];
  104. timestamp.Should().Be(utcNow.Ticks);
  105. }
  106. }
  107. }
  108. }
  109. }
  110. }