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>()); }
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); }
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); }