public void CreateProject_Creates_An_Aggregate_And_A_CommandCreated_Event() { using(var session = Store.OpenSession()) using(var kernel = new StandardKernel(new ServerModule())) { kernel.Bind<IDocumentSession>().ToConstant(session); var bus = kernel.Get<IBus>(); ProjectCreatedEvent @event = null; bus.Send<ProjectCreatedEvent>(e => @event = e); var command = new CreateProjectBuilder("Test Project").With.Description("A project for testing the Create process") as ICommandCreator<CreateProjectCommand>; bus.Send(command.GetCommand()); Assert.That(@event, Is.Not.Null); var eventStore = kernel.Get<IEventStore>(); var events = eventStore.GetEventsForAggregate(@event.Id); Assert.That(events, Has.Count.EqualTo(1)); var project = new Project(); project.LoadFromHistory(events); Assert.That(project._name, Is.EqualTo("Test Project")); Assert.That(project._description, Is.EqualTo("A project for testing the Create process")); } }
public static IEnumerable<dynamic> Map(IEnumerable<dynamic> events) { foreach (var project in events.Where(e => e is IEvent<Project>).GroupBy(e => e.AggregateID)) { var proj = new Project(project.Key, (IEnumerable<IEvent>)project.OrderBy(p => p.Version).Select(p => p.EventData)); yield return new ProjectInfo { Changes = project.Count(), Description = proj._description, Name = proj._name, ProjectId = proj._id }; } }