private PositionsViewModel GetVm( IMarketDataManager marketDataManager = null, IPositionManager positionManager = null, IContractManager contractManager = null, ITradeRecordingService tradeRecordingService = null) { var manager = marketDataManager ?? Substitute.For <IMarketDataManager>(); _accountManager = Substitute.For <IAccountManager>(); if (positionManager == null) { positionManager = Substitute.For <IPositionManager>(); positionManager.RequestOpenOrdersAsync().Returns(Task.FromResult(new List <OpenOrderEventArgs>())); } if (contractManager == null) { contractManager = Substitute.For <IContractManager>(); contractManager.RequestDetailsAsync(Arg.Any <Contract>()).Returns(Task.FromResult(new List <ContractDetails>())); } var queueProcessor = Substitute.For <IQueueProcessor>(); queueProcessor .When(x => x.Enqueue(Arg.Any <Action>())) .Do(x => { var action = x.Arg <Action>(); action.Invoke(); }); var dispatcherHelper = Substitute.For <IDispatcherHelper>(); dispatcherHelper .When(x => x.InvokeOnUiThread(Arg.Any <Action>())) .Do(x => { var action = x.Arg <Action>(); action.Invoke(); }); if (tradeRecordingService == null) { tradeRecordingService = Substitute.For <ITradeRecordingService>(); } return(new PositionsViewModel(dispatcherHelper, manager, _accountManager, positionManager, contractManager, queueProcessor, tradeRecordingService)); }
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); }