public async void Realtime_JsonGermanCulture()
        {
            using var cultureJsonService = new ClimaCellService(_apiKey, jsonSerializerService: new JsonGermanCultureFixture());
            var resp = await cultureJsonService.GetRealtime(_latitude, _longitude, ResponseFixture.RealtimeFields, new OptionalParamters { UnitSystem = "si" });

            Assert.True(resp.Response.IsSuccessStatus);
            Assert.Equal("C", resp.Temp.Units);
        }
        public async void Daily_JsonGermanCulture()
        {
            using var cultureJsonService = new ClimaCellService(_apiKey, jsonSerializerService: new JsonGermanCultureFixture());
            var resp = await cultureJsonService.GetDaily(_latitude, _longitude, ResponseFixture.DailyFields, new OptionalParamters { UnitSystem = "si" });

            Assert.True(resp.Response.IsSuccessStatus);
            Assert.NotEmpty(resp.DataPoints);
            Assert.Equal("C", resp.DataPoints[0].Temp.Min.Units);
        }
Пример #3
0
        public ResponseFixture()
        {
            var mockClient = new Mock <IHttpClient>();

            // Setup mockClient to take any string, and return MockRealtimeResponse
            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockRealtimeResponse));
            using (var climaRealtimeService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                // Remember, all this is doing is returning MockRealtimeResponse whose response content is populated by Realtime.Normal.json
                // so the passed fields do not matter at all
                NormalRealtimeResponse = climaRealtimeService.GetRealtime(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }

            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockNowcastResponse));
            using (var climaNowcastService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                NormalNowcastResponse = climaNowcastService.GetNowcast(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }

            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockHourlyResponse));
            using (var climaHourlyService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                NormalHourlyResponse = climaHourlyService.GetHourly(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }

            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockDailyResponse));
            using (var climaDailyService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                NormalDailyResponse = climaDailyService.GetDaily(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }

            // BadRequest / Unauthorized request
            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockBadRequestResponse));
            using (var climaDailyService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                BadRequestRealtimeResponse = climaDailyService.GetRealtime(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }

            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(MockInvalidAPIKeyRequest));
            using (var climaDailyService = new ClimaCellService("FakeKey", httpClient: mockClient.Object))
            {
                UnauthorizedRealtimeResponse = climaDailyService.GetRealtime(Latitude, Longitude, new List <string> {
                    "mockField"
                }).Result;
            }
        }
Пример #4
0
        public async void Nowcast_AllFieldsParsed()
        {
            var mockClient = new Mock <IHttpClient>();

            mockClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns(Task.FromResult(ResponseFixture.MockNowcastResponse));
            using (var service = new ClimaCellService("FakeKey", httpClient: mockClient.Object, jsonSerializerService: new JsonMissingMemberFixture()))
            {
                var resp = await service.GetNowcast(ResponseFixture.Latitude, ResponseFixture.Longitude, new List <string> {
                    "mockField"
                });

                Assert.True(resp.Response.IsSuccessStatus);
            }
        }
Пример #5
0
        public void BuildRequestUri_ShouldMatch()
        {
            const string baseUri = @"https://api.climacell.co/v3/weather/";

            var apiKey = "ABCD1234";
            var fields = new List <string> {
                "temp", "feels_like", "dewpoint"
            };

            var fieldString         = Uri.EscapeUriString(String.Join(",", fields));
            var expectedQueryString = new StringBuilder($"realtime?");

            expectedQueryString.Append($"lat={ResponseFixture.Latitude:N4}&lon={ResponseFixture.Longitude:N4}");
            expectedQueryString.Append($"&fields={fieldString}");
            expectedQueryString.Append($"&apikey={apiKey}");
            expectedQueryString.Append($"&start_time=2019-03-20T14:09:50");
            expectedQueryString.Append($"&timestep=10");
            expectedQueryString.Append($"&unit_system=us");

            var totalQuery = $"{baseUri}{expectedQueryString}";

            var queryCheckClient = new Mock <IHttpClient>();

            queryCheckClient.Setup(f => f.HttpRequestAsync(It.IsAny <string>())).Returns((string s) => Task.FromResult(new HttpResponseMessage
            {
                StatusCode   = HttpStatusCode.OK,
                ReasonPhrase = s
            }));

            using var serviceQueryCheck = new ClimaCellService(apiKey, new Uri(baseUri), queryCheckClient.Object);
            var parameters = new OptionalParamters
            {
                ForecastStartTime = DateTime.Parse("2019-03-20T14:09:50Z"),
                NowcastTimeStep   = 10,
                UnitSystem        = "us"
            };

            var result = serviceQueryCheck.GetRealtime(ResponseFixture.Latitude, ResponseFixture.Longitude, fields, parameters).Result;

            Assert.Equal(totalQuery, result.Response.ReasonPhrase);
            Assert.True(result.Response.IsSuccessStatus);
            Assert.False(string.IsNullOrWhiteSpace(result.Response.DataSource));
            Assert.False(string.IsNullOrWhiteSpace(result.Response.AttributionLine));
        }
Пример #6
0
 public async void Daily_AtleaseOneFieldIsRequired()
 {
     using var service = new ClimaCellService("ABCD1234");
     await Assert.ThrowsAsync <ArgumentException>(async() => await service.GetDaily(42, -71, new List <string>()));
 }
Пример #7
0
 public void Constructor_WithAPIKey()
 {
     using var service = new ClimaCellService("ABCD1234");
     Assert.NotNull(service);
 }
 public ClimaCellServiceIntegrationTests()
 {
     _apiKey = Environment.GetEnvironmentVariable(_apiEnvVar);
     Assert.False(string.IsNullOrWhiteSpace(_apiKey), $"You must set the environment variable {_apiEnvVar}");
     _service = new ClimaCellService(_apiKey, jsonSerializerService: new JsonMissingMemberFixture());
 }