public async Task RoadData_WhenApiResponseIsSuccessful_ReturnData() { //Arrange _fakeMessageHandler = new Mock <HttpMessageHandler>(MockBehavior.Strict); _fakeMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonResponseSuccessful()), }) .Verifiable(); _httpClient = new HttpClient(_fakeMessageHandler.Object); _instance = new RoadData(_fakeApiConfig.Object, _httpClient); //Act var response = await _instance.GetRoadStatusData("A2"); //Assert Assert.IsNotNull(response); Assert.IsNotNull(response.RoadCorridorList); Assert.AreEqual(1, response.RoadCorridorList.Count); //test response data Assert.AreEqual("A2", response.RoadCorridorList[0].DisplayName); Assert.AreEqual("Good", response.RoadCorridorList[0].StatusSeverity); Assert.AreEqual("No Exceptional Delays", response.RoadCorridorList[0].StatusSeverityDescription); }
public void RoadData_WhenApiResponseIsInternalServerError_ThrowAnotherException() { //Arrange _fakeMessageHandler = new Mock <HttpMessageHandler>(MockBehavior.Strict); _fakeMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent("Error") }) .Verifiable(); _httpClient = new HttpClient(_fakeMessageHandler.Object); _instance = new RoadData(_fakeApiConfig.Object, _httpClient); //Act - Assert Assert.ThrowsAsync <Exception>(() => _instance.GetRoadStatusData("XYZ")); }
public async Task <RoadStatusList> GetRoadStatusData(string roadNames) { try { TfLRoadCorridors apiResponse = await _roadData.GetRoadStatusData(roadNames); var result = _mapping.MapRoadStatusData(apiResponse); return(result); } catch (TfLApiException ex) { RoadStatusException frontEndException = new RoadStatusException(ex.ExceptionDetails.Message); frontEndException.ExceptionDetails = ex.ExceptionDetails; throw frontEndException; } catch (Exception ex) { throw new Exception("Something went wrong. Please try again or contact the developer", ex); } }
public async Task RoadData_WhenApiResponseIsNotFound_ThrowException() { //Arrange _fakeMessageHandler = new Mock <HttpMessageHandler>(MockBehavior.Strict); _fakeMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.NotFound, Content = new StringContent(JsonResponseFailure()), }) .Verifiable(); _httpClient = new HttpClient(_fakeMessageHandler.Object); try { _instance = new RoadData(_fakeApiConfig.Object, _httpClient); //Act var response = await _instance.GetRoadStatusData("A233"); Assert.Fail("Failed Api Response did not throw an exception."); } catch (TfLApiException ex) { //Assert Assert.IsNotNull(ex); Assert.IsNotNull(ex.ExceptionDetails); Assert.AreEqual(404, ex.ExceptionDetails.HttpStatusCode); Assert.AreEqual("NotFound", ex.ExceptionDetails.HttpStatus); } catch (Exception) { Assert.Fail("Wrong exception returned."); } }