diff --git a/.gitignore b/.gitignore index dc44ceb..8c3c50d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ MarketData/MarketData/*.log MarketData/MarketData/marketdata.log MarketData/MarketData/logs/marketdata_echo.log MarketData/MarketData/logs/marketdata_loadheadlineswatchlist.log +MarketDataUnitTests/bin/** +MarketDataUnitTests/obj/** Translate/Translate/bin/** Translate/Translate/obj/** eNavigator/eNavigatorUI/.vscode/chrome-debug/** diff --git a/.vscode/launch.json b/.vscode/launch.json index e22a232..cb80b83 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -39,6 +39,16 @@ "console": "internalConsole", "stopAtEntry": false }, - + { + "name": ".NET Core Launch (unit tests)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "/usr/local/bin/dotnet", + "args": ["test"], + "cwd": "${workspaceFolder}/MarketDataUnitTests", + "console": "internalConsole", + "stopAtEntry": false + } ] -} \ No newline at end of file +} diff --git a/MarketData.sln b/MarketData.sln index 1e1de7d..c538451 100755 --- a/MarketData.sln +++ b/MarketData.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarketDataServer", "MarketD EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPMonitor", "IPMonitor\IPMonitor.csproj", "{EAC3FB58-9112-4446-98BF-DC33F96357B5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarketDataUnitTests", "MarketDataUnitTests\MarketDataUnitTests.csproj", "{EAC3FB58-9112-4446-98BF-DC33F96357B5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/MarketDataUnitTests/MarketDataUnitTestClass.cs b/MarketDataUnitTests/MarketDataUnitTestClass.cs new file mode 100644 index 0000000..c2e40d0 --- /dev/null +++ b/MarketDataUnitTests/MarketDataUnitTestClass.cs @@ -0,0 +1,99 @@ +using System.Reflection; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.Extensions.Configuration; +using MarketData.DataAccess; +using MarketData.Generator.CMMomentum; +using MarketData.Helper; +using MarketData.MarketDataModel; +using MarketData.Utils; +using MarketData; +using MarketData.Configuration; +using System.Diagnostics; + + +namespace MarketDataUnitTests; + +[TestClass] +public class MarketDataUnitTestClass +{ + private IConfigurationBuilder builder = default; + private IConfiguration configuration = default; + + public MarketDataUnitTestClass() + { + builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); + IConfigurationRoot configurationRoot = builder.Build(); + configuration = configurationRoot; + GlobalConfig.Instance.Configuration = configuration; + CreateLogging("unittest"); + + } + + private static bool CreateLogging(String task) + { + if(String.IsNullOrEmpty(task))return false; + task=task.ToLower(); + MDTrace.LogLevel = LogLevel.DEBUG; + String logFolder = "/logs"; + DateTime currentDate=DateTime.Now; + String strLogFile = "marketdata_" + task + ".log"; + String currentWorkingDirectory = Directory.GetCurrentDirectory(); + Console.WriteLine($"Current directory is {currentWorkingDirectory}"); + Utility.EnsureLogFolder(currentWorkingDirectory+logFolder); + Utility.ExpireLogs(currentWorkingDirectory+logFolder,1); + Trace.Listeners.Remove("Default"); + Console.WriteLine($"Adding Trace Listener :{currentWorkingDirectory+logFolder+"/"+strLogFile}"); + Trace.Listeners.Add(new TextWriterTraceListener(currentWorkingDirectory+logFolder+"/"+strLogFile)); + MDTrace.WriteLine($"Trace Listener added."); + Utility.ShowLogs(currentWorkingDirectory + logFolder); + return true; + } + + + [TestMethod] + public void CNNPredictionTest() + { + String cnnHostName = "10.0.0.240"; + CMCandidate cmCandidate = new CMCandidate(); + CMParams cmParams = new CMParams(); + + cmParams.UseCNN = true; + cmParams.UseCNNHost = "http://" + cnnHostName + ":5000"; + cmParams.UseCNNDayCount = 270; + cmParams.UseCNNRewardPercentDecimal = 0.25; + + cmCandidate.Symbol = "MIDD"; + cmCandidate.TradeDate = DateTime.Parse("07-01-2024"); + + bool result = CMMomentumGenerator.PredictCandidate(cmCandidate, cmParams); + + Assert.IsTrue(result); + } + + [TestMethod] + public void ETFHoldingsYahooRetrieval() + { + String[] etfSymbols = { "JFNNX", "ACWX", "ACES", "BBH" }; + List results = new List(); + + foreach (String etfSymbol in etfSymbols) + { + ETFHoldings etfHoldings = MarketDataHelper.GetETFHoldings(etfSymbol); + if (null != etfHoldings && 0 != etfHoldings.Count) + { + results.Add(MarketDataHelper.GetETFHoldings(etfSymbol)); + } + try { Thread.Sleep(500); } catch (Exception) {; } + } + Assert.IsTrue(results.Any(x => x != null), String.Format("{0} items failed.", etfSymbols.Length)); + } + + [TestMethod] + public void LatestPriceRetrieval() + { + String symbol="AAPL"; + Price price=MarketDataHelper.GetLatestPrice(symbol); + Assert.IsTrue(null!=price && price.IsValid); + } + +} \ No newline at end of file diff --git a/MarketDataUnitTests/MarketDataUnitTests.csproj b/MarketDataUnitTests/MarketDataUnitTests.csproj new file mode 100644 index 0000000..951b1b3 --- /dev/null +++ b/MarketDataUnitTests/MarketDataUnitTests.csproj @@ -0,0 +1,37 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/MarketDataUnitTests/appsettings.json b/MarketDataUnitTests/appsettings.json new file mode 100755 index 0000000..2b6a7c1 --- /dev/null +++ b/MarketDataUnitTests/appsettings.json @@ -0,0 +1,17 @@ +{ +"market_data" : "Database=market_data;Datasource=adrastea;Username=guest;Password=guest", +"portfolio_data" : "Database=portfolio_data;Datasource=adrastea;Username=guest;Password=guest", +"user_data" : "Database=user_data;Datasource=adrastea;Username=guest;Password=guest", +"sms_smtpaddress" : "smtp.gmail.com", +"sms_smsusername" : "skessler1964@gmail.com", +"sms_smspassword" : "xjfo isnf gmyi zovr", +"sms_smsrecipients" : "skessler1964@gmail.com", +"proxy_address" : "http://euporie:8182", +"proxy_GetLatestPriceYahoo" : "false", +"proxy_GetLatestPriceBigCharts" : "false", +"proxy_GetETFHoldings" : "false", +"proxy_GetDailyPrices" : "false", +"proxy_GetFundamentalEx" : "false", +"proxy_GetDividendHistory" : "false", +"proxy_GetAnalystPriceTargetMarketBeat" : "false" +}