public ClientOptionsTests()
 {
     _serialization  = Substitute.For <ISerialization>();
     _options        = new FluentHttpClientOptions();
     _testHttpClient = new HttpClientTester();
     _client         = new TestClient("Test", _testHttpClient.Client, _options);
 }
        public async Task Head()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseStatusCode(System.Net.HttpStatusCode.OK);

            await new FluentHttpClient("Test", httpClientTester.Client)
            .Head("url")
            .ExecuteAsync();

            httpClientTester.RequestMessage.Method.Should().Be(HttpMethod.Head);
        }
        public async Task WithListener_WhenListenerAutoCreated_ShouldUseListener()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(new Person("James"));

            var response = await new FluentHttpClient("Test", httpClientTester.Client)
                           .Get("url")
                           .WithListener <MessageListener>()
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(200);
        }
        public async Task Execute_WhenSuccessNoResult_ShouldReturnErrorResponse()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseStatusCode(System.Net.HttpStatusCode.Created);

            var response = await new FluentHttpClient("Test", httpClientTester.Client)
                           .Put("url")
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(201);
            response?.Result?.Name.Should().Be("Sandra");
            response?.IsSuccessStatusCode.Should().BeTrue();
            response?.ReasonPhrase.Should().Be("Created");
        }
        public async Task Execute_WhenErrorNoResult_ShouldReturnErrorResponse()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseStatusCode(System.Net.HttpStatusCode.Unauthorized);

            var response = await new FluentHttpClient("Test", httpClientTester.Client)
                           .Put("url")
                           .Configure(x => x.EnsureSuccessStatusCode = false)
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(401);
            response?.Result.Should().BeNull();
            response?.IsSuccessStatusCode.Should().BeFalse();
            response?.ReasonPhrase.Should().Be("Unauthorized");
        }
        public async Task GetCompanyNews()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadAlternativeData("news"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var news = await client.AlternativeData.GetCompanyNews("AAPL");

            news.Should().HaveCount(3);
            news[0].Category.Should().Be("technology");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/news/AAPL?token=APIKey");
        }
Exemple #7
0
        public async Task CompanyByCusip()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("company"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var company = await client.Stock.GetCompanyByCusip("037833100");

            company.Should().NotBeNull();
            company.Address.Should().Be("One Apple Park Way");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/profile?token=APIKey&cusip=037833100");
        }
Exemple #8
0
        public async Task Compensation()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("compensation"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var compensation = await client.Stock.GetCompensation("AAPL");

            compensation.Should().NotBeNull();
            compensation.Total.Should().Be(103211163);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/ceo-compensation?token=APIKey&symbol=AAPL");
        }
Exemple #9
0
        public async Task PriceTarget()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("priceTarget"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var priceTarget = await client.Stock.GetPriceTarget("AAPL");

            priceTarget.Should().NotBeNull();
            priceTarget.TargetMedian.Should().Be(417.5);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/price-target?token=APIKey&symbol=AAPL");
        }
        public async Task SupportResistance()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadTechnicalAnalysis("supportResistance"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var supportResistance = await client.TechnicalAnalysis.GetSupportResistance("AAPL", Model.Resolution.Day);

            supportResistance.Should().NotBeNull();
            supportResistance.Levels.Count.Should().Be(6);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1//scan/support-resistance?token=APIKey&symbol=AAPL&resolution=D");
        }
        public async Task WithListener_WhenListener_ShouldUseListener()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(new Person("James"));

            var listener = new MessageListener();
            var client   = new FluentHttpClient("Test", httpClientTester.Client, listener);
            var response = await client
                           .Get("url")
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(200);
            listener.RequestMessage.Should().NotBeNull();
            listener.ResponseMessage.Should().NotBeNull();
        }
        public async Task Exchanges()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadForex("exchanges"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var exchanges = await client.Forex.GetExchanges();

            exchanges.Should().NotBeNull();
            exchanges.Should().HaveCount(5);
            exchanges[0].Should().Be("oanda");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/forex/exchange?token=APIKey");
        }
Exemple #13
0
        public async Task RecommendationTrends()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("recommendationTrends"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var recommendationTrends = await client.Stock.GetRecommendationTrends("AAPL");

            recommendationTrends.Should().NotBeNull();
            recommendationTrends.Should().HaveCount(4);
            recommendationTrends[0].StrongBuy.Should().Be(11);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/recommendation?token=APIKey&symbol=AAPL");
        }
Exemple #14
0
        public async Task Peers()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("peers"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var peers = await client.Stock.GetPeers("NFLX");

            peers.Should().NotBeNull();
            peers.Should().HaveCount(10);
            peers[0].Should().Be("AAPL");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/peers?token=APIKey&symbol=NFLX");
        }
Exemple #15
0
        public async Task Earnings()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("earnings"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var earnings = await client.Stock.GetEarnings("AAPL");

            earnings.Should().NotBeNull();
            earnings.Should().HaveCount(4);
            earnings[0].Actual.Should().Be(2.46m);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/earnings?token=APIKey&symbol=AAPL");
        }
Exemple #16
0
        public async Task Exchanges()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadCrypto("exchanges"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var exchanges = await client.Crypto.GetExchanges();

            exchanges.Should().NotBeNull();
            exchanges.Should().HaveCount(12);
            exchanges[11].Should().Be("HUOBI");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/crypto/exchange?token=APIKey");
        }
Exemple #17
0
        public async Task Exchanges()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("exchanges"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var exchanges = await client.Stock.GetExchanges();

            exchanges.Should().NotBeNull();
            exchanges.Should().HaveCount(3);
            exchanges[0].Code.Should().Be("US");
            exchanges[0].Name.Should().Be("US exchanges");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/exchange?token=APIKey");
        }
Exemple #18
0
        public async Task Symbols()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("symbols"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var symbols = await client.Stock.GetSymbols("US");

            symbols.Should().NotBeNull();
            symbols.Should().HaveCount(3);
            symbols[2].Description.Should().Be("PERTH MINT PHYSICAL GOLD ETF");
            symbols[2].DisplaySymbol.Should().Be("AAAU");
            symbols[2].CandleSymbol.Should().Be("AAAU");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/symbol?token=APIKey&exchange=US");
        }
        public async Task WithListener_WhenOnFunc_ShouldCallFunc()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(new Person("James"));

            HttpRequestMessage  requestMessage  = null;
            HttpResponseMessage responseMessage = null;

            var response = await new FluentHttpClient("Test", httpClientTester.Client)
                           .Get("url")
                           .OnRequest(r => { requestMessage = r; return(Task.CompletedTask); })
                           .OnResponse(r => { responseMessage = r; return(Task.CompletedTask); })
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(200);
            requestMessage.Should().NotBeNull();
            responseMessage.Should().NotBeNull();
        }
        public async Task Symbols()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadForex("symbols"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var symbols = await client.Forex.GetSymbols("ic markets");

            symbols.Should().NotBeNull();
            symbols.Should().HaveCount(3);
            symbols[0].Description.Should().Be("IC MARKETS Euro vs US Dollar EURUSD");
            symbols[0].DisplaySymbol.Should().Be("EUR/USD");
            symbols[0].CandleSymbol.Should().Be("IC MARKETS:1");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/forex/symbol?token=APIKey&exchange=ic+markets");
        }
Exemple #21
0
        public async Task Symbols()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadCrypto("symbols"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var symbols = await client.Crypto.GetSymbols("binance");

            symbols.Should().NotBeNull();
            symbols.Should().HaveCount(3);
            symbols[2].Description.Should().Be("Binance BNBBTC");
            symbols[2].DisplaySymbol.Should().Be("BNB/BTC");
            symbols[2].CandleSymbol.Should().Be("BINANCE:BNBBTC");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/crypto/symbol?token=APIKey&exchange=binance");
        }
Exemple #22
0
        public async Task Quote()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("quote"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var quote = await client.Stock.GetQuote("AAPL");

            quote.Should().NotBeNull();
            quote.Current.Should().Be(261.74m);
            quote.High.Should().Be(263.31m);
            quote.Low.Should().Be(260.68m);
            quote.Open.Should().Be(261.07m);
            quote.PreviousClose.Should().Be(259.45m);

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/quote?token=APIKey&symbol=AAPL");
        }
        public async Task WithListener_WhenOnAction_ShouldCallAction()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(new Person("James"));

            HttpRequestMessage  requestMessage  = null;
            HttpResponseMessage responseMessage = null;

            var client = new FluentHttpClientBuilder("Test", httpClientTester.Client)
                         .OnRequest(r => requestMessage   = r)
                         .OnResponse(r => responseMessage = r)
                         .Build();
            var response = await client.Get("url")
                           .ExecuteAsync <Person>();

            response?.StatusCode.Should().Be(200);
            requestMessage.Should().NotBeNull();
            responseMessage.Should().NotBeNull();
        }
        public async Task Candles_WithCount()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadForex("candles"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var candles = await client.Forex.GetCandles("OANDA:EUR_USD", Resolution.Day, 4);

            candles.Should().NotBeNull();
            candles.Should().HaveCount(4);
            candles[0].High.Should().Be(1.1074m);
            candles[0].Low.Should().Be(1.09897m);
            candles[0].Open.Should().Be(1.0996m);
            candles[0].Close.Should().Be(1.10713m);
            candles[0].Volume.Should().Be(75789);
            candles[0].Timestamp.Should().Be(DateTime.Parse("2019-09-16 21:00:00"));

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/forex/candle?token=APIKey&symbol=OANDA%3AEUR_USD&resolution=D&count=4");
        }
Exemple #25
0
        public async Task Candles_WithCount()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadCrypto("candles"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var candles = await client.Crypto.GetCandles("BINANCE:BTCUSDT", Resolution.Month, 4);

            candles.Should().NotBeNull();
            candles.Should().HaveCount(4);
            candles[0].High.Should().Be(1.1074m);
            candles[0].Low.Should().Be(1.09897m);
            candles[0].Open.Should().Be(1.0996m);
            candles[0].Close.Should().Be(1.10713m);
            candles[0].Volume.Should().Be(75789);
            candles[0].Timestamp.Should().Be(DateTime.Parse("2019-09-16 21:00:00"));

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/crypto/candle?token=APIKey&symbol=BINANCE%3ABTCUSDT&resolution=M&count=4");
        }
Exemple #26
0
        public async Task Candles_WithRange()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("candles"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var candles = await client.Stock.GetCandles("AAPL", Resolution.FiveMinutes, new DateTimeOffset(2019, 12, 1, 0, 0, 0, TimeSpan.Zero).UtcDateTime, new DateTimeOffset(2019, 12, 2, 0, 0, 0, TimeSpan.Zero).UtcDateTime);

            candles.Should().NotBeNull();
            candles.Should().HaveCount(3);
            candles[2].High.Should().Be(220.94m);
            candles[2].Low.Should().Be(218.83m);
            candles[2].Open.Should().Be(220m);
            candles[2].Close.Should().Be(219.89m);
            candles[2].Volume.Should().Be(20730608);
            candles[2].Timestamp.Should().Be(DateTime.Parse("2019-09-26 04:00:00"));

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/candle?token=APIKey&symbol=AAPL&resolution=5&from=1575158400&to=1575244800");
        }
Exemple #27
0
        public async Task Candles_WithCount()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadStock("candles"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var candles = await client.Stock.GetCandles("AAPL", Resolution.FiveMinutes, 3);

            candles.Should().NotBeNull();
            candles.Should().HaveCount(3);
            candles[0].High.Should().Be(222.49m);
            candles[0].Low.Should().Be(217.19m);
            candles[0].Open.Should().Be(221.03m);
            candles[0].Close.Should().Be(217.68m);
            candles[0].Volume.Should().Be(33463820);
            candles[0].Timestamp.Should().Be(DateTime.Parse("2019-09-24 04:00:00"));

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/stock/candle?token=APIKey&symbol=AAPL&resolution=5&count=3");
        }
        public async Task Candles_WithRange()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadForex("candles"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var candles = await client.Forex.GetCandles("OANDA:EUR_USD", Resolution.Day, DateTime.Parse("2019/12/1"), DateTime.Parse("2019/12/2"));

            candles.Should().NotBeNull();
            candles.Should().HaveCount(4);
            candles[3].High.Should().Be(1.10595m);
            candles[3].Low.Should().Be(1.10101m);
            candles[3].Open.Should().Be(1.10398m);
            candles[3].Close.Should().Be(1.10182m);
            candles[3].Volume.Should().Be(5138);
            candles[3].Timestamp.Should().Be(DateTime.Parse("2019-09-19 21:00:00"));

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/forex/candle?token=APIKey&symbol=OANDA%3AEUR_USD&resolution=D&from=1575158400&to=1575244800");
        }
        public async Task GetNews_WhenCategory()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadAlternativeData("news"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var news = await client.AlternativeData.GetNews(NewsCategory.Forex);

            news.Should().HaveCount(3);
            news[0].Category.Should().Be("technology");
            news[0].Datetime.Should().Be(DateTime.Parse("2019-08-29 04:48:35"));
            news[0].Headline.Should().Be("Facebook acknowledges flaw in Messenger Kids app");
            news[0].Id.Should().Be(25040);
            news[0].Image.Should().Be("https://s3.reutersmedia.net/resources/r/?m=02\u0026d=20190829\u0026t=2\u0026i=1423882334\u0026w=1200\u0026r=LYNXNPEF7S07O");
            news[0].Source.Should().Be("Reuters");
            news[0].Summary.Should().Be("Facebook Inc  acknowledged a flaw in its Messenger Kids app, weeks after two U.S. senators raised privacy concerns about the application, and said that it spoke to the U.S. Federal Trade Commission about the matter.");
            news[0].Url.Should().Be("https://www.reuters.com/article/us-facebook-privacy/facebook-acknowledges-flaw-in-messenger-kids-app-idUSKCN1VJ08X");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/news?token=APIKey&category=forex");
        }
        public async Task GetNews_WhenCategoryAndMinId()
        {
            var httpClientTester = new HttpClientTester()
                                   .SetResponseContent(DataLoader.LoadAlternativeData("news"));

            var client = new FinnhubClient(httpClientTester.Client, "APIKey");

            var news = await client.AlternativeData.GetNews(NewsCategory.Merger, 1212);

            news.Should().HaveCount(3);
            news[2].Category.Should().Be("company news");
            news[2].Datetime.Should().Be(DateTime.Parse("2019-08-29 04:42:15"));
            news[2].Headline.Should().Be("GLOBAL MARKETS-Bonds reign supreme, equities struggle on recession, Brexit fears");
            news[2].Id.Should().Be(24876);
            news[2].Image.Should().Be("https://s4.reutersmedia.net/resources_v2/images/rcom-default.png");
            news[2].Source.Should().Be("Reuters");
            news[2].Summary.Should().Be("* Yields on U.S. 30-year bonds, 10-year German bunds at\nrecord low");
            news[2].Url.Should().Be("https://www.reuters.com/article/global-markets/global-markets-bonds-reign-supreme-equities-struggle-on-recession-brexit-fears-idUSL3N25P0YC");

            httpClientTester.RequestMessage.RequestUri
            .AbsoluteUri.Should().Be("https://finnhub.io/api/v1/news?token=APIKey&category=merger&minId=1212");
        }