示例#1
0
 private void Run(OrderEventArgs e, OrderEventHandler handler)
 {
     if (handler != null)
     {
         handler(this, e);
     }
 }
示例#2
0
 public OrderService(
     IProductRepository productRepository,
     OrderEventHandler orderEventHandler,
     UpdateProductStatusCommandHandler updateProductStatusCommandHandler)
 {
     _productRepository = productRepository;
     _orderEventHandler = orderEventHandler;
     _updateProductStatusCommandHandler = updateProductStatusCommandHandler;
 }
示例#3
0
        public void Setup()
        {
            // 初始化会议数据库
            using (var context = new ConferenceContext(this._dbName)) {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }
                context.Database.Create();
            }

            // 模拟事件总线
            this._busEvents = new List <IEvent>();
            var busMock = new Mock <IEventBus>();

            busMock.Setup(b => b.Publish(It.IsAny <Envelope <IEvent> >()))
            .Callback <Envelope <IEvent> >(e => this._busEvents.Add(e.Body));
            busMock.Setup(b => b.Publish(It.IsAny <IEnumerable <Envelope <IEvent> > >()))
            .Callback <IEnumerable <Envelope <IEvent> > >(es => this._busEvents.AddRange(es.Select(e => e.Body)));

            this._service = new ConferenceService(busMock.Object, this._dbName);

            this._conference = new ConferenceInfo()
            {
                OwnerEmail  = "*****@*****.**",
                OwnerName   = "test owner",
                AccessCode  = "qwerty",
                Name        = "test conference",
                Description = "test conference description",
                Location    = "redmond",
                Slug        = "test",
                StartDate   = DateTime.UtcNow,
                EndDate     = DateTime.UtcNow.Add(TimeSpan.FromDays(2)),
                Seats       =
                {
                    new SeatType()
                    {
                        Name        = "general",
                        Description = "general description",
                        Price       = 100,
                        Quantity    = 10
                    }
                }
            };

            this._service.CreateConference(this._conference);

            this._placed = new OrderPlaced()
            {
                ConferenceId = Guid.NewGuid(),
                SourceId     = Guid.NewGuid(),
                AccessCode   = "asdf"
            };

            this._eventHandler = new OrderEventHandler(() => new ConferenceContext(_dbName));
            this._eventHandler.Handle(_placed);
        }
        public given_an_order()
        {
            placed = new OrderPlaced {
                ConferenceId = Guid.NewGuid(),
                SourceId     = Guid.NewGuid(),
                AccessCode   = "asdf"
            };

            sut = new OrderEventHandler(() => new ConferenceContext());
            sut.Handle(placed);
        }
示例#5
0
        public void Setup()
        {
            using (var context = new ConferenceContext(_dbName)) {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }
                context.Database.Create();
            }

            this._eventHandler = new OrderEventHandler(() => new ConferenceContext(_dbName));
        }
        public given_no_order()
        {
            using (var context = new ConferenceContext(dbName))
            {
                if (context.Database.Exists())
                    context.Database.Delete();

                context.Database.Create();
            }

            this.sut = new OrderEventHandler(() => new ConferenceContext(dbName));
        }
示例#7
0
        public given_an_order()
        {
            this.placed = new OrderPlaced
            {
                ConferenceId = Guid.NewGuid(),
                SourceId     = Guid.NewGuid(),
                AccessCode   = "asdf",
            };

            this.sut = new OrderEventHandler(() => new ConferenceContext(dbName));
            this.sut.Handle(placed);
        }
        public given_an_order()
        {
            this.placed = new OrderPlaced
            {
                ConferenceId = Guid.NewGuid(),
                SourceId = Guid.NewGuid(),
                AccessCode = "asdf",
            };

            this.sut = new OrderEventHandler(() => new ConferenceContext(dbName));
            this.sut.Handle(placed);
        }
        public given_no_order()
        {
            using (var context = new ConferenceContext()) {
                if (context.Database.Exists())
                {
                    context.Database.Delete();
                }

                context.Database.Create();
            }

            sut = new OrderEventHandler(() => new ConferenceContext());
        }
 public static void Configura(Funq.Container container)
 {
     var context = new SampleContext();
     var orderService = new OrderService
     {
         EventBus = new EventBus(),
         OrderRepository = new Repository<Order, SampleContext>(context),
         EventStoreRepository = new Repository<EventStore, SampleContext>(context),
         PayOrderRepository = new Repository<PayOrder, SampleContext>(context)
     };
     var orderCommandHandler = new OrderCommandHandler { OrderService = orderService };
     var orderEventHandler = new OrderEventHandler { OrderService = orderService };
     container.Register<IOrderService>(c => orderService);
     container.Register<ICommandHandler<BuildOrder>>(c => orderCommandHandler);
     container.Register<IEventHandler<BuildOrderReady>>(c => orderEventHandler);
     container.Register<IEventHandler<PaySuccessReady>>(c => orderEventHandler);
 }
示例#11
0
            public void Test()
            {
                OrderView orderView = new OrderView();
                var       handler   = new OrderEventHandler(orderView);

                handler.Handle(new OrderCreated(1.MakeGuid()));
                handler.Handle(new OrderLineAdded(1.MakeGuid(), new OrderLine(3, "MyProduct")));

                var view = new OrderView();

                view.GetAll().Single().ShouldBeEquivalentTo(new OrderDto()
                {
                    Id         = 1.MakeGuid(),
                    OrderLines = new []
                    {
                        new OrderLineDto()
                        {
                            Quantity    = 3,
                            ProductName = "MyProduct"
                        }
                    }
                });
            }
示例#12
0
        public virtual void OnDeliveryError(OrderEventArgs e)
        {
            OrderEventHandler handler = DeliveryError;

            Run(e, handler);
        }
示例#13
0
        public virtual void OnContactDetailsError(OrderEventArgs e)
        {
            OrderEventHandler handler = ContactDetailsError;

            Run(e, handler);
        }
示例#14
0
        public virtual void OnContactDetailsCreated(OrderEventArgs e)
        {
            OrderEventHandler handler = ContactDetailsCreated;

            Run(e, handler);
        }
示例#15
0
        public virtual void OnPaymentCreated(OrderEventArgs e)
        {
            OrderEventHandler handler = PaymentCreated;

            Run(e, handler);
        }
 public OrderEventHandlerTests()
 {
     _state   = new State();
     _handler = new OrderEventHandler(_state);
 }
        /// <exception cref="OverflowException">The dictionary already contains the maximum number of elements, <see cref="F:System.Int32.MaxValue" />.</exception>
        /// <exception cref="NotSupportedException">Condition. </exception>
        public void HandleRequest(Request request)
        {
            switch (request.RequestType)
            {
            case "NEWS":
                if (!String.IsNullOrEmpty(request.Parameters))
                {
                    var listenerNewsHeadlines = _streamingClient.BuildNewsHeadlinesListener(request.UserName, request.SessionToken, request.Parameters);
                    var newsEventHandler      = new NewsEventHandler(listenerNewsHeadlines);

                    if (!_subscriptions.TryAdd(request, newsEventHandler))
                    {
                        _logger.Error("Can't subscribe to NEWS datafeed");
                    }
                }

                _logger.Error("Can't subscribe to NEWS datafeed. News category wasn't provided");
                break;

            case "PRICES":
                var splitted = request.Parameters.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                if (splitted.Any())
                {
                    var listenerPrices    = _streamingClient.BuildPricesListener(request.UserName, request.SessionToken, splitted);
                    var priceEventHandler = new PriceEventHandler(listenerPrices);

                    if (!_subscriptions.TryAdd(request, priceEventHandler))
                    {
                        _logger.Error("Can't subscribe to PRICES datafeed");
                    }
                }

                _logger.Error("Can't subscribe to PRICES datafeed. Market ids weren't provided.");
                break;

            case "QUOTES":
                var listenerQuotes    = _streamingClient.BuildQuotesListener(request.UserName, request.SessionToken);
                var quoteEventHandler = new QuoteEventHandler(listenerQuotes);

                if (!_subscriptions.TryAdd(request, quoteEventHandler))
                {
                    _logger.Error("Can't subscribe to QUOTES datafeed");
                }
                break;

            case "CLIENTACCOUNTMARGIN":
                var listenerClientAccountMargin     = _streamingClient.BuildClientAccountMarginListener(request.UserName, request.SessionToken);
                var clientAccountMarginEventHandler = new ClientAccountMarginEventHandler(listenerClientAccountMargin);

                if (!_subscriptions.TryAdd(request, clientAccountMarginEventHandler))
                {
                    _logger.Error("Can't subscribe to CLIENTACCOUNTMARGIN datafeed");
                }
                break;

            case "ORDERS":
                var listenerOrders    = _streamingClient.BuildOrdersListener(request.UserName, request.SessionToken);
                var orderEventHandler = new OrderEventHandler(listenerOrders);

                if (!_subscriptions.TryAdd(request, orderEventHandler))
                {
                    _logger.Error("Can't subscribe to ORDERS datafeed");
                }
                break;

            case "DEFAULTPRICES":
                if (!String.IsNullOrEmpty(request.Parameters))
                {
                    int accountOperatorId;
                    Int32.TryParse(request.Parameters, out accountOperatorId);

                    if (accountOperatorId != 0)
                    {
                        var listenerDefaultPrices = _streamingClient.BuildDefaultPricesListener(request.UserName, request.SessionToken, accountOperatorId);
                        var priceEventHandler     = new PriceEventHandler(listenerDefaultPrices);

                        if (!_subscriptions.TryAdd(request, priceEventHandler))
                        {
                            _logger.Error("Can't subscribe to DEFAULTPRICES datafeed");
                        }
                    }
                    _logger.Error("Can't subscribe to DEFAULTPRICES datafeed. Can't parse account operator Id.");
                }
                else
                {
                    _logger.Error("Can't subscribe to DEFAULTPRICES datafeed. Account operator Id wasn't provided.");
                }
                break;

            case "TRADEMARGIN":
                var listenerTradeMargin     = _streamingClient.BuildTradeMarginListener(request.UserName, request.SessionToken);
                var tradeMarginEventHandler = new TradeMarginEventHandler(listenerTradeMargin);

                if (!_subscriptions.TryAdd(request, tradeMarginEventHandler))
                {
                    _logger.Error("Can't subscribe to TRADEMARGIN datafeed");
                }
                break;

            case "TRADINGACCOUNTMARGIN":
                var listenerTradingAccountMargin     = _streamingClient.BuildTradingAccountMarginListener(request.UserName, request.SessionToken);
                var tradingAccountMarginEventHandler = new TradingAccountMarginEventHandler(listenerTradingAccountMargin);

                if (!_subscriptions.TryAdd(request, tradingAccountMarginEventHandler))
                {
                    _logger.Error("Can't subscribe to TRADINGACCOUNTMARGIN datafeed");
                }
                break;

            default:
                throw new NotSupportedException();
            }
        }
示例#18
0
        public virtual void OnPaymentError(OrderEventArgs e)
        {
            OrderEventHandler handler = PaymentError;

            Run(e, handler);
        }
示例#19
0
        public virtual void OnDeliveryCreated(OrderEventArgs e)
        {
            OrderEventHandler handler = DeliveryCreated;

            Run(e, handler);
        }
示例#20
0
        public virtual void OnOrderSuccess(OrderEventArgs e)
        {
            OrderEventHandler handler = OrderSuccess;

            Run(e, handler);
        }
示例#21
0
        public virtual void OnOrderFailed(OrderEventArgs e)
        {
            OrderEventHandler handler = OrderFailed;

            Run(e, handler);
        }