コード例 #1
0
 public ClientOptionsTests()
 {
     _serialization  = Substitute.For <ISerialization>();
     _options        = new FluentHttpClientOptions();
     _testHttpClient = new HttpClientTester();
     _client         = new TestClient("Test", _testHttpClient.Client, _options);
 }
コード例 #2
0
        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);
        }
コード例 #4
0
        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");
        }
コード例 #5
0
        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");
        }
コード例 #6
0
        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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #10
0
        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();
        }
コード例 #12
0
        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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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();
        }
コード例 #20
0
        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");
        }
コード例 #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");
        }
コード例 #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();
        }
コード例 #24
0
        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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #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");
        }
コード例 #28
0
        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");
        }
コード例 #29
0
        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");
        }
コード例 #30
0
        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");
        }