public void DeserializeStockPriceResponse()
        {
            var serializer = new RestClientSerializer();

            var id   = Guid.NewGuid();
            var json = "{\"id\":\"" + id + "\","
                       + "\"asxCode\":\"ABC\","
                       + "\"name\":\"ABC Pty Ltd\","
                       + "\"closingPrices\":["
                       + "{\"date\":\"2000-01-02\",\"price\":12.00},"
                       + "{\"date\":\"2000-01-03\",\"price\":13.00}"
                       + "]}";

            var command = serializer.Deserialize <StockPriceResponse>(json);

            var expected = new StockPriceResponse()
            {
                Id      = id,
                AsxCode = "ABC",
                Name    = "ABC Pty Ltd"
            };

            expected.AddClosingPrice(new Date(2000, 01, 02), 12.00m);
            expected.AddClosingPrice(new Date(2000, 01, 03), 13.00m);

            command.Should().BeEquivalentTo(expected);
        }
        public static StockPriceResponse ToPriceResponse(this Stock stock, DateRange dateRange)
        {
            var stockProperties = stock.Properties.ClosestTo(dateRange.ToDate);

            var result = new StockPriceResponse()
            {
                Id      = stock.Id,
                AsxCode = stockProperties.AsxCode,
                Name    = stockProperties.Name
            };

            foreach (var price in stock.GetPrices(dateRange))
            {
                result.AddClosingPrice(price.Date, price.Price);
            }

            return(result);
        }
Exemplo n.º 3
0
    /// <summary>
    /// Request the share price for the supplied symbol from the yahoo API
    /// </summary>
    /// <param name="symbol">The symbol for which to search</param>
    /// <returns>An object that contains the market price, update time and currency</returns>
    private static StockPriceResponse RequestSharePrice(string symbol)
    {
        // Construct the URL
        var url = "https://query1.finance.yahoo.com/v8/finance/chart/" + symbol + "?interval=1d&range=1d";

        // Create the WebRequest object to send to the URL
        var req = WebRequest.Create(url);

        req.ContentType = "application/json; charset=utf-8";
        req.Method      = "GET";

        // Retrieve the response from the request, if null, return null
        var responseSteam = req.GetResponse().GetResponseStream();

        if (responseSteam == null)
        {
            return(null);
        }

        // Read the response stream and store a trimmed version
        var sr       = new StreamReader(responseSteam);
        var response = sr.ReadToEnd().Trim();

        // Access the relevant fields from the JSON response (the current market price, currency and updated time)
        var rootObject            = JObject.Parse(response);
        var metaObject            = rootObject["chart"]?["result"]?[0]?["meta"];
        var regularMarketPriceStr = metaObject?["regularMarketPrice"]?.ToString();
        var regularMarketTimeStr  = metaObject?["regularMarketTime"]?.ToString();
        var stockCurrency         = metaObject?["currency"]?.ToString();

        var regularMarketPrice = double.Parse(regularMarketPriceStr ?? string.Empty);
        var regularMarketTime  = DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64(regularMarketTimeStr)).DateTime;

        // Construct the response object and return
        var stockPriceResponse = new StockPriceResponse
        {
            StockPrice     = regularMarketPrice,
            StockCurrency  = stockCurrency,
            StockPriceTime = regularMarketTime,
        };

        return(stockPriceResponse);
    }
Exemplo n.º 4
0
        public async Task GetPrices()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var stock = new StockPriceResponse()
            {
                Id = Guid.NewGuid(), AsxCode = "ABC"
            };

            var messageHandler = mockRepository.Create <IRestClientMessageHandler>();

            messageHandler.Setup(x => x.GetAsync <StockPriceResponse>(It.Is <string>(x => x == "stocks/" + stock.Id + "/closingprices?fromdate=2000-01-02&todate=2010-05-06")))
            .Returns(Task <StockPriceResponse> .FromResult(stock))
            .Verifiable();

            var resource = new StockResource(messageHandler.Object);

            var result = await resource.GetPrices(stock.Id, new DateRange(new Date(2000, 01, 02), new Date(2010, 05, 06)));

            result.Should().BeEquivalentTo(stock);

            mockRepository.Verify();
        }