public async Task <RoadStatusResponse> RoadStatus(RoadStatusRequest roadStatusRequest) { var endPointUrl = $"{roadStatusRequest.BaseUrl}Road/{roadStatusRequest.Id}"; using HttpClient client = new HttpClient(); var builder = new UriBuilder(endPointUrl); var query = HttpUtility.ParseQueryString(builder.Query); query["app_id"] = roadStatusRequest.AppId; query["app_key"] = roadStatusRequest.AppKey; builder.Query = query.ToString(); var requestUrl = builder.ToString(); client.BaseAddress = new Uri(requestUrl); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = client.GetAsync(requestUrl).Result; if (!response.IsSuccessStatusCode) { return(null); } var result = await response.Content.ReadAsStringAsync(); var roadStatusResponse = JsonConvert.DeserializeObject <List <RoadStatusResponse> >(result); return(roadStatusResponse.FirstOrDefault()); }
public async Task <RoadStatusResponseDto> RoadStatusService(string id) { if (string.IsNullOrEmpty(id)) { throw new Exception("No road Id was entered"); } var appId = _configuration.GetSection("TFL:AppId").Value; var appKey = _configuration.GetSection("TFL:AppKey").Value; var baseUrl = _configuration.GetSection("TFL:DataEndPoint").Value; var roadStatusRequest = new RoadStatusRequest { Id = id, AppId = appId, AppKey = appKey, BaseUrl = baseUrl }; try { var tflRequest = await _roadApi.RoadStatus(roadStatusRequest); var result = _autoMapper.Map <RoadStatusResponseDto>(tflRequest); return(result); } catch { return(null); } }
public void GivenAValidRoadIdReturnTrue() { var apiResponse = new RoadStatusResponse { Type = "Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities", Id = "A2", DisplayName = "A2", StatusSeverity = "Good", StatusSeverityDescription = "No Exceptional Delays", Bounds = "[[-0.0857,51.44091],[0.17118,51.49438]]", Envelope = "[[-0.0857,51.44091],[-0.0857,51.49438],[0.17118,51.49438],[0.17118,51.44091],[-0.0857,51.44091]]", Url = "/Road/a2" }; var apiRequest = new RoadStatusRequest { AppId = "AppId", AppKey = "AppKey", BaseUrl = "DataEndPoint", Id = "A2" }; var roadApi = new Mock <IRoadApi>(); var configuration = new Mock <IConfiguration>(); var mockConfAppId = new Mock <IConfigurationSection>(); var mockConfAppKey = new Mock <IConfigurationSection>(); var mockConfBaseUrl = new Mock <IConfigurationSection>(); mockConfAppId.Setup(a => a.Value).Returns("AppId"); mockConfAppKey.Setup(a => a.Value).Returns("AppKey"); mockConfBaseUrl.Setup(a => a.Value).Returns("DataEndPoint"); configuration.Setup(a => a.GetSection("TFL:AppId")).Returns(mockConfAppId.Object); configuration.Setup(a => a.GetSection("TFL:AppKey")).Returns(mockConfAppKey.Object); configuration.Setup(a => a.GetSection("TFL:DataEndPoint")).Returns(mockConfBaseUrl.Object); roadApi.Setup(x => x.RoadStatus(It.IsAny <RoadStatusRequest>())).ReturnsAsync(apiResponse); var sut = new RoadService(roadApi.Object, configuration.Object, CurrentMapper); var result = sut.RoadStatusService(apiRequest.Id).Result; Assert.Equal(apiResponse.DisplayName, result.DisplayName); Assert.Equal(apiResponse.StatusSeverity, result.StatusSeverity); Assert.Equal(apiResponse.StatusSeverityDescription, result.StatusSeverityDescription); }
public async Task <List <RoadResponseObject> > CheckRoadStatusAsync(Authentication auth, RoadStatusRequest roadrequest) { List <RoadResponseObject> responseObject = new List <RoadResponseObject>(); using (var client = new HttpClient()) { client.BaseAddress = new Uri(roadrequest.baseUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add(auth.id, auth.key); client.DefaultRequestHeaders.Add(auth.app_id, auth.app_key); HttpResponseMessage response = await client.GetAsync(String.Format(root, roadrequest.roadId)); if (!response.IsSuccessStatusCode) { return(responseObject); } var responseString = await response.Content.ReadAsStringAsync(); responseObject = await Task.Run(() => Newtonsoft.Json.JsonConvert.DeserializeObject <List <RoadResponseObject> >(responseString)); return(responseObject); } }