コード例 #1
0
        public async void GetNonTradingDays(int year, int expectedCount)
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            HttpRequestMessage requestMessage = null;
            var fileName       = String.Format("asx-trading-calendar-{0}.htm", year);
            var messageHandler = mockRepository.CreateFileContentMessageHandler(fileName, "text/html", x => requestMessage = x);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetNonTradingDays(year, CancellationToken.None);

            requestMessage.Method.Should().Be(HttpMethod.Get);
            requestMessage.RequestUri.AbsoluteUri.Should().Be("http://www.asx.com.au/about/" + fileName);
            result.Should().HaveCount(expectedCount);

            var newYearsDay = new Date(year, 01, 01);

            while (!newYearsDay.WeekDay())
            {
                newYearsDay = newYearsDay.AddDays(1);
            }

            result.First().Should().BeEquivalentTo(new NonTradingDay(newYearsDay, "New Year's Day"));
        }
コード例 #2
0
        public async void GetSinglePriceHttpError()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var messageHandler = mockRepository.CreateHttpStatusMessageHandler(HttpStatusCode.NotFound);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetSinglePrice("IBM", CancellationToken.None);

            result.Should().BeNull();
        }
コード例 #3
0
        public async void GetHistoricalPriceDataHttpError()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var messageHandler = mockRepository.CreateHttpStatusMessageHandler(HttpStatusCode.NotFound);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetHistoricalPriceData("IBM", new DateRange(new Date(2020, 05, 14), new Date(2020, 05, 15)), CancellationToken.None);

            result.Should().BeEmpty();
        }
コード例 #4
0
        public async void GetSinglePriceInvalidJson()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var json = "xxxxx";

            var messageHandler = mockRepository.CreateJsonMessageHandler(json);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetSinglePrice("IBM", CancellationToken.None);

            result.Should().BeNull();
        }
コード例 #5
0
        public async void GetHistoricalPriceDataInvalidJson()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var json = "xxxxx";

            var messageHandler = mockRepository.CreateJsonMessageHandler(json);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetHistoricalPriceData("IBM", new DateRange(new Date(2020, 05, 14), new Date(2020, 05, 15)), CancellationToken.None);

            result.Should().BeEmpty();
        }
コード例 #6
0
        public async void GetSinglePrice()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var json = "{\"code\":\"BHP\",\"isin_code\":\"AU000000BHP4\",\"desc_full\":\"Ordinary Fully Paid\",\"last_price\":34.72,\"open_price\":34.38,\"day_high_price\":34.88,\"day_low_price\":34.25,\"change_price\":-0.33,\"change_in_percent\":\" - 0.942 % \",\"volume\":6214544,\"bid_price\":34.72,\"offer_price\":34.74,\"previous_close_price\":35.05,\"previous_day_percentage_change\":\"5.891 % \",\"year_high_price\":42.33,\"last_trade_date\":\"2020-05-20T00:00:00+1000\",\"year_high_date\":\"2019-07-03T00:00:00+1000\",\"year_low_price\":24.05,\"year_low_date\":\"2020-03-13T00:00:00+1100\",\"year_open_price\":39.1,\"year_open_date\":\"2014-02-25T11:00:00+1100\",\"year_change_price\":-4.38,\"year_change_in_percentage\":\"-11.202 % \",\"pe\":13.2,\"eps\":2.6547,\"average_daily_volume\":11644628,\"annual_dividend_yield\":6.08,\"market_cap\":103252091430,\"number_of_shares\":2945851396,\"deprecated_market_cap\":102279960000,\"deprecated_number_of_shares\":2945851394,\"suspended\":false}";

            HttpRequestMessage requestMessage = null;
            var messageHandler = mockRepository.CreateJsonMessageHandler(json, x => requestMessage = x);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetSinglePrice("BHP", CancellationToken.None);

            requestMessage.Method.Should().Be(HttpMethod.Get);
            requestMessage.RequestUri.AbsoluteUri.Should().Be("https://www.asx.com.au/asx/1/share/BHP");
            result.Should().BeEquivalentTo(new StockPrice("BHP", new Date(2020, 05, 20), 34.72m));
        }
コード例 #7
0
        public async void GetNonTradingDaysUnexpectedResponse()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var json = "{ \"Meta Data2\": " +
                       "   { \"1. Information\": \"Daily Prices (open, high, low, close) and Volumes\"," +
                       "     \"2. Symbol\": \"IBM\"," +
                       "     \"3. Last Refreshed\": \"2020-05-15\"," +
                       "     \"4. Output Size\": \"Compact\"," +
                       "     \"5. Time Zone\": \"US/Eastern\"" +
                       "   }" +
                       "}";

            var messageHandler = mockRepository.CreateJsonMessageHandler(json);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetNonTradingDays(2020, CancellationToken.None);

            result.Should().BeEmpty();
        }
コード例 #8
0
        public async void GetHistoricalPriceData()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var json = "{\"data\": ["
                       + "   {\"code\":\"BHP\",\"close_date\":\"2020-05-20T00:00:00+1000\",\"close_price\":34.05,\"change_price\":1.95,\"volume\":11664353,\"day_high_price\":35.11,\"day_low_price\":34.32,\"change_in_percent\":\"5.891 % \"},"
                       + "   {\"code\":\"BHP\",\"close_date\":\"2020-05-19T00:00:00+1000\",\"close_price\":35.05,\"change_price\":1.95,\"volume\":11664353,\"day_high_price\":35.11,\"day_low_price\":34.32,\"change_in_percent\":\"5.891 % \"},"
                       + "   {\"code\":\"BHP\",\"close_date\":\"2020-05-18T00:00:00+1000\",\"close_price\":33.1,\"change_price\":1.43,\"volume\":7894590,\"day_high_price\":33.2,\"day_low_price\":32.37,\"change_in_percent\":\"4.515 % \"}]}";

            HttpRequestMessage requestMessage = null;
            var messageHandler = mockRepository.CreateJsonMessageHandler(json, x => requestMessage = x);

            var httpClient  = new HttpClient(messageHandler.Object);
            var dataService = new AsxDataService(httpClient);

            var result = await dataService.GetHistoricalPriceData("BHP", new DateRange(new Date(2020, 05, 18), new Date(2020, 05, 19)), CancellationToken.None);

            requestMessage.Method.Should().Be(HttpMethod.Get);
            var days = (Date.Today - new Date(2020, 05, 18)).TotalDays;

            requestMessage.RequestUri.AbsoluteUri.Should().StartWith("https://www.asx.com.au/asx/1/share/BHP/prices?interval=daily&count=" + days.ToString());
            result.Should().BeEquivalentTo(new StockPrice[] { new StockPrice("BHP", new Date(2020, 05, 19), 35.05m), new StockPrice("BHP", new Date(2020, 05, 18), 33.10m) });
        }