public void Replay_in_the_right_order_with_many_events() { const string PATH = nameof(FolderEventstore_tests) + "_" + nameof(Replay_in_the_right_order_with_many_events); if (Directory.Exists(PATH)) { Directory.Delete(PATH, true); } var sut = new FolderEventstore(PATH); for (var i = 0; i < 50; i++) { sut.Record(new TestEvent { Foo = i.ToString() }); } var result = sut.Replay(); var prev = -1; foreach (var v in result.Events.Select(x => int.Parse(((TestEvent)x).Foo))) { Assert.Equal(1, v - prev); prev = v; } }
public void Replaying_a_subset() { const string PATH = nameof(FolderEventstore_tests) + "_" + nameof(Replaying_a_subset); if (Directory.Exists(PATH)) { Directory.Delete(PATH, true); } var sut = new FolderEventstore(PATH); sut.Record(new Event[] { new TestEvent { Foo = "a" }, new AnotherTestEvent { Bar = 1 }, new AnotherTestEvent { Bar = 2 }, new TestEvent { Foo = "b" }, new AnotherTestEvent { Bar = 3 } }); var state5 = sut.State; var result = sut.Replay(); Assert.Equal(state5.Version, result.Version); Assert.Equal(5, result.Events.Length); result = sut.Replay(typeof(TestEvent)); Assert.Equal(state5.Version, result.Version); Assert.Equal(new[] { "a", "b" }, result.Events.Select(e => ((TestEvent)e).Foo).ToArray()); result = sut.Replay(typeof(AnotherTestEvent)); Assert.Equal(state5.Version, result.Version); Assert.Equal(new[] { 1, 2, 3 }, result.Events.Select(e => ((AnotherTestEvent)e).Bar).ToArray()); }
public void FilebasedEventstore_acceptance_test() { const string PATH = nameof(Eventstore_scenario_tests) + "_" + nameof(FilebasedEventstore_acceptance_test); if (Directory.Exists(PATH)) { Directory.Delete(PATH, true); } using (var sut = new FolderEventstore(PATH)) { Event e0 = new TodoAdded("do dishes"); sut.Record(e0); sut.Record(new TodoAdded("walk dog")); Event e2 = new TodoAdded("write report"); sut.Record(new Event[] { e2, new TodoCategorized(e2.Id, "work") }); sut.Record(new TodoDone(e0.Id)); var result = sut.Replay(); var todos = result.Events.Aggregate(new Dictionary <string, ToDoItem>(), Map); Assert.Equal(2, todos.Count); Assert.Equal("write report", todos[e2.Id].Subject); Assert.Contains("work", todos[e2.Id].Categories); Dictionary <string, ToDoItem> Map(Dictionary <string, ToDoItem> items, Event e) { switch (e) { case TodoAdded a: items[a.Id] = new ToDoItem { Id = a.Id, Subject = a.Subject }; break; case TodoDone d: items.Remove(d.EntityId); break; case TodoCategorized c: foreach (var cat in c.Categories) { items[c.EntityId].Categories.Add(cat); } break; } return(items); } } }
public void Basic_recording_and_replaying() { const string PATH = nameof(FolderEventstore_tests) + "_" + nameof(Basic_recording_and_replaying); if (Directory.Exists(PATH)) { Directory.Delete(PATH, true); } var sut = new FolderEventstore(PATH); sut.Record(new TestEvent { Foo = "a" }); sut.Record(new[] { new TestEvent { Foo = "b" }, new TestEvent { Foo = "c" } }); var result = sut.Replay(); Assert.Equal(new[] { "a", "b", "c" }, result.Events.Select(e => ((TestEvent)e).Foo).ToArray()); }
public void Replaying_from_event_number() { const string PATH = nameof(FolderEventstore_tests) + "_" + nameof(Replaying_from_event_number); if (Directory.Exists(PATH)) { Directory.Delete(PATH, true); } var sut = new FolderEventstore(PATH); sut.Record(new Event[] { new TestEvent { Foo = "a" }, new AnotherTestEvent { Bar = 1 }, new AnotherTestEvent { Bar = 2 }, new TestEvent { Foo = "b" }, new AnotherTestEvent { Bar = 3 } }); Replay_from_somewhere_in_the_middle(); Replay_from_before_the_beginning(); Replay_from_after_the_end(); void Replay_from_somewhere_in_the_middle() { var result = sut.Replay(2); Assert.Equal(3, result.Events.Length); Assert.Equal(2, ((AnotherTestEvent)result.Events[0]).Bar); Assert.Equal("b", ((TestEvent)result.Events[1]).Foo); Assert.Equal(3, ((AnotherTestEvent)result.Events[2]).Bar); result = sut.Replay(4); Assert.Single(result.Events); result = sut.Replay(0); Assert.Equal(5, result.Events.Length); } void Replay_from_before_the_beginning() { var result = sut.Replay(-1); Assert.Equal(5, result.Events.Length); } void Replay_from_after_the_end() { var result = sut.Replay(5); Assert.Empty(result.Events); } }