public void When_deserializing_all_sample_files(ApiFunction function) { //Arrange var methodInfos = ImplementationProgressTests.GetAllMethods.Value; var methodForThisFunction = methodInfos.Single(x => x.Name == function.ToString() || x.Name == ImplementationProgressTests.EnumNamePascalCase(function)); var returnTypeTask = methodForThisFunction.ReturnType; var returnType = returnTypeTask.GenericTypeArguments[0]; var client = new GenericApiClient(); var id = 0; for (; id < 5; id++) { var sampleFileContent = ReadFile(function, id); if (sampleFileContent == null) { break; } //Act var result = client.DeserializeWithSettings(sampleFileContent, returnType); //Assert // count all the non-default property values, if deserialization failed, the values should be defaults //TODO could also say number of default values should be BELOW a maximum (make sure one part of the model didn't stop working) var nonDefaultProperties = CountProperties(result, false); Console.WriteLine("Non-default property count: " + nonDefaultProperties); var allPropertiesCount = CountProperties(result, true); Console.WriteLine("Property count: " + allPropertiesCount); nonDefaultProperties.Should().BeGreaterOrEqualTo(GetMinimumExpectedProperties(function)); if (function == ApiFunction.STOCHRSI || function == ApiFunction.STOCHF || function == ApiFunction.AROON || function == ApiFunction.DIGITAL_CURRENCY_DAILY) { // Very lenient case nonDefaultProperties.Should().BeGreaterOrEqualTo((int)(allPropertiesCount * 0.5), "seems like an excessive number of default property values, even for these functions"); } else if (!function.ToString().Contains("ADJUSTED")) { // Default case nonDefaultProperties.Should().BeGreaterOrEqualTo(allPropertiesCount - 20, "seems like an excessive number of default property values"); } else { // Lenient case nonDefaultProperties.Should().BeGreaterOrEqualTo((int)(allPropertiesCount * 0.7), "even though adjusted, seems like an excessive number of default property values"); } } if (id == 0) { Assert.Warn("NO TEST DATA WAS FOUND"); } }
public static string EnumNamePascalCase(ApiFunction function) { var textInfo = CultureInfo.InvariantCulture.TextInfo; var enumNameTitleCase = textInfo.ToTitleCase(function.ToString().ToLowerInvariant()).Replace("_", ""); return(enumNameTitleCase); }
public void All_enum_values_should_be_implemented(ApiFunction function) { //Arrange var enumNameTitleCase = EnumNamePascalCase(function); //Act & Assert GetAllMethods.Value.Any(x => x.Name == function.ToString() || x.Name == enumNameTitleCase).Should().BeTrue(); }
private TechIndicatorDataPoint ComposeDataPoint(Dictionary <string, string> dataPointContent) { var isAdjusted = dataPointContent.Count > 6; var dataPoint = new TechIndicatorDataPoint(); dataPoint.Time = DateTime.Parse(dataPointContent[TimeStampKey]); dataPoint.Value = Decimal.Parse(dataPointContent[_function.ToString()], CultureInfo.InvariantCulture); return(dataPoint); }
private HttpRequestMessage ComposeHttpRequest(string apiKey, ApiFunction function, IDictionary <string, string> query) { var fullQueryDict = new Dictionary <string, string>(query); fullQueryDict.Add(ApiConstants.ApiKeyQueryVar, apiKey); fullQueryDict.Add(ApiConstants.FunctionQueryVar, function.ToString()); var urlWithQueryString = QueryHelpers.AddQueryString(ApiConstants.AlfaVantageUrl, fullQueryDict); var urlWithQuery = new Uri(urlWithQueryString); var request = new HttpRequestMessage { RequestUri = urlWithQuery, Method = HttpMethod.Get }; return(request); }