public async void GetAdxValuesAsync_Success_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json", "{\"meta\":{\"symbol\":\"AAPL\",\"interval\":\"1min\",\"currency\":\"USD\",\"exchange_timezone\":\"America/New_York\",\"exchange\":\"NASDAQ\",\"type\":\"Common Stock\",\"indicator\":{\"name\":\"ADX - Average Directional Index\",\"time_period\":14}},\"values\":[{\"datetime\":\"2021-03-01 15:59:00\",\"adx\":\"15.69773\"}],\"status\":\"ok\"}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetAdxValuesAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.Ok);
            response?.ResponseMessage.Should().Be("RESPONSE_OK");
            response?.Symbol.Should().Be("AAPL");
            response?.Interval.Should().Be("1min");
            response?.Currency.Should().Be("USD");
            response?.ExchangeTimezone.Should().Be("America/New_York");
            response?.Exchange.Should().Be("NASDAQ");
            response?.Type.Should().Be("Common Stock");
            response?.IndicatorName.Should().Be("ADX - Average Directional Index");
            response?.TimePeriod.Should().Be(14);
            response?.Values[0]?.AdxValue.Should().Be(15.69773);
            response?.Values[0]?.Datetime.Should().Be(new DateTime(2021, 3, 1, 15, 59, 0));
        }
        public async void GetBollingerBandsAsync_Success_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json", "{\"meta\":{\"symbol\":\"AAPL\",\"interval\":\"1min\",\"currency\":\"USD\",\"exchange_timezone\":\"America/New_York\",\"exchange\":\"NASDAQ\",\"type\":\"Common Stock\",\"indicator\":{\"name\":\"BBANDS - Bollinger Bands®\",\"series_type\":\"close\",\"time_period\":20,\"sd\":2,\"ma_type\":\"SMA\"}},\"values\":[{\"datetime\":\"2021-03-01 15:59:00\",\"upper_band\":\"127.80482\",\"middle_band\":\"127.55686\",\"lower_band\":\"127.30890\"}],\"status\":\"ok\"}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetBollingerBandsAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.Ok);
            response?.ResponseMessage.Should().Be("RESPONSE_OK");
            response?.Symbol?.Should().Be("AAPL");
            response?.Interval.Should().Be("1min");
            response?.Currency.Should().Be("USD");
            response?.ExchangeTimezone.Should().Be("America/New_York");
            response?.Exchange.Should().Be("NASDAQ");
            response?.Type.Should().Be("Common Stock");
            response?.MovingAverageType.Should().Be("SMA");
            response?.IndicatorName.Should().Be("BBANDS - Bollinger Bands®");
            response?.SeriesType.Should().Be("close");
            response?.TimePeriod.Should().Be(20);
            response?.StandardDeviation.Should().Be(2);
            response?.Values[0]?.Datetime.Should().Be(new DateTime(2021, 3, 1, 15, 59, 0));
            response?.Values[0]?.LowerBand.Should().Be(127.30890);
            response?.Values[0]?.MiddleBand.Should().Be(127.55686);
            response?.Values[0].UpperBand.Should().Be(127.80482);
        }
Exemple #3
0
        public async void GetTimeSeriesAsync_Success_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json", "{\"meta\":{\"symbol\":\"AAPL\",\"interval\":\"1min\",\"currency\":\"USD\",\"exchange_timezone\":\"America/New_York\",\"exchange\":\"NASDAQ\",\"type\":\"Common Stock\"},\"values\":[{\"datetime\":\"2021-03-01 15:59:00\",\"open\":\"127.63990\",\"high\":\"127.93000\",\"low\":\"127.63000\",\"close\":\"127.79000\",\"volume\":\"1691294\"}],\"status\":\"ok\"}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetTimeSeriesAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.Ok);
            response?.ResponseMessage.Should().Be("RESPONSE_OK");
            response?.Values[0]?.Datetime.Should().Be(new DateTime(2021, 3, 1, 15, 59, 0));
            response?.ExchangeTimezone.Should().Be("America/New_York");
            response?.Exchange.Should().Be("NASDAQ");
            response?.Type.Should().Be("Common Stock");
            response?.Values[0]?.Open.Should().Be(127.63990);
            response?.Values[0]?.High.Should().Be(127.93000);
            response?.Values[0]?.Low.Should().Be(127.63000);
            response?.Values[0]?.Close.Should().Be(127.79000);
            response?.Values[0]?.Volume.Should().Be(1691294);
        }
Exemple #4
0
        public FinanceService(IConfiguration configuration, HttpClient httpClient)
        {
            _configuration = configuration;

            _twelveDataApiKey = configuration.GetSection("FischBot:twelveDataApiKey").Value;
            _twelveDataClient = new TwelveDataClient(_twelveDataApiKey, httpClient);

            _httpClient = httpClient;
        }
        public async void GetQuote_NullHttpClient_Test()
        {
            // Arrange
            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", null);

            // Act
            var response = await twelveDataClient.GetQuoteAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.TwelveDataSharpError);
        }
        public async void GetQuote_BadApiKey_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json",
                     "{\"code\":401,\"message\":\"**apikey** parameter is incorrect or not specified. You can get your free API Key instantly following this link: https://twelvedata.com/apikey. If you believe that everything is correct, you can email us at [email protected]\",\"status\":\"error\"}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetRealTimePriceAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.TwelveDataApiError);
        }
        public async void GetQuote_InvalidSymbol_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json",
                     "{\"code\":400,\"message\":\"**symbol** not found: FAKE. Please specify it correctly according to API Documentation.\",\"status\":\"error\",\"meta\":{\"symbol\":\"FAKE\",\"interval\":\"\",\"exchange\":\"\"}}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetQuoteAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.TwelveDataApiError);
        }
        public async void GetRealTimePrice_Success_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json", "{\"price\":\"127.79000\"}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetRealTimePriceAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.Ok);
            response?.ResponseMessage.Should().Be("RESPONSE_OK");
            response?.Price.Should().Be(127.7900);
        }
        public async void GetQuote_Success_Test()
        {
            // Arrange
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("https://api.twelvedata.com/*")
            .Respond("application/json",
                     "{\"symbol\":\"AAPL\",\"name\":\"Apple Inc\",\"exchange\":\"NASDAQ\",\"currency\":\"USD\",\"datetime\":\"2021-03-01\",\"open\":\"123.75000\",\"high\":\"127.93000\",\"low\":\"122.79000\",\"close\":\"127.79000\",\"volume\":\"116307692\",\"previous_close\":\"121.26000\",\"change\":\"6.53000\",\"percent_change\":\"5.38512\",\"average_volume\":\"115516862\",\"fifty_two_week\":{\"low\":\"53.15250\",\"high\":\"145.08000\",\"low_change\":\"74.63750\",\"high_change\":\"-17.29000\",\"low_change_percent\":\"140.42143\",\"high_change_percent\":\"-11.91756\",\"range\":\"53.152500 - 145.080002\"}}");

            TwelveDataClient twelveDataClient = new TwelveDataClient("TEST", mockHttp.ToHttpClient());

            // Act
            var response = await twelveDataClient.GetQuoteAsync("TEST");

            // Assert
            response?.ResponseStatus.Should().Be(Enums.TwelveDataClientResponseStatus.Ok);
            response?.ResponseMessage.Should().Be("RESPONSE_OK");
            response?.Symbol.Should().Be("AAPL");
            response?.Open.Should().Be(123.75000);
            response?.Datetime.Should().Be(new DateTime(2021, 3, 1));
            response?.Exchange.Should().Be("NASDAQ");
            response?.Currency.Should().Be("USD");
            response?.Datetime.Should().Be(new DateTime(2021, 3, 1));
            response?.Open.Should().Be(123.75000);
            response?.High.Should().Be(127.93000);
            response?.Low.Should().Be(122.79000);
            response?.Close.Should().Be(127.79000);
            response?.PreviousClose.Should().Be(121.26000);
            response?.Change.Should().Be(6.53000);
            response?.Volume.Should().Be(116307692);
            response?.Change.Should().Be(6.53000);
            response?.PercentChange.Should().Be(5.38512);
            response?.AverageVolume.Should().Be(115516862);
            response?.FiftyTwoWeekHigh.Should().Be(145.08000);
            response?.FiftyTwoWeekLow.Should().Be(53.15250);
            response?.FiftyTwoWeekHighChange.Should().Be(-17.29000);
            response?.FiftyTwoWeekLowChange.Should().Be(74.63750);
            response?.FiftyTwoWeekHighChangePercent.Should().Be(-11.91756);
            response?.FiftyTwoWeekLowChangePercent.Should().Be(140.42143);
            response?.FiftyTwoWeekRange.Should().Be("53.152500 - 145.080002");
        }