public void TwoServiceSubriscribeAnEventReceivedEventOnTheirListener()
        {
            int raisedCount1 = 0;
            int raisedCount2 = 0;

            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                service.SubscribeEvent((sender, args) => ++ raisedCount1);
                service.SubscribeEvent((sender, args) => ++ raisedCount2);

                var th1 = new Thread(() =>
                {
                    // ReSharper disable once AccessToDisposedClosure
                    service.WaitEventsProcessed();
                });

                var th2 = new Thread(() =>
                {
                    // ReSharper disable once AccessToDisposedClosure
                    service.WaitEventsProcessed();
                });

                service.AddEvent();

                th1.Start();
                th2.Start();

                th1.Join();
                th2.Join();
            }

            Assert.Equal(1, raisedCount1);
            Assert.Equal(1, raisedCount2);
        }
 public CustomerService(EventSourcingService eventSourcingService)
 {
     _eventSourcingService = eventSourcingService;
     _eventSourcingService.SubscribeEvent(OrderCreated, OrderCreatedEventArgs.Empty);
     _customers.Add(SolventCustomer, 1000m);
     _customers.Add(InsolventCustomer, 50m);
 }
        public void AStallOnAListenerOnEventCantBlockOtherListener()
        {
            int raisedCount = 0;

            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                service.SubscribeEvent((sender, args) => { Thread.Sleep(int.MaxValue); });
                service.SubscribeEvent((sender, args) => { raisedCount++; });

                service.AddEvent();

                service.WaitEventsProcessed(100);
            }

            Assert.Equal(1, raisedCount);
        }
        public void WhenAParticularEventIsRaisedTheListenerRegisterToThisEventReceiveTheEvent()
        {
            int raisedCount = 0;

            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                service.SubscribeEvent((sender, args) => { raisedCount++; }, new CustomEventArgs());
                service.SubscribeEvent((sender, args) => { raisedCount++; });

                service.AddEvent(new CustomEventArgs());

                service.WaitEventsProcessed();
            }

            Assert.Equal(1, raisedCount);
        }
        public void WhenAnEventIsRaisedAllTheListenerReceiveTheEvent()
        {
            int raisedCount1 = 0;
            int raisedCount2 = 0;

            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                service.SubscribeEvent((sender, args) => { raisedCount1++; });
                service.SubscribeEvent((sender, args) => { raisedCount2++; });

                service.AddEvent();

                service.WaitEventsProcessed();
            }

            Assert.Equal(1, raisedCount1);
            Assert.Equal(1, raisedCount2);
        }
        public async Task TheListenerCanBeAlsoAsync()
        {
            int raisedCount = 0;

            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                service.SubscribeEvent(async(sender, args) => await Task.FromResult(raisedCount++));

                service.AddEvent();

                await service.WaitEventsProcessedAsync();
            }

            Assert.Equal(1, raisedCount);
        }
        public void TheEventRaisedToSusbscriberIsExactlyTheSameAddedToEventSourcing()
        {
            using (var service = new EventSourcingService(_unitOfWorkFactoryMock))
            {
                var       @event        = new CustomEventArgs();
                EventArgs receivedEvent = null;

                service.SubscribeEvent((sender, args) => { receivedEvent = args; }, new CustomEventArgs());

                service.AddEvent(@event);

                service.WaitEventsProcessed();

                Assert.Same(receivedEvent, @event);
            }
        }
 public OrderService(EventSourcingService eventSourcingService)
 {
     _eventSourcingService = eventSourcingService;
     _eventSourcingService.SubscribeEvent(CustomerCreditRervationResult, CreditReservedEventArgs.Empty);
     _eventSourcingService.SubscribeEvent(CustomerCreditRervationResult, CreditLimitExceededEventArgs.Empty);
 }