예제 #1
0
        static async Task <int> runAsync(string roadName, IConfigurationSettings configuration)
        {
            httpClient.BaseAddress = configuration.BaseUri;
            var httpClientAdapter = new HttpClientAdapter(httpClient);

            // Construct the api Uri to pass
            var uri = $"/road/{roadName}?app_id={configuration.AppId}&app_key={configuration.AppKey}";

            IResponseInterpreter <RoadCorridor> responseInterpreter = new ResponseInterpreter <RoadCorridor>(r => new CurrentRoadStatus
            {
                DisplayName               = r.DisplayName,
                StatusSeverity            = r.StatusSeverity,
                StatusSeverityDescription = r.StatusSeverityDescription
            });

            // Construct the api requestor passing in the httpClient and the class that interprets the response
            var apiRequestor = new ApiRequestor <RoadCorridor>(httpClientAdapter, responseInterpreter);

            // Make the request and format the response into the CurrentRoadStatus entity
            var interpretedResponse = await apiRequestor.GetApiResult(uri);

            // Deconstruct the response tuple
            var responseCode      = interpretedResponse.Item1;
            var currentRoadStatus = interpretedResponse.Item2;

            // Write out the appropriate message
            FormattedOutputFactory formattedOutputFactory = new FormattedOutputFactory(Console.Out);
            var formattedOutput = formattedOutputFactory.GenerateFormattedOutput(responseCode);

            formattedOutput.WriteOutput(roadName, currentRoadStatus);

            // Return an integer result to return back to the console
            return((int)responseCode);
        }
예제 #2
0
        public async Task ApiRequestor_GetApiResult_EmptyStringUri_ArgumentException()
        {
            // arrange
            var httpClient   = new MockHttpClientAdapter(null);
            var apiRequestor = new ApiRequestor <TestResponseData>(httpClient, responseInterpreter);

            // act
            // assert
            await Assert.ThrowsExceptionAsync <ArgumentException>(async() => await apiRequestor.GetApiResult(String.Empty));
        }
예제 #3
0
        public async Task ApiRequestor_GetApiResult_OtherHttpResponse_FailedResult()
        {
            // arrange
            var httpClient   = new MockHttpClientAdapter(HttpRequestMessageHelper.CreateInvalidResponse());
            var apiRequestor = new ApiRequestor <TestResponseData>(httpClient, responseInterpreter);

            // act
            var result = await apiRequestor.GetApiResult(testUri);

            // assert
            Assert.AreEqual(result.Item1, ResponseEnum.Failed);
            Assert.IsNull(result.Item2);
        }
예제 #4
0
        public async Task IntegrationTest_ValidRequest()
        {
            const string roadName = "a2";
            const string apiPath  = "/road/a2";

            // arrange
            var response          = HttpRequestMessageHelper.CreateOKResponseWithContent();
            var httpClientAdapter = new MockHttpClientAdapter(response);

            IResponseInterpreter <RoadCorridor> responseInterpreter =
                new ResponseInterpreter <RoadCorridor>(r => new CurrentRoadStatus
            {
                DisplayName               = r.DisplayName,
                StatusSeverity            = r.StatusSeverity,
                StatusSeverityDescription = r.StatusSeverityDescription
            });
            IApiRequestor apiRequestor = new ApiRequestor <RoadCorridor>(httpClientAdapter, responseInterpreter);

            //act
            var interpretedResponse = await apiRequestor.GetApiResult(apiPath);

            // Deconstruct the tuple
            var responseCode      = interpretedResponse.Item1;
            var currentRoadStatus = interpretedResponse.Item2;

            var stringBuilder = new StringBuilder();

            using (var stringWriter = new StringWriter(stringBuilder))
            {
                FormattedOutputFactory formattedOutputFactory = new FormattedOutputFactory(stringWriter);
                var formattedOutput = formattedOutputFactory.GenerateFormattedOutput(responseCode);
                formattedOutput.WriteOutput(roadName, currentRoadStatus);
            }

            // assert
            StringReader stringReader = new StringReader(stringBuilder.ToString());
            var          line1        = stringReader.ReadLine();

            Assert.AreEqual(String.Format(SuccessFormattedOutput.SuccessMessageLine1, currentRoadStatus.DisplayName), line1);

            var line2 = stringReader.ReadLine();

            Assert.AreEqual(String.Format(SuccessFormattedOutput.SuccessMessageLine2, currentRoadStatus.StatusSeverity), line2);

            var line3 = stringReader.ReadLine();

            Assert.AreEqual(String.Format(SuccessFormattedOutput.SuccessMessageLine3, currentRoadStatus.StatusSeverityDescription), line3);
        }
예제 #5
0
        public async Task ApiRequestor_GetApiResult_OkHttpResponse_SuccessResult()
        {
            // arrange
            var currentRoadStatus = new Entities.CurrentRoadStatus {
                DisplayName = "A2", StatusSeverity = "Good", StatusSeverityDescription = "Good"
            };
            var responseInterpreter = new MockRequestInterpreter <TestResponseData>(currentRoadStatus);
            var httpClient          = new MockHttpClientAdapter(HttpRequestMessageHelper.CreateOKResponse());
            var apiRequestor        = new ApiRequestor <TestResponseData>(httpClient, responseInterpreter);

            // act
            var result = await apiRequestor.GetApiResult(testUri);

            // assert
            Assert.AreEqual(result.Item1, ResponseEnum.Success);
            Assert.AreEqual(currentRoadStatus.DisplayName, result.Item2.DisplayName);
            Assert.AreEqual(currentRoadStatus.StatusSeverity, result.Item2.StatusSeverity);
            Assert.AreEqual(currentRoadStatus.StatusSeverityDescription, result.Item2.StatusSeverityDescription);
        }