public void When_YSQ_Can_Find_Quote_Then_Service_Returns_Quote() { // setup dynamic quote = new ExpandoObject(); quote.Symbol = "\"GOOG\""; quote.LatestTradePrice = "657.73"; _ysqMock.Setup(m => m.Quote(It.IsAny<string[]>())).Returns(_ysqfMock.Object); _ysqfMock.Setup(m => m.Return(It.IsAny<QuoteReturnParameter[]>())).Returns(new [] {quote}); // execute var service = new YahooStockService(_qsfMock.Object); var quotes = service.GetQuotes(new [] {new Security {Symbol = "GOOG"}}); // verify Assert.That(quotes.Count, Is.EqualTo(1)); var verify = quotes.Single(); Assert.That(verify.Key, Is.EqualTo("GOOG")); Assert.That(verify.Value, Is.EqualTo(657.73M)); }
private static ErrorCode DefaultOperation() { var dataDir = Path.GetFullPath(Environment.ExpandEnvironmentVariables(Configuration.DataDirectoryPath)); if (!Directory.Exists(dataDir)) { Console.Error.WriteLine("Data directory at {0} does not exist.", dataDir); return ErrorCode.DirectoryMissing; } var portfolioFile = Path.Combine(dataDir, "portfolio.js"); if (!File.Exists(portfolioFile)) { Console.Error.WriteLine("Portfolio file at {0} does not exist.", portfolioFile); return ErrorCode.FileMissing; } var portfolioFileContents = File.ReadAllText(portfolioFile, Encoding.UTF8); var portfolio = JsonConvert.DeserializeObject<Portfolio>(portfolioFileContents); var categoriesFile = Path.Combine(dataDir, "categories.js"); if (!File.Exists(categoriesFile)) { Console.Error.WriteLine("Categories file at {0} does not exist.", categoriesFile); return ErrorCode.FileMissing; } var categoryFileContents = File.ReadAllText(categoriesFile, Encoding.UTF8); var categories = JsonConvert.DeserializeObject<IEnumerable<Category>>(categoryFileContents); var quoter = new YahooStockService(new YahooServiceFactory()); var reporter = new StringValueReporter(quoter); var report = reporter.GetReport(portfolio); Console.Write(report); return ErrorCode.NoError; }
public void Test() { var portfolio = new Portfolio { Name = "Test Portfolio" }; using (var tokenManager = new QuestradeApiTokenManager(new Configuration())) { var api = new QuestradeService(tokenManager, new InMemorySecurityRepository(), new InMemoryCategoryRepository()); portfolio.Accounts = api.GetAccounts(); foreach (var account in portfolio.Accounts) { account.Positions = api.GetPositions(account); account.Transactions = api.GetTransactions(account, new DateTime(2008, 1, 1), DateTime.Now); } } var quoter = new YahooStockService(new YahooServiceFactory()); var reporter = new StringValueReporter(quoter); var report = reporter.GetReport(portfolio); Console.Out.Write(report); }
private static ErrorCode QuickFundbotWeightReportOperation(string portfolioName) { var dataDir = Path.GetFullPath(Environment.ExpandEnvironmentVariables(Configuration.DataDirectoryPath)); if (!Directory.Exists(dataDir)) { Console.Error.WriteLine("Data directory at {0} does not exist.", dataDir); return ErrorCode.DirectoryMissing; } var fundbotBuysFile = Path.Combine(dataDir, "buys.csv"); if (!File.Exists(fundbotBuysFile)) { Console.Error.WriteLine("Fundbot file at {0} does not exist.", fundbotBuysFile); return ErrorCode.FileMissing; } var fundbotCategoriesFile = Path.Combine(dataDir, "categories.csv"); if (!File.Exists(fundbotCategoriesFile)) { Console.Error.WriteLine("Fundbot file at {0} does not exist.", fundbotCategoriesFile); return ErrorCode.FileMissing; } var factory = new DataImporterFactory(); var transactionReader = factory.GetFundbotTransactions(fundbotBuysFile); var transactions = transactionReader.GetTransactions(); var account = new Account { Name = portfolioName }; var portfolio = new Portfolio { Name = portfolioName, Accounts = new List<Account> { account } }; account.Portfolio = portfolio; foreach (var transaction in transactions) { transaction.Account = account; } var portfolioService = new PortfolioService(portfolio); portfolioService.UpdateWith(transactions); var categoryReader = factory.GetFundbotCategories(fundbotCategoriesFile); IEnumerable<Category> categories; IEnumerable<CategoryWeight> weights; categoryReader.GetCategoriesAndWeights(out categories, out weights); var quoter = new YahooStockService(new YahooServiceFactory()); StringWeightReporter reporter = new StringWeightReporter(quoter); var report = reporter.GetReport(portfolio, categories, weights); Console.Write(report); return ErrorCode.NoError; }
private static ErrorCode QuestradeMonthReportOperation(string portfolioName) { var portfolio = new Portfolio { Name = portfolioName }; using (var tokenManager = new QuestradeApiTokenManager(Configuration)) { var api = new QuestradeService(tokenManager, new InMemorySecurityRepository(), new InMemoryCategoryRepository()); portfolio.Accounts = api.GetAccounts(); foreach (var account in portfolio.Accounts) { account.Positions = api.GetPositions(account); } var service = new YahooStockService(new YahooServiceFactory()); var reporter = new StringHistoricalReporter(service); var startDate = GetStartOfMarketWeek(DateTime.Now); var report = reporter.GetReport(portfolio, startDate.AddMonths(-1), startDate, Period.Weekly); Console.Write(report); } return ErrorCode.NoError; }
private static ErrorCode ImportFundbotOperation(string portfolioName) { var dataDir = Path.GetFullPath(Environment.ExpandEnvironmentVariables(Configuration.DataDirectoryPath)); if (!Directory.Exists(dataDir)) { Console.Error.WriteLine("Data directory at {0} does not exist.", dataDir); return ErrorCode.DirectoryMissing; } var fundbotBuysFile = Path.Combine(dataDir, "buys.csv"); if (!File.Exists(fundbotBuysFile)) { Console.Error.WriteLine("Fundbot file at {0} does not exist.", fundbotBuysFile); return ErrorCode.FileMissing; } var factory = new DataImporterFactory(); var fundBotImporter = factory.GetFundbotTransactions(fundbotBuysFile); var transactions = fundBotImporter.GetTransactions(); // which portfolio? account? var account = new Account { Name = portfolioName }; var portfolio = new Portfolio { Name = portfolioName, Accounts = new List<Account> { account } }; account.Portfolio = portfolio; foreach (var transaction in transactions) { transaction.Account = account; } var portfolioService = new PortfolioService(portfolio); portfolioService.UpdateWith(transactions); var quoter = new YahooStockService(new YahooServiceFactory()); var reporter = new StringValueReporter(quoter); var report = reporter.GetReport(portfolio); Console.Write(report); //foreach (var transaction in transactions) //{ // // need to see if security already exists // // need to see if transaction already exists // // key = symbol & date & shares //} return ErrorCode.NoError; }