Пример #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 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);
        }
 public void TestSetup()
 {
     responseInterpreter = new ResponseInterpreter <TestResponseData>(TestResponseData.ConvertToCurrentRoadStatus);
 }