public async Task WhenFindingSymbolForOrderThatAlreadyExistsThenShowNotificationAsync()
        {
            // Arrange
            const string Symbol = "MSFT";

            var fired = false;

            Messenger.Default.Register <NotificationMessage <NotificationType> >(this, msg => fired = true);
            var findSymbolService = Substitute.For <IFindSymbolService>();
            var vm    = GetVm(findSymbolService);
            var model = new FindCommandResultsModel
            {
                Details = new List <ContractDetails>
                {
                    new ContractDetails {
                        LongName = "Microsoft"
                    }
                }
            };

            vm.OrdersListViewModel.AddOrder(new Symbol {
                Code = Symbol
            }, model);
            vm.Symbol.Code = Symbol;

            // Act
            await vm.FindCommand.ExecuteAsync();

            // Assert
            Assert.True(fired);
        }
        public async Task FindCommandTriesAgainToGetPriceIfFirstAttemptReturnsZero()
        {
            // Arrange
            const string Symbol      = "MSFT";
            const string CompanyName = "Microsoft";

            var findSymbolService = Substitute.For <IFindSymbolService>();
            var vm = GetVm(findSymbolService);

            vm.Symbol.Code = Symbol;
            var firstAttempt = true;
            var model        = new FindCommandResultsModel
            {
                Details = new List <ContractDetails>
                {
                    new ContractDetails {
                        LongName = CompanyName
                    }
                },
                PriceHistory = new List <HistoricalDataEventArgs>()
            };

            findSymbolService.IssueFindSymbolRequestAsync(Arg.Any <Contract>()).Returns(Task.FromResult(model));
            findSymbolService
            .When(x => x.IssueFindSymbolRequestAsync(Arg.Any <Contract>()))
            .Do(x =>
            {
                if (firstAttempt)
                {
                    firstAttempt      = false;
                    model.LatestPrice = 0;
                    return;
                }

                model.LatestPrice = 10;
            });

            // Act
            await vm.FindCommand.ExecuteAsync();

            // Assert
            var order = vm.OrdersListViewModel.Orders.First();

            Assert.Equal(Symbol, order.Symbol.Code);
            Assert.Equal(CompanyName, order.Symbol.Name);
            Assert.Equal(10, order.Symbol.LatestPrice);
            await findSymbolService.Received(2).IssueFindSymbolRequestAsync(Arg.Any <Contract>());
        }
Exemple #3
0
        public async Task <FindCommandResultsModel> IssueFindSymbolRequestAsync(Contract contract)
        {
            var model = new FindCommandResultsModel();

            var getLatestPriceTask = _marketDataManager.RequestLatestPriceAsync(contract);
            var getHistoryTask     = _historicalDataManager.GetHistoricalDataAsync(
                contract, DateTime.UtcNow, TwsDuration.OneMonth, TwsBarSizeSetting.OneDay, TwsHistoricalDataRequestType.Midpoint);
            var detailsTask = _contractManager.RequestDetailsAsync(contract);

            await Task.WhenAll(getLatestPriceTask, getHistoryTask, detailsTask).ConfigureAwait(false);

            model.LatestPrice  = await getLatestPriceTask;
            model.PriceHistory = await getHistoryTask;
            model.Details      = await detailsTask;

            return(model);
        }
        private static NewOrderViewModel GetStandardVm(
            IOrderCalculationService orderCalculationService,
            FindCommandResultsModel model,
            string symbol = "M",
            IOrderManager orderManager = null)
        {
            // Arrange
            var findSymbolService = Substitute.For <IFindSymbolService>();
            var builder           = new NewOrderViewModelBuilder()
                                    .WithFindSymbolService(findSymbolService)
                                    .WithOrderCalculationService(orderCalculationService)
                                    .WithOrderManager(orderManager);
            var vm = builder.Build();

            vm.Symbol.Code = symbol;
            findSymbolService.IssueFindSymbolRequestAsync(Arg.Any <Contract>()).Returns(Task.FromResult(model));

            return(vm);
        }
Exemple #5
0
        public void WhenSubsequentOrderAddedThenAddToTopOfList()
        {
            // Arrange
            var vm    = GetVm();
            var model = new FindCommandResultsModel
            {
                PriceHistory = new List <HistoricalDataEventArgs>()
            };

            vm.AddOrder(new Symbol {
                Code = "AMZN"
            }, model);

            // Act
            vm.AddOrder(new Symbol {
                Code = "MSFT"
            }, model);

            // Assert
            Assert.Equal("MSFT", vm.Orders.First().Symbol.Code);
        }
        private static async Task <NewOrderViewModel> FindCommandTestAsync(IOrderCalculationService orderCalculationService, FindCommandResultsModel model, string symbol = "M")
        {
            // Arrange


            //var findSymbolService = Substitute.For<IFindSymbolService>();
            //var builder = new NewOrderViewModelBuilder()
            //                .WithFindSymbolService(findSymbolService)
            //                .WithOrderCalculationService(orderCalculationService);
            //var vm = builder.Build();

            //vm.Symbol.Code = symbol;
            //findSymbolService.IssueFindSymbolRequestAsync(vm).Returns(Task.FromResult(model));

            var vm = GetStandardVm(orderCalculationService, model, symbol);

            // Act
            await vm.FindCommand.ExecuteAsync();

            return(vm);
        }