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);
        }
示例#2
0
        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.");
        }
示例#8
0
        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.");
        }