protected override void Context()
			{
				EventPublisher publisher = new EventPublisher();

				publisher.Publish(new EventData("1st"));
				publisher.Publish(new EventData("2nd"));

				eventData = publisher.GetMostRecentPublication<EventData>();
			}
Beispiel #2
0
        private static void Main(string[] args)
        {
            var testEventHappened = new TestEventHappened
            {
                Message = "Hello Eventing World!"
            };
            var eventPublisher = new EventPublisher<TestEventHappened>();

            eventPublisher.Publish<object>(testEventHappened);
        }
            public void EventEnvelopeCannotBeNull()
            {
                var messageFactory = new Mock<ICreateMessages>();
                var messageBus = new Mock<ISendMessages<EventEnvelope>>();
                var publisher = new EventPublisher(messageFactory.Object, messageBus.Object);

                var ex = Assert.Throws<ArgumentNullException>(() => publisher.Publish(HeaderCollection.Empty, null));

                Assert.Equal("payload", ex.ParamName);
            }
            protected override void Context()
            {
                _handler = MockRepository.GenerateMock<IEventHandler<EventData>>();

                IEventPublisher eventPublisher = new EventPublisher();

                eventPublisher.RegisterHandler(_handler);
                eventPublisher.UnregisterHandler(_handler);

                eventPublisher.Publish(new EventData("My Event Data"));
            }
        // ReSharper disable InconsistentNaming
        public void EventPublisherPublish_UnitTest_RegisteredType_FindsSubjectAndInvokesOnNext()
        // ReSharper restore InconsistentNaming
        {
            var memo = new DesignValidationMemo();

            var publisher = new EventPublisher();
            var subscription = publisher.GetEvent<DesignValidationMemo>().Subscribe(m => Assert.AreSame(memo, m));

            publisher.Publish(memo);
            subscription.Dispose();
        }
            public void HeadersCanBeNull()
            {
                var messageFactory = new Mock<ICreateMessages>();
                var messageBus = new Mock<ISendMessages<EventEnvelope>>();
                var publisher = new EventPublisher(messageFactory.Object, messageBus.Object);

                publisher.Publish(null, EventEnvelope.Empty);

                messageFactory.Verify(mock => mock.Create(null, EventEnvelope.Empty), Times.Once);
                messageBus.Verify(mock => mock.Send(It.IsAny<Message<EventEnvelope>>()), Times.Once);
            }
			protected override void Context()
			{
				_handler = MockRepository.GenerateMock<IEventHandler<EventData>>();
				_handler.Stub(h => h.Handle(null)).IgnoreArguments().Callback(delegate(EventData data)
					{
						_eventData = data.SomeData;
						return true;
					});

				IEventPublisher eventPublisher = new EventPublisher();
				eventPublisher.RegisterHandler(_handler);
				eventPublisher.Publish(new EventData("My Event Data"));
			}
			protected override void Context()
			{
				_handler = SetupHandlerToThrowException();

				IEventPublisher eventPublisher = new EventPublisher();

				eventPublisher.OnHandlerError(ex =>
					{
						handlerExecuted = true;
						caughtException = ex;
					});
				
				eventPublisher.RegisterHandler(_handler);
				eventPublisher.Publish(new EventData());
			}
Beispiel #9
0
        public void ResourceModel_Environment_DesignValidationService_WiredUp()
        {
            var eventPublisher = new EventPublisher();

            var environmentID = Guid.NewGuid();
            var environment   = new Mock <IServer>();

            environment.Setup(e => e.EnvironmentID).Returns(environmentID);
            environment.Setup(e => e.Connection.ServerEvents).Returns(eventPublisher);

            var instanceID = Guid.NewGuid();
            var model      = new ResourceModel(environment.Object, new Mock <IEventAggregator>().Object);

            var errors = model.GetErrors(instanceID);

            Assert.AreEqual(0, errors.Count);

            var err = new ErrorInfo
            {
                InstanceID = instanceID,
            };

            var memo = new DesignValidationMemo
            {
                InstanceID = environmentID,
                Errors     = new List <IErrorInfo>
                {
                    err
                }
            };

            //------------Execute Test---------------------------
            eventPublisher.Publish(memo);


            //------------Assert Results-------------------------
            errors = model.GetErrors(instanceID);
            Assert.AreEqual(1, errors.Count);
            Assert.AreSame(err, errors[0]);
        }
Beispiel #10
0
        /// <summary>
        /// 仅仅更新状态,不做任何检查,主要是为外部系统提供服务
        /// </summary>
        /// <param name="sysNo"></param>
        /// <param name="targetStatus"></param>
        public virtual void UpdateStatus(int?sysNo, ComboStatus targetStatus)
        {
            TransactionScopeFactory.TransactionAction(() =>
            {
                _da.UpdateStatus(sysNo, targetStatus);
                //更新活动状态
                //ObjectFactory<ComboPromotionEngine>.Instance.UpdateComboActivityStatus(sysNo.Value, targetStatus);

                // 发送待办消息
                switch (targetStatus)
                {
                // 待审核
                case ComboStatus.WaitingAudit:
                    EventPublisher.Publish <ComboSaleSubmitMessage>(new ComboSaleSubmitMessage
                    {
                        ComboSaleSysNo   = sysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    break;

                // 有效
                case ComboStatus.Active:
                    EventPublisher.Publish <ComboSaleActiveMessage>(new ComboSaleActiveMessage
                    {
                        ComboSaleSysNo   = sysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    break;

                // 无效
                case ComboStatus.Deactive:
                    EventPublisher.Publish <ComboSaleAuditRefuseMessage>(new ComboSaleAuditRefuseMessage
                    {
                        ComboSaleSysNo   = sysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    break;
                }
            });
        }
Beispiel #11
0
        public void EnvironmentTreeViewModel_PermissionsChanged_MemoIDEqualsEnvironmentServerId_UserPermissionChanges()
        {
            //------------Setup for test--------------------------


            var resourceID = Guid.NewGuid();
            //var connectionServerId = Guid.NewGuid();
            var memoServerID = Guid.NewGuid();

            var pubMemo = new PermissionsModifiedMemo {
                ServerID = memoServerID
            };

            pubMemo.ModifiedPermissions.Add(new WindowsGroupPermission {
                ResourceID = resourceID, Permissions = Permissions.Execute
            });
            pubMemo.ModifiedPermissions.Add(new WindowsGroupPermission {
                ResourceID = resourceID, Permissions = Permissions.DeployTo
            });

            var eventPublisher = new EventPublisher();
            var connection     = new Mock <IEnvironmentConnection>();

            connection.Setup(e => e.ServerEvents).Returns(eventPublisher);
            connection.SetupGet(c => c.ServerID).Returns(memoServerID);

            var srepo = new Mock <IStudioResourceRepository>();
            var repo  = new Mock <IResourceRepository>();

#pragma warning disable 168
            var environment = new EnvironmentModel(Guid.NewGuid(), connection.Object, repo.Object, srepo.Object)
            {
                Name = "localhost"
            };
#pragma warning restore 168
            connection.Setup(a => a.DisplayName).Returns("localhost");
            //------------Execute Test---------------------------
            eventPublisher.Publish(pubMemo);
            srepo.Verify(a => a.UpdateRootAndFoldersPermissions(It.IsAny <Permissions>(), It.IsAny <Guid>(), true), Times.Never());
        }
        public virtual void Delete(string[] ids)
        {
            var orders = GetByIds(ids, CustomerOrderResponseGroup.Full.ToString());

            using (var repository = RepositoryFactory())
            {
                //Raise domain events before deletion
                var changedEntries = orders.Select(x => new GenericChangedEntry <CustomerOrder>(x, EntryState.Deleted));
                EventPublisher.Publish(new OrderChangeEvent(changedEntries));

                repository.RemoveOrdersByIds(ids);

                foreach (var order in orders)
                {
                    DynamicPropertyService.DeleteDynamicPropertyValues(order);
                }

                repository.UnitOfWork.Commit();
                //Raise domain events after deletion
                EventPublisher.Publish(new OrderChangedEvent(changedEntries));
            }
        }
            protected override void Context()
            {
                _handler1 = MockRepository.GenerateMock <IEventHandler <EventData> >();
                _handler1.Stub(h => h.Handle(null)).IgnoreArguments().Callback(delegate(EventData data)
                {
                    _eventData1 = data.SomeData;
                    return(true);
                });

                _handler2 = MockRepository.GenerateMock <IEventHandler <EventData> >();
                _handler2.Stub(h => h.Handle(null)).IgnoreArguments().Callback(delegate(EventData data)
                {
                    _eventData2 = data.SomeData;
                    return(true);
                });

                IEventPublisher eventPublisher = new EventPublisher();

                eventPublisher.RegisterHandler(_handler1);
                eventPublisher.RegisterHandler(_handler2);
                eventPublisher.Publish(new EventData("My Event Data"));
            }
        public void ReceivingMessagesIsResumed(string firstName, string lastName, string email, string phone)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .AddEventListener <PersonEventListener>()
                             .CreateHost();

            host.Start();

            var publisher = new EventPublisher(busContext);

            var personEvent = new PersonAddedEvent {
                Person = new Person
                {
                    FirstName   = firstName,
                    LastName    = lastName,
                    Email       = email,
                    PhoneNumber = phone
                }
            };

            // Act
            host.Pause();

            publisher.Publish(personEvent);
            Thread.Sleep(WaitTime);

            host.Resume();
            Thread.Sleep(WaitTime);

            // Assert
            Assert.AreEqual(personEvent, PersonEventListener.ResultEvent);
        }
Beispiel #15
0
        public virtual async Task DeleteAsync(IEnumerable <string> ids)
        {
            using (var repository = RepositoryFactory())
            {
                var changedEntries = new List <GenericChangedEntry <FulfillmentCenter> >();
                var dbCenters      = await repository.GetFulfillmentCentersAsync(ids);

                foreach (var dbCenter in dbCenters)
                {
                    repository.Remove(dbCenter);
                    changedEntries.Add(new GenericChangedEntry <FulfillmentCenter>(dbCenter.ToModel(AbstractTypeFactory <FulfillmentCenter> .TryCreateInstance()), EntryState.Deleted));
                }

                await EventPublisher.Publish(new FulfillmentCenterChangingEvent(changedEntries));

                await repository.UnitOfWork.CommitAsync();

                await EventPublisher.Publish(new FulfillmentCenterChangedEvent(changedEntries));

                FulfillmentCenterCacheRegion.ExpireRegion();
            }
        }
        protected override void Save(IServer server, dynamic jsonObj)
        {
            try
            {
                string resName = jsonObj.resourceName;
                string resCat  = HelperUtils.SanitizePath((string)jsonObj.resourcePath, resName);
                if (_resourceModel != null)
                {
                    EventPublisher.Publish(new SaveUnsavedWorkflowMessage(_resourceModel, resName, resCat, AddToTabManager));
                }

                Close();
            }
            catch (Exception e)
            {
                Exception e1 = new Exception("There was a problem saving. Please try again.", e);

                Dev2Logger.Info(e.Message + Environment.NewLine + " Stacktrace : " + e.StackTrace + Environment.NewLine + " jsonObj: " + jsonObj.ToString());

                throw e1;
            }
        }
Beispiel #17
0
        public void OnSave()
        {
            bool successfulSave;

            try
            {
                using (var tx = Session.BeginTransaction())
                {
                    // this isn't strictly necessary, NHibernate will
                    // automatically do it for us, but it make things
                    // more explicit
                    Session.Update(Model.Action);

                    tx.Commit();
                }
                successfulSave = true;
            }
            catch (StaleObjectStateException)
            {
                var mergeResult = Presenters.ShowDialog <MergeResult?>("Merge", Model.Action);
                successfulSave = mergeResult != null;

                ReplaceSessionAfterError();
            }

            // we call ActionUpdated anyway, either we updated the value ourselves
            // or we encountered a concurrency conflict, in which case we _still_
            // want other parts of the application to update themselves with the values
            // from the db
            EventPublisher.Publish(new ActionUpdated
            {
                Id = Model.Action.Id
            }, this);

            if (successfulSave)
            {
                View.Close();
            }
        }
Beispiel #18
0
        public async Task EventPublisherShouldCallHandleOnEventHandlerWhenEventIsPublished()
        {
            //Arrange
            var logger = new Mock <ILogger>();
            var e      = new EmployeeAddedEvent(
                new Employee(new Company(1, ""), 1, "", "", ""), DateTime.Now);
            var t  = new List <Trucking.Business.Providers.Integration>();
            var kt = new Mock <TestEventHandler>();

            t.Add(kt.Object);
            var service = new Mock <ISubscriptionService>();

            service.Setup(f => f.GetSubscriptions <EmployeeAddedEvent>(e))
            .Returns(Task.FromResult(t.Cast <IHandle <EmployeeAddedEvent> >()));
            var publisher = new EventPublisher(logger.Object, service.Object);

            //Act
            await publisher.Publish(e);

            //Assert
            kt.Verify(f => f.Handle(e), Times.Once);
        }
        public static void PublishException(Exception e, bool inDockerContainer = true)
        {
            string eventBusHost;
            int    eventBusPort;

            if (inDockerContainer)
            {
                eventBusHost = "rabbitmq";
                eventBusPort = 5672;
            }
            else
            {
                eventBusHost = "localhost";
                eventBusPort = 5673;
            }

            var config = new EventBusConfig()
            {
                Host         = eventBusHost,
                Port         = eventBusPort,
                QueueName    = "jomaya.exception.publisher",
                ExchangeName = "my-bus"
            };

            var myEvent = new ExceptionThrownEvent()
            {
                ExceptionType = e.GetType(),
                GUID          = Guid.NewGuid().ToString(),
                Message       = e.Message,
                RoutingKey    = "jomaya.exception.exceptionthrownevent",
                StackTrace    = e.StackTrace,
                TimeStamp     = DateTime.Now
            };

            using (var publisher = new EventPublisher(config))
            {
                publisher.Publish(myEvent);
            }
        }
Beispiel #20
0
        /// <summary>
        /// Publishes the provided <paramref name="events"/> on the event bus.
        /// </summary>
        public virtual void Publish <TEvent>(IEnumerable <TEvent> events)
            where TEvent : IEvent <TAuthenticationToken>
        {
            events = events.ToList();
            foreach (TEvent @event in events)
            {
                IEnumerable <RouteHandlerDelegate> handlers;
                if (!PrepareAndValidateEvent(@event, "Akka", out handlers))
                {
                    return;
                }

                // This could be null if Akka won't handle the command and something else will.
                foreach (RouteHandlerDelegate eventHandler in handlers)
                {
                    eventHandler.Delegate(@event);
                }
            }

            // Let everything else know about the event
            EventPublisher.Publish(events);
        }
        /// <summary>
        /// 代收结算单 - 结算
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public GatherSettlementInfo SettleGatherSettlement(GatherSettlementInfo info)
        {
            info.SettleStatus = GatherSettleStatus.SET;
            GatherSettlementInfo oldSettle = GatherSettlementDA.GetVendorSettleGatherInfo(info);

            if (oldSettle.SettleStatus != GatherSettleStatus.AUD)
            {
                //该结算单不是已审核状态,不能进行结算操作!
                throw new BizException(GetMessageString("Gather_Audited_Invalid_Settle"));
            }
            GatherSettlementDA.UpdateGatherSettlementSettleStatus(info);
            //调用Invoice接口,创建PayItem:

            ExternalDomainBroker.CreatePayItem(
                new PayItemInfo()
            {
                OrderSysNo = info.SysNo.Value,
                PayAmt     = info.TotalAmt,
                OrderType  = PayableOrderType.CollectionSettlement,
                PayStyle   = PayItemStyle.Normal
            });

            //发送结算Message
            EventPublisher.Publish(new GatherSettlementSettledMessage()
            {
                SettlementSysNo  = info.SysNo.Value,
                CurrentUserSysNo = ServiceContext.Current.UserSysNo
            });

            //写Log:
            //CommonService.WriteLog<VendorSettleGatherEntity>(entity, " Settle Gather ", entity.SysNo.Value.ToString(), (int)LogType.Purchase_Verify_InStock);

            ExternalDomainBroker.CreateLog(" Settle Gather "
                                           , BizEntity.Common.BizLogType.Purchase_Verify_InStock
                                           , info.SysNo.Value
                                           , info.CompanyCode);
            return(info);
        }
Beispiel #22
0
        public void SendMessageToWMS(SOInfo soInfo, WMSAction action, OPCCallBackType callBackType)
        {
            object     mark           = new object();
            List <int> stockSysNoList = (from item in soInfo.Items
                                         where item.StockSysNo.HasValue && item.ProductType != SOProductType.Coupon && item.ProductType != SOProductType.ExtendWarranty
                                         select item.StockSysNo.Value).Distinct().ToList();

            lock (mark)
            {
                int masterID = this.SaveOPCMaster(soInfo, action, callBackType);
                foreach (int stockSysNo in stockSysNoList)
                {
                    WarehouseInfo wareInfo = ExternalDomainBroker.GetWarehouseInfo(stockSysNo);
                    string        stockID  = wareInfo == null ? "" : wareInfo.WarehouseID;
                    if (String.IsNullOrEmpty(stockID))
                    {
                        BizExceptionHelper.Throw("SO_Audit_StockIsNotExist", stockSysNo.ToString());
                    }

                    int transactionID = this.SaveOPCTransaction(soInfo.SysNo.Value, stockSysNo, masterID, soInfo.CompanyCode);
                    WMSSOActionRequestMessage requestEntity = new WMSSOActionRequestMessage
                    {
                        SOSysNo          = soInfo.SysNo.Value,
                        CompanyCode      = soInfo.CompanyCode,
                        ActionDate       = DateTime.Now,
                        ActionReason     = string.Format("{0} SO", action.ToDisplayText()),
                        StockSysNo       = stockSysNo,
                        TransactionSysNo = transactionID,
                        StockID          = stockID,
                        Language         = soInfo.BaseInfo.LanguageCode,
                        ActionType       = WMSActionToAction(action),
                        ActionUser       = ServiceContext.Current.UserSysNo
                    };
                    this.SaveOPCMessage(soInfo, transactionID, requestEntity);
                    EventPublisher.Publish <WMSSOActionRequestMessage>(requestEntity);
                }
            }
        }
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public CollectionPaymentInfo Audit(CollectionPaymentInfo entity)
        {
            string OperationIP             = entity.OperationIP;
            int?   OperationUserSysNumber  = entity.OperationUserSysNumber;
            string OperationUserUniqueName = entity.OperationUserUniqueName;

            entity.AuditUserSysNo = entity.CurrentUserSysNo;
            //entity.AuditUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName,
            //    BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName,
            //    BusinessContext.Current.CompanyCode);
            //entity.AuditUserSysNo = 3256;
            VerifyAudite(entity);
            VerifyProductPMSysNo(entity);


            entity.AuditTime = DateTime.Now;
            entity.Status    = POCollectionPaymentSettleStatus.Audited;

            entity = CollectionPaymentDA.UpdateVendorSettleStatus(entity);

            //发送ESB消息
            EventPublisher.Publish <CollectionPaymentAuditMessage>(new CollectionPaymentAuditMessage()
            {
                CurrentUserSysNo = ServiceContext.Current.UserSysNo,
                SysNo            = entity.SysNo.Value
            });

            entity.OperationIP             = OperationIP;
            entity.OperationUserSysNumber  = OperationUserSysNumber;
            entity.OperationUserUniqueName = OperationUserUniqueName;

            //CommonService.WriteLog<CollectionPaymentEntity>(entity, " Audit CollectionPayment ", entity.SysNo.Value.ToString(), (int)LogType.CollectionPayment_Audit);
            ExternalDomainBroker.CreateLog(" Audit CollectionPayment "
                                           , BizEntity.Common.BizLogType.POC_VendorSettle_Audit
                                           , entity.SysNo.Value
                                           , entity.CompanyCode);
            return(entity);
        }
Beispiel #24
0
        /// <summary>
        /// 厂商回复的批量发布与拒绝
        /// </summary>
        /// <param name="item"></param>
        public virtual void UpdateProductReviewVendorReplyStatus(ProductReviewReply item)
        {
            TransactionScopeFactory.TransactionAction(() =>
            {
                int x = productReviewDA.UpdateProductReviewVendorReplyStatus(item);

                switch (item.Status)
                {
                //发布
                case "A":
                    EventPublisher.Publish <ProductReviewReplyAuditMessage>(new ProductReviewReplyAuditMessage
                    {
                        SysNo            = item.SysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    break;

                //拒绝
                case "D":
                    EventPublisher.Publish <ProductReviewReplyVoidMessage>(new ProductReviewReplyVoidMessage
                    {
                        SysNo            = item.SysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    break;
                }


                if (x == 1001)
                {
                    throw new BizException(ResouceManager.GetMessageString("MKT.Comment", "Comment_VendorWithdrawData"));
                }
                else if (x == 1002)
                {
                    throw new BizException(ResouceManager.GetMessageString("MKT.Comment", "Comment_SubmitFailed"));
                }
            });
        }
Beispiel #25
0
        public void RemoveUnusedDataListItems()
        {
            var unusedScalars = ScalarCollection.Where(c => c.IsUsed == false).ToList();

            if (unusedScalars.Any())
            {
                foreach (var dataListItemModel in unusedScalars)
                {
                    ScalarCollection.Remove(dataListItemModel);
                }
            }
            var unusedRecordsets = RecsetCollection.Where(c => c.IsUsed == false).ToList();

            if (unusedRecordsets.Any())
            {
                foreach (var dataListItemModel in unusedRecordsets)
                {
                    RecsetCollection.Remove(dataListItemModel);
                }
            }
            foreach (var recset in RecsetCollection)
            {
                if (recset.Children.Count > 0)
                {
                    var unusedRecsetChildren = recset.Children.Where(c => c.IsUsed == false).ToList();
                    if (unusedRecsetChildren.Any())
                    {
                        foreach (var unusedRecsetChild in unusedRecsetChildren)
                        {
                            recset.Children.Remove(unusedRecsetChild);
                        }
                    }
                }
            }

            WriteToResourceModel();
            EventPublisher.Publish(new UpdateIntellisenseMessage());
        }
Beispiel #26
0
        /// <summary>
        /// 根据订单编号作废netpay
        /// </summary>
        /// <param name="soSysNo"></param>
        public virtual void AbandonBySOSysNo(int soSysNo)
        {
            NetPayInfo netpayInfo = GetValidBySOSysNo(soSysNo);

            if (netpayInfo != null)
            {
                TransactionOptions options = new TransactionOptions();
                options.IsolationLevel = IsolationLevel.ReadUncommitted;
                options.Timeout        = TimeSpan.FromMinutes(2);
                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
                {
                    m_NetpayDA.AbandonBySOSysNo(soSysNo);

                    //发送netpay作废Message
                    EventPublisher.Publish <NetpayAbandonedMessage>(new NetpayAbandonedMessage()
                    {
                        NetpaySysNo      = netpayInfo.SysNo.Value,
                        CurrentUserSysNo = ServiceContext.Current.UserSysNo
                    });
                    ts.Complete();
                }
            }
        }
Beispiel #27
0
        void ChangeStatus(ListenerStatus newStatus)
        {
            lock (syncLock)
            {
                if (Status == newStatus)
                {
                    return;
                }
                else if ((newStatus == ListenerStatus.Paused || newStatus == ListenerStatus.Stopped) && Status != ListenerStatus.Running)
                {
                    throw new InvalidOperationException("Listener is not running");
                }

                Status = newStatus;

                EventPublisher.Publish(new StatusChangedEvent()
                {
                    NewStatus = Status
                });

                Debug.WriteLine("Listener status is '{0}'", Status);
            }
        }
    public void DefaultingDispatcherDeserializesCorrectly()
    {
        using (var publisher = new EventPublisher())
            using (var target = new DefaultingDispatcherMock())
            {
                target.Open();

                var evt = new AnotherEvent()
                {
                    SomeValue = 7
                };
                publisher.Publish(evt);

                Thread.Sleep(100);

                Assert.Equal(true, target.DefaultHandlerHasBeenCalled);

                Assert.Equal(7, target.DefaultHandlerObject.Value <int>("SomeValue"));
                Assert.Equal("Dummy.AnotherEvent", target.DefaultHandlerObject.Value <string>("RoutingKey"));
                Assert.Equal(evt.Timestamp, target.DefaultHandlerObject.Value <long>("Timestamp"));
                Assert.Equal("InfoSupport.WSA.Infrastructure.Test.dummies.AnotherEvent", target.DefaultHandlerObject.Value <string>("TypeName"));
            }
    }
        public virtual void CategoryRequestCanel(CategoryRequestApprovalInfo info)
        {
            // if (categoryRequestApprovalDA.CheckCategoryUser(info.SysNo))
            //{
            //    throw new BizException("审核人和创建人不能是同一个人!");
            //}
            info.Status = CategoryAuditStatus.CategoryAuditCanel;

            using (TransactionScope scope = new TransactionScope())
            {
                categoryRequestApprovalDA.ActiveCategoryRequest(info);

                //取消审核之后发送消息
                EventPublisher.Publish <CategoryCancelMessage>(new CategoryCancelMessage()
                {
                    CancelUserSysNo = ServiceContext.Current.UserSysNo,
                    RequestSysNo    = info != null && info.SysNo.HasValue ? info.SysNo.Value : 0,
                    CategorySysNo   = info != null ? info.CategorySysNo : 0
                });

                scope.Complete();
            }
        }
        public async virtual Task AfterCreate(IEnumerable <E> objects)
        {
            // Feed the event service bus the DB trigger

            try
            {
                if (EventPublisher != null)
                {
                    await EventPublisher.Publish(GetEventName(OnCreateFormattedString), objects);
                }
            }
            catch (Exception e)
            {
                // TODO: implement a logging service for processing these requests (IPlatformLogger)
                throw e;
            }

            // Notify event subscribers of event

            try
            {
                if (EventSubscriberFactory != null)
                {
                    var subscribers = await EventSubscriberFactory.GetSubscribers(GetEventName(OnCreateFormattedString));

                    foreach (var subscriber in subscribers)
                    {
                        await EventSubscriberFactory.Execute(subscriber);
                    }
                }
            }
            catch (Exception e)
            {
                // TODO: implement a logging service for processing these requests (IPlatformLogger)
                throw e;
            }
        }
        public Round StartGame(StartGameCommand command)
        {
            Dealer dealer = new Dealer();
            Round  round  = new Round()
            {
                Dealer = dealer,
                Player = new Player()
                {
                    Hand = new PlayerHand()
                    {
                        CardsInHand = new List <Card>()
                        {
                            dealer.Hit(), dealer.Hit()
                        }
                    }
                },
            };
            GameStartedEvent gse = new GameStartedEvent()
            {
                round = round, RoutingKey = "blabla", GUID = Guid.NewGuid().ToString(), TimeStamp = DateTime.UtcNow
            };

            // Publish event
            using (var eventPublishService =
                       new EventPublisher(
                           new EventBusConfig()
            {
                QueueName = "web-app-listener-queue",
                Host = "localhost"
            })
                   )
            {
                eventPublishService.Publish(gse);
            }

            return(round);
        }
        public void EventListenerIsCalledWithCorrectEvent()
        {
            var serviceMock = new Mock <IServiceMock>(MockBehavior.Strict);

            serviceMock.Setup(d => d.PerformAction());

            using (var context = new TestBusContext())
            {
                var builder = new MicroserviceHostBuilder()
                              .RegisterDependencies((services) =>
                {
                    services.AddSingleton(serviceMock.Object);
                })
                              .WithContext(context)
                              .UseConventions();

                using (var host = builder.CreateHost())
                {
                    host.StartListening();

                    var eventPublisher = new EventPublisher(context);
                    var exampleEvent   = new ExampleEvent("XMPL.ExampleEvent")
                    {
                        Message = "Example message."
                    };
                    eventPublisher.Publish(exampleEvent);
                }

                var eventListenerIsCalled = EventListenerMock.ResetEvent.WaitOne(1000);
                Assert.IsTrue(eventListenerIsCalled);
                var actualEvent = EventListenerMock.ExampleEvent;
                Assert.AreEqual("XMPL.ExampleEvent", actualEvent.RoutingKey);
                Assert.AreEqual("Example message.", actualEvent.Message);
                serviceMock.VerifyAll();
            }
        }
        /// <summary>
        /// 创建顾客余额退款信息
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual BalanceRefundInfo Create(BalanceRefundInfo entity)
        {
            if (entity.ReturnPrepayAmt <= 0)
            {
                //throw new BizException("退款金额必须大于等于0。");
                ThrowBizException("BalanceRefund_RefundAmoutNeedMoreThan0");
            }
            if (!ExternalDomainBroker.ExistsCustomer(entity.CustomerSysNo.Value))
            {
                //throw new BizException(string.Format("编号为{0}的顾客不存在。", entity.CustomerSysNo));
                ThrowBizException("BalanceRefund_NotExsistCustomer", entity.CustomerSysNo);
            }

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.ReadUncommitted;
            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, options))
            {
                ExternalDomainBroker.AdjustCustomerPerpayAmount(entity.CustomerSysNo.Value, 0, -entity.ReturnPrepayAmt.Value, PrepayType.BalanceReturn, "余额账户转银行退款");

                entity.Status = BalanceRefundStatus.Origin;
                entity        = m_BalanceRefundDA.Create(entity);

                //发送创建Message
                EventPublisher.Publish(new CreateBalanceRefundMessage()
                {
                    ReturnPrepaySysNo = entity.SysNo.Value,
                    CurrentUserSysNo  = ServiceContext.Current.UserSysNo
                });


                ts.Complete();
            }

            return(entity);
        }
Beispiel #34
0
        public virtual async Task SaveChangesAsync(Store[] stores)
        {
            ValidateStoresProperties(stores);

            using (var repository = RepositoryFactory())
            {
                var changedEntries = new List <GenericChangedEntry <Store> >();
                var pkMap          = new PrimaryKeyResolvingMap();
                var dbStores       = await repository.GetStoresByIdsAsync(stores.Select(x => x.Id).ToArray());

                foreach (var store in stores)
                {
                    var targetEntity = dbStores.FirstOrDefault(x => x.Id == store.Id);
                    var sourceEntity = AbstractTypeFactory <StoreEntity> .TryCreateInstance().FromModel(store, pkMap);

                    if (targetEntity != null)
                    {
                        changedEntries.Add(new GenericChangedEntry <Store>(store, targetEntity.ToModel(AbstractTypeFactory <Store> .TryCreateInstance()),
                                                                           EntryState.Modified));
                        sourceEntity.Patch(targetEntity);
                    }
                    else
                    {
                        repository.Add(sourceEntity);
                        changedEntries.Add(new GenericChangedEntry <Store>(store, EntryState.Added));
                    }

                    await repository.UnitOfWork.CommitAsync();

                    pkMap.ResolvePrimaryKeys();
                    await EventPublisher.Publish(new StoreChangedEvent(changedEntries));
                }
            }

            ClearCache(stores);
        }
        public void EventListenerDoesCallListenerOnInvalidJson(string body)
        {
            // Arrange
            using var busContext = new RabbitMqContextBuilder()
                                   .WithExchange("TestExchange")
                                   .WithConnectionString("amqp://*****:*****@localhost")
                                   .CreateContext();

            using var host = new MicroserviceHostBuilder()
                             .WithBusContext(busContext)
                             .AddEventListener <PersonEventListener>()
                             .CreateHost();

            host.Start();

            EventPublisher publisher = new EventPublisher(busContext);

            // Act
            publisher.Publish(242424, "PeopleApp.Persons.New", Guid.NewGuid(), "PersonEvent", body);
            Thread.Sleep(WaitTime);

            // Assert
            Assert.IsNull(PersonEventListener.ResultEvent);
        }
Beispiel #36
0
        /// <summary>
        /// 作废代销商品规则
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual ConsignSettlementRulesInfo AbandonConsignSettlementRule(string settleRulesCode)
        {
            ConsignSettlementRulesInfo entity = ConsignSettlementRuleDA.GetConsignSettleRuleByCode(settleRulesCode);

            if (entity == null)
            {
                //规则({0})不存在,无法作废
                throw new BizException(string.Format(GetExceptionString("ConsignRule_RuleNotExist_Abandon"), settleRulesCode));
            }

            if (entity.Status != ConsignSettleRuleStatus.Wait_Audit)
            {
                //规则({0})不处于待审核状态,无法作废
                throw new BizException(string.Format(GetExceptionString("ConsignRule_WaitingAudit_Invalid_Abandon"), settleRulesCode));
            }

            entity.Status   = ConsignSettleRuleStatus.Forbid;
            entity.EditUser = ExternalDomainBroker.GetUserNameByUserSysNo(ServiceContext.Current.UserSysNo);
            entity          = Modify(entity, ConsignSettleRuleActionType.Abandon);

            //发送ESB消息
            EventPublisher.Publish <SettlementRuleAbandonMessage>(new SettlementRuleAbandonMessage()
            {
                AbandonUserSysNo = ServiceContext.Current.UserSysNo,
                SettleRulesCode  = settleRulesCode
            });

            //记录系统日志
            // WriteLog(entity, LogType.ConsignSettleRule_Abadon);

            ExternalDomainBroker.CreateLog(" Abandon ConsignSettleRule "
                                           , BizEntity.Common.BizLogType.ConsignSettleRule_Abadon
                                           , entity.RuleSysNo.Value
                                           , entity.CompanyCode);
            return(entity);
        }
 protected override void Context()
 {
     try
     {
         IEventPublisher eventPublisher = new EventPublisher();
         eventPublisher.Publish(new EventData("My Event Data"));
     }
     catch (Exception ex)
     {
         _caughtException = ex;
     }
 }
Beispiel #38
0
        public void ResourceModel_Rollback_FixedErrorsRestored()
        {
            //Setup();
            var eventPublisher = new EventPublisher();
            var environmentModel = CreateMockEnvironment(eventPublisher);

            var instanceID = Guid.NewGuid();
            var model = new ResourceModel(environmentModel.Object)
            {
                ID = instanceID
            };

            var hitCount = 0;
            model.OnDesignValidationReceived += (sender, memo) =>
            {
                switch (hitCount++)
                {
                    case 0:
                        Assert.AreEqual(2, model.Errors.Count);
                        Assert.AreEqual(0, model.FixedErrors.Count);
                        break;

                    case 1:
                        Assert.AreEqual(1, model.Errors.Count);
                        Assert.AreEqual(1, model.FixedErrors.Count);

                        model.Rollback();

                        Assert.AreEqual(2, model.Errors.Count);
                        Assert.AreEqual(0, model.FixedErrors.Count);
                        break;
                }
            };

            // Publish 2 errors
            var pubMemo = new DesignValidationMemo { InstanceID = instanceID };
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Critical, Message = "Critical error.", InstanceID = instanceID });
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Warning, Message = "Warning error.", InstanceID = instanceID });
            eventPublisher.Publish(pubMemo);

            // Fix 1 error and publish
            pubMemo.Errors.RemoveAt(1);
            eventPublisher.Publish(pubMemo);
        }
Beispiel #39
0
        public void ResourceModel_Environment_DesignValidationService_WiredUp()
        {
            var eventPublisher = new EventPublisher();

            var environmentID = Guid.NewGuid();
            var environment = new Mock<IEnvironmentModel>();
            environment.Setup(e => e.ID).Returns(environmentID);
            environment.Setup(e => e.Connection.ServerEvents).Returns(eventPublisher);

            var instanceID = Guid.NewGuid();
            var model = new ResourceModel(environment.Object, new Mock<IEventAggregator>().Object);

            var errors = model.GetErrors(instanceID);
            Assert.AreEqual(0, errors.Count);

            var err = new ErrorInfo
            {
                InstanceID = instanceID,
            };

            var memo = new DesignValidationMemo
            {
                InstanceID = environmentID,
                Errors = new List<IErrorInfo>
                {
                    err
                }
            };

            //------------Execute Test---------------------------
            eventPublisher.Publish(memo);

            //------------Assert Results-------------------------
            errors = model.GetErrors(instanceID);
            Assert.AreEqual(1, errors.Count);
            Assert.AreSame(err, errors[0]);
        }
Beispiel #40
0
        public void ResourceModel_DesignValidationServicePublishingMemo_UpdatesErrors()
        {
            //Setup();
            var instanceID = Guid.NewGuid();
            var pubMemo = new DesignValidationMemo { InstanceID = instanceID };
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Critical, Message = "Critical error.", InstanceID = instanceID });
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Warning, Message = "Warning error.", InstanceID = instanceID });

            var eventPublisher = new EventPublisher();
            var connection = new Mock<IEnvironmentConnection>();
            connection.Setup(e => e.ServerEvents).Returns(eventPublisher);

            var environmentModel = new Mock<IEnvironmentModel>();
            environmentModel.Setup(e => e.Connection).Returns(connection.Object);

            var model = new ResourceModel(environmentModel.Object)
            {
                ID = instanceID
            };

            model.OnDesignValidationReceived += (sender, memo) =>
            {
                Assert.AreEqual(memo.Errors.Count, model.Errors.Count, "OnDesignValidationReceived did not update the number of errors correctly.");

                foreach (var error in memo.Errors)
                {
                    var modelError = model.Errors.FirstOrDefault(me => me.ErrorType == error.ErrorType && me.Message == error.Message);
                    Assert.AreSame(error, modelError, "OnDesignValidationReceived did not set the error.");
                }
            };

            eventPublisher.Publish(pubMemo);
        }
Beispiel #41
0
        public void ResourceModel_DesignValidationServicePublishingMemo_NoInstanceID_DoesNotUpdatesErrors()
        {
            //Setup();
            var instanceID = Guid.NewGuid();
            var pubMemo = new DesignValidationMemo { InstanceID = instanceID };
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Critical, Message = "Critical error." });
            pubMemo.Errors.Add(new ErrorInfo { ErrorType = ErrorType.Warning, Message = "Warning error." });

            var eventPublisher = new EventPublisher();
            var connection = new Mock<IEnvironmentConnection>();
            connection.Setup(e => e.ServerEvents).Returns(eventPublisher);

            var environmentModel = new Mock<IEnvironmentModel>();
            environmentModel.Setup(e => e.Connection).Returns(connection.Object);

            var model = new ResourceModel(environmentModel.Object)
            {
                ID = instanceID
            };

            model.OnDesignValidationReceived += (sender, memo) => Assert.AreEqual(0, model.Errors.Count, "OnDesignValidationReceived did not update the number of errors correctly.");

            eventPublisher.Publish(pubMemo);
        }
            protected override void Context()
            {
                IEventPublisher eventPublisher = new EventPublisher();

                _handler1 = MockRepository.GenerateMock<IEventHandler<EventData>>();
                _handler1.Stub(h => h.Handle(null)).IgnoreArguments().Callback(delegate(EventData data)
                    {
                        eventPublisher.Publish(new SecondEvent());
                        return true;
                    });

                _handler2 = MockRepository.GenerateMock<IEventHandler<SecondEvent>>();
                _handler2.Stub(h => h.Handle(null)).IgnoreArguments().Callback(delegate(SecondEvent data)
                    {
                        _eventTwoWasHandled = true;
                        return true;
                    });

                eventPublisher.RegisterHandler(_handler1);
                eventPublisher.RegisterHandler(_handler2);

                eventPublisher.Publish(new EventData("My Event Data"));
            }
			protected override void Context()
			{
				throwingHandler = SetupHandlerToThrowException();
				catchingHandler = MockRepository.GenerateMock<IEventHandler<EventData>>();

				IEventPublisher eventPublisher = new EventPublisher();

				eventPublisher.RegisterHandler(throwingHandler);
				eventPublisher.RegisterHandler(catchingHandler)
					.WithErrorHandler(ex =>
						{
							caughtException = ex;
						});				

				eventPublisher.Publish(new EventData());
			}
Beispiel #44
0
        public virtual ActionResult Edit(EntryRevision model)
        {
            model.AllTags = Repository.FindAll <Tag>();

            if (!ModelState.IsValid)
            {
                model.SelectedTags = GetEditTags(model);
                return(View(model));
            }

            var author = Authenticator.GetName();
            var entry  = Repository.Get <Entry>(model.Id);

            if (entry == null && CurrentEntryExistsWithName(model.Name))
            {
                model.SelectedTags = GetEditTags(model);
                ModelState.AddModelError("PageExists", string.Format("A page with SLUG '{0}' already exists. You should edit that page instead", model.Name));
                return(View(model));
            }

            if (entry == null && CurrentEntryExistsWithName(model.Title) && model.Name == "")
            {
                model.SelectedTags = GetEditTags(model);
                ModelState.AddModelError("PageExists", string.Format("A page with SLUG '{0}' already exists. Please add a unique SLUG here.", model.Title));
                return(View(model));
            }

            entry = entry ?? new Entry {
                Author = author
            };
            entry.Name                = string.IsNullOrWhiteSpace(model.Name) ? model.Title.Slugify() : model.Name.ToString();
            entry.PageTemplate        = string.IsNullOrEmpty(model.PageTemplate) ? null : model.PageTemplate;
            entry.Title               = model.Title ?? string.Empty;
            entry.Summary             = model.Summary ?? string.Empty;
            entry.MetaTitle           = string.IsNullOrWhiteSpace(model.MetaTitle) ? model.Title : model.MetaTitle;
            entry.IsDiscussionEnabled = !model.DisableComments;
            entry.MetaDescription     = model.MetaDescription ?? string.Empty;
            entry.HideChrome          = model.HideChrome;

            //Only change the publish date if the dates no longer match, this means that
            //time changes wont be tracked.
            var published = DateTime.Parse(model.PublishDate + " " + DateTime.Now.ToShortTimeString(), CultureInfo.CurrentCulture).ToUniversalTime();

            if (entry.Published.Date != published.Date)
            {
                entry.Published = published;
            }

            entry.Status = model.Status;

            var revision = entry.Revise();

            revision.Author = author;
            revision.Body   = model.Body;
            revision.Reason = model.ChangeSummary ?? string.Empty;
            revision.Format = model.Format;

            var editTags = GetEditTags(model);
            var toDelete = entry.Tags.Where(t => !editTags.Contains(t)).ToList();
            var toAdd    = editTags.Where(t => !entry.Tags.Contains(t)).ToList();

            foreach (var tag in toDelete)
            {
                tag.Remove(entry);
            }
            foreach (var tag in toAdd)
            {
                if (tag.Id == 0)
                {
                    Repository.Add(tag);
                }
                tag.Add(entry);
            }

            EventPublisher.Publish(new EntrySavedEvent(entry));

            if (model.IsNew)
            {
                Repository.Add(entry);
            }

            return(RedirectToAction("Page", "Wiki", new { Area = "", page = entry.Name }));
        }
        public void ClientSecurityService_PermissionsModified_NewPermissionsReceived_ShouldReplaceCurrentPermissions()
        {
            //------------Setup for test--------------------------
            var connection = new Mock<IEnvironmentConnection>();
            IEventPublisher eventPublisher = new EventPublisher();
            connection.Setup(c => c.ServerEvents).Returns(eventPublisher);
            var clientSecurityService = new TestClientSecurityService(connection.Object);
            var currentPermissions = new List<WindowsGroupPermission>();
            Guid resourceID = Guid.NewGuid();

            var resourcePermission = new WindowsGroupPermission();
            resourcePermission.ResourceID = resourceID;
            resourcePermission.Permissions = Permissions.View & Permissions.Execute;

            var serverPermission = new WindowsGroupPermission();
            serverPermission.ResourceID = Guid.Empty;
            serverPermission.Permissions = Permissions.DeployFrom & Permissions.DeployTo;
            serverPermission.IsServer = true;

            currentPermissions.Add(serverPermission);
            currentPermissions.Add(resourcePermission);
            clientSecurityService.SetCurrentPermissions(currentPermissions);
            clientSecurityService.ReadAsync().Wait();

            var changedPermissions = new List<WindowsGroupPermission>();

            var changedResourcePermission = new WindowsGroupPermission();
            changedResourcePermission.ResourceID = resourceID;
            changedResourcePermission.Permissions = Permissions.Contribute;

            var changedServerPermission = new WindowsGroupPermission();
            changedServerPermission.ResourceID = Guid.Empty;
            changedServerPermission.Permissions = Permissions.Administrator;
            changedServerPermission.IsServer = true;

            changedPermissions.Add(changedServerPermission);
            changedPermissions.Add(changedResourcePermission);

            var permissionsModifiedMemo = new PermissionsModifiedMemo();
            permissionsModifiedMemo.ModifiedPermissions = changedPermissions;
            //------------Execute Test---------------------------
            connection.Raise(environmentConnection => environmentConnection.PermissionsModified += null, null,changedPermissions);
            eventPublisher.Publish(permissionsModifiedMemo);
            //------------Assert Results-------------------------
            var updateResourcePermission = clientSecurityService.Permissions.FirstOrDefault(permission => permission.ResourceID == resourceID);
            var updateServerPermission = clientSecurityService.Permissions.FirstOrDefault(permission => permission.ResourceID == Guid.Empty);
            Assert.IsNotNull(updateResourcePermission);
            Assert.IsNotNull(updateServerPermission);
            Assert.AreEqual(Permissions.Contribute, updateResourcePermission.Permissions);
            Assert.AreEqual(Permissions.Administrator, updateServerPermission.Permissions);
        }
        // ReSharper disable InconsistentNaming
        public void EventPublisherPublish_UnitTest_UnregisteredType_DoesNotFindSubject()
        // ReSharper restore InconsistentNaming
        {
            var memo = new Memo();

            var publisher = new EventPublisher();

            publisher.Publish(memo);
            Assert.IsTrue(true);
        }
        public void EnvironmentTreeViewModel_PermissionsChanged_MemoIDEqualsEnvironmentServerId_UserPermissionChangesNonLocalHost()
        {
            //------------Setup for test--------------------------


            var resourceID = Guid.NewGuid();
            //var connectionServerId = Guid.NewGuid();
            var memoServerID = Guid.NewGuid();

            var pubMemo = new PermissionsModifiedMemo { ServerID = memoServerID };

            pubMemo.ModifiedPermissions.Add(new WindowsGroupPermission { ResourceID = resourceID, Permissions = Permissions.Execute });
            pubMemo.ModifiedPermissions.Add(new WindowsGroupPermission { ResourceID = resourceID, Permissions = Permissions.DeployTo });

            var eventPublisher = new EventPublisher();
            var connection = new Mock<IEnvironmentConnection>();
            connection.Setup(e => e.ServerEvents).Returns(eventPublisher);
            connection.SetupGet(c => c.ServerID).Returns(memoServerID);

            var srepo = new Mock<IStudioResourceRepository>();
            var repo = new Mock<IResourceRepository>();
#pragma warning disable 168
            var environment = new EnvironmentModel(Guid.NewGuid(), connection.Object, repo.Object, srepo.Object) { Name = "localhost" };
            connection.Raise(environmentConnection => environmentConnection.NetworkStateChanged += null, new NetworkStateEventArgs(NetworkState.Offline, NetworkState.Online));
#pragma warning restore 168
            connection.Setup(a => a.DisplayName).Returns("bob");
            //------------Execute Test---------------------------
            eventPublisher.Publish(pubMemo);
            srepo.Verify(a => a.UpdateRootAndFoldersPermissions(It.IsAny<Permissions>(), It.IsAny<Guid>(), true), Times.Never());
        }
			protected override void Context()
			{
				_handler = SetupHandlerToThrowException();

				IEventPublisher eventPublisher = new EventPublisher();
				eventPublisher.RegisterHandler(_handler);
				
				try
				{
					eventPublisher.Publish(new EventData());
				}
				catch(Exception ex)
				{
					caughtException = ex;
				}
			}
Beispiel #49
0
 public void Accept()
 {
     _status = DocumentStatus.Accepted;
     EventPublisher.Publish(new DocumentAccepted(Id));
 }
			protected override void Context()
			{
				handlerExecutedCount = 0;
				_handler = SetupHandlerToThrowException();
				_handler2 = SetupHandlerToThrowException();

				IEventPublisher eventPublisher = new EventPublisher();

				eventPublisher.OnHandlerError(ex =>
					{
						handlerExecutedCount += 1;
					});

				eventPublisher.RegisterHandler(_handler);
				eventPublisher.RegisterHandler(_handler2);
				eventPublisher.Publish(new EventData());
			}