public void Saving_GivenEventWithGuidProperty_ShouldAllowReloadingToGuidType() { // Arrange var store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); var customer = new Customer(); customer.Signup(); var accountManager = new AccountManager(); var startDate = new DateTime(2012, 4, 28); accountManager.Employ(startDate); customer.AssignAccountManager(accountManager.Id, startDate); store.Save <Customer>(customer.Id.ToString(), EntityVersion.New, customer.GetUncommittedEvents()); store.Flush(); // Act var acctMgrAssignedEvent = (AccountManagerAssigned)store.Load <Customer>(customer.Id.ToString()) .Events .LastOrDefault(); // Assert Assert.NotNull(acctMgrAssignedEvent); Assert.AreEqual(accountManager.Id, acctMgrAssignedEvent.AccountManagerId); }
public static void Main(string[] args) { // configure EventStore var connection = EventStoreConnection.Create(new Uri("tcp://*****:*****@localhost:1113")); connection.ConnectAsync().Wait(); var storage = new EventStoreEventStore(connection); //// configure MongoDB //var mongoDatabase = new MongoClient("mongodb://127.0.0.1:27017").GetDatabase("SvishtovHighSchoolDb"); //var courseRepository = new MongoDbGenericRepository<CourseEntity>(mongoDatabase); //var bus = new FakeBus(); //var rep = new DomainRepository<Course>(storage, bus); //// create course //var courseCreater = new CourseCreatorHandler(rep); //bus.RegisterHandler<CreateCourseCommand>(courseCreater.Handle); //var sender = new Sender(); //var courseCreatedHandler = new CourseCreatedHandler(courseRepository, sender); //bus.RegisterHandler<CourseCreatedEvent>(courseCreatedHandler.Handle); //var courseId = Guid.NewGuid(); //var courseName = "Math"; //var courseCreateCommand = new CreateCourseCommand(courseName); //bus.Send(courseCreateCommand); //var course = courseRepository.FindAllAsync(x => true); // change course name //var changeCourseName = new CourseNameChangerHandler(rep); //bus.RegisterHandler<ChangeCourseNameCommand>(changeCourseName.Handle); //var courseNameChangedHandler = new CourseNameChangedHandler(courseRepository); //bus.RegisterHandler<CourseNameChangedEvent>(courseNameChangedHandler.Handle); //var changeCoursName = new ChangeCourseNameCommand(courseId, "Chemestry", 0); //bus.Send(changeCoursName); //course = courseRepository.FindAllAsync(x => true); //var changeCoursName1 = new ChangeCourseNameCommand(courseId, "Ankk", 1); //bus.Send(changeCoursName1); //course = courseRepository.FindAllAsync(x => true); //course.GetAwaiter().GetResult(); System.Console.ReadKey(); }
public void Loading_GivenEmptyStore_ShouldReturnNull() { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); // Act EventStream <Customer> events = store.Load <Customer>(Guid.NewGuid().ToString()); // Assert Assert.That(events, Is.Null); }
public void Saving_GivenNoEvents_ShouldDoNothing() { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); // Act var id = Guid.NewGuid(); store.Save <Customer>(id.ToString(), EntityVersion.New, Enumerable.Empty <IEvent>()); var stream = store.Load <Customer>(id.ToString()); // Assert Assert.That(stream, Is.Null); }
public void SavingButNotCommitting_GivenEvents_DoesNotAllowReloading() { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreSession, new ConsoleLogger()); // Act var customer = new Customer(); customer.Signup(); store.Save <Customer>(customer.Id.ToString(), EventStreamVersion.NoStream, customer.GetUncommittedEvents()); var stream = store.Load <Customer>(customer.Id.ToString()); // Assert Assert.Null(stream); }
public void GivenAggregateWithMultipleEvents_WhenLoadingSpecialNoStreamVersion_ThenShouldFail() { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); var customerId = Guid.NewGuid(); var storedEvents = new EventChain { new CustomerSignedUp(customerId), new SubscribedToNewsletter("latest"), new SubscribedToNewsletter("top") }; store.Save <Customer>(customerId.ToString(), EntityVersion.New, storedEvents); // Act / Assert Assert.Throws <ArgumentOutOfRangeException>(() => store.Load <Customer>(customerId.ToString(), EntityVersion.New)); }
public void Saving_GivenEvents_ShouldAllowReloading() { // Arrange var store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); // Act var customer = new Customer(); customer.Signup(); store.Save <Customer>(customer.Id.ToString(), EntityVersion.New, customer.GetUncommittedEvents()); store.Flush(); var stream = store.Load <Customer>(customer.Id.ToString()); // Assert Assert.NotNull(stream); CollectionAssert.AreEqual(customer.GetUncommittedEvents(), stream.Events, "Events reloaded from store do not match those generated by aggregate."); }
public EventSourcingRepositoryWithSqlServerTests(ITestOutputHelper output) { this.output = output; this.mediatorMock = new Mock <IMediator>(); this.mediatorMock.Setup(x => x.Publish(It.IsAny <DomainEventBase <Guid> >(), It.IsAny <CancellationToken>())).Returns(It.IsAny <Task>()); this.connection = EventStoreConnection.Create( ConnectionSettings.Create() .EnableVerboseLogging() .UseConsoleLogger() .DisableTls() .Build(), new IPEndPoint(IPAddress.Loopback, 1113), "naos.test"); this.connection.ConnectAsync().Wait(); var eventStore = new EventStoreEventStore(this.connection); this.sut = new EventSourcingRepository <TestAggregate, Guid>(eventStore, this.mediatorMock.Object); }
public void GivenAggregateWithMultipleEvents_WhenLoadingMaxVersion_ThenShouldReturnAllEvents() { // Arrange var store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); var customerId = Guid.NewGuid(); var storedEvents = new EventChain().Add(new CustomerSignedUp(customerId)) .Add(new SubscribedToNewsletter("latest")) .Add(new SubscribedToNewsletter("top")); store.Save <Customer>(customerId.ToString(), EntityVersion.New, storedEvents); store.Flush(); // Act var stream = store.Load <Customer>(customerId.ToString(), EntityVersion.Latest); // Assert CollectionAssert.AreEqual(storedEvents, stream.Events, "Events loaded from store do not match version requested."); }
public void GivenAggregateWithMultipleEvents_WhenLoadingSpecificVersionThatNoEventHas_ThenShouldFail() { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreSession, new ConsoleLogger()); var customerId = Guid.NewGuid(); var storedEvents = new IEvent[] { new CustomerSignedUp(customerId), new SubscribedToNewsletter("latest"), new SubscribedToNewsletter("top") }; store.Save <Customer>(customerId.ToString(), EventStreamVersion.NoStream, storedEvents); _eventStoreSession.Commit(); // Act / Assert Assert.Throws <ArgumentOutOfRangeException>(() => store.Load <Customer>(customerId.ToString(), 10)); }
public void GivenAggregateWithMultipleEvents_WhenLoadingSpecificVersion_ThenShouldOnlyReturnRequestedEvents(int version) { // Arrange IEventStore store = new EventStoreEventStore(_eventStoreSession, new ConsoleLogger()); var customerId = Guid.NewGuid(); var storedEvents = new EventChain().Add(new CustomerSignedUp(customerId)) .Add(new SubscribedToNewsletter("latest")) .Add(new SubscribedToNewsletter("top")); store.Save <Customer>(customerId.ToString(), EventStreamVersion.NoStream, storedEvents); _eventStoreSession.Commit(); // Act var stream = store.Load <Customer>(customerId.ToString(), version); // Assert CollectionAssert.AreEqual(storedEvents.Take(version + 1), stream.Events, "Events loaded from store do not match version requested."); }
public void Saving_GivenSingleEventNotFlushed_ShouldAllowReloading() { // Arrange var store = new EventStoreEventStore(_eventStoreConnection, new ConsoleLogger()); // Act var id = Guid.NewGuid(); var evt = new CustomerSignedUp(id); store.Save <Customer>(id.ToString(), EntityVersion.New, new[] { evt }); //store.Flush(); var stream = store.Load <Customer>(id.ToString()); // Assert Assert.NotNull(stream); CollectionAssert.AreEqual( new object[] { evt }, stream.Events, "Events reloaded from store do not match those generated by aggregate."); }