public void FailsGracefullyWhenNothingFound() { var args = new ReverseMilepostArgs(15, 15, new ReverseMilepostOptions()); var client = new HttpClient(); var url = "http://localhost:6080/arcgis/rest/services/Soe/SearchApi/MapServer/exts/Search/ReverseMilepost?{0}&f=json" .With(args.ToQueryString()); var response = client.GetAsync(url); var result = response.Result.Content.ReadAsStringAsync().Result; Assert.That(result, Is.Not.Null); Assert.That(result, Is.EqualTo("{\"TopResult\":null,\"EqualCandidates\":[]}")); }
public void SkipsRampsAndFindsHighway() { var args = new ReverseMilepostArgs(423834.42, 4508729.44, new ReverseMilepostOptions()); var client = new HttpClient(); var url = "http://localhost:6080/arcgis/rest/services/Soe/SearchApi/MapServer/exts/Search/ReverseMilepost?{0}&f=json" .With(args.ToQueryString()); var response = client.GetAsync(url); var result = response.Result.Content.ReadAsStringAsync().Result; Assert.That(result, Is.Not.Null); Assert.That(result, Is.StringStarting( "{\"TopResult\":{\"Milepost\":17.426200270235142,\"Route\":\"0201P\"").IgnoreCase); }
public void FindsMilepostOnFederalInterstate() { var args = new ReverseMilepostArgs(311770, 4510850, new ReverseMilepostOptions()); var client = new HttpClient(); var url = "http://localhost:6080/arcgis/rest/services/Soe/SearchApi/MapServer/exts/Search/ReverseMilepost?{0}&f=json" .With(args.ToQueryString()); var response = client.GetAsync(url); var result = response.Result.Content.ReadAsStringAsync().Result; Assert.That(result, Is.Not.Null); Assert.That(result, Is.StringStarting("{\"TopResult\":{\"Milepost\":42.848619712799547,\"Route\":\"0080N\""). IgnoreCase); }
public void ReprojectsPoints() { var args = new ReverseMilepostArgs(-111.90190785190332, 40.72597381846899, new ReverseMilepostOptions {WkId = 4326}); var client = new HttpClient(); var url = "http://localhost:6080/arcgis/rest/services/Soe/SearchApi/MapServer/exts/Search/ReverseMilepost?{0}&f=json" .With(args.ToQueryString()); var response = client.GetAsync(url); var result = response.Result.Content.ReadAsStringAsync().Result; Assert.That(result, Is.Not.Null); Assert.That(result, Is.StringStarting( "{\"TopResult\":{\"Milepost\":17.42619992647089,\"Route\":\"0201P\"").IgnoreCase); }
public async Task<HttpResponseMessage> ReverseMilePost(double? x, double? y, [FromUri] ReverseMilepostOptions options) { #region validation var errors = ""; if (!x.HasValue) { errors = "X is empty."; } if (!y.HasValue) { errors += "Y is emtpy"; } if (errors.Length > 0) { return Request.CreateResponse(HttpStatusCode.BadRequest, new ResultContainer<ReverseGeocodeResult> { Status = (int) HttpStatusCode.BadRequest, Message = errors }); } #endregion var queryArgs = new ReverseMilepostArgs(x.Value, y.Value, options); var client = new HttpClient(); var requestUri = ConfigurationManager.AppSettings["reverse_milepost_url"] .With(queryArgs.ToQueryString()); HttpResponseMessage request; try { request = await client.GetAsync(requestUri); } catch (AggregateException) { return Request.CreateResponse(HttpStatusCode.InternalServerError, new ResultContainer { Status = (int) HttpStatusCode.InternalServerError, Message = "I'm sorry, it seems as though the request had issues." }) .AddTypeHeader(typeof(ResultContainer<ReverseMilepostResult>)); } try { request.EnsureSuccessStatusCode(); } catch (Exception) { return Request.CreateResponse(HttpStatusCode.InternalServerError, new ResultContainer { Status = (int) HttpStatusCode.InternalServerError, Message = "I'm sorry, we were unable to communicate with the SOE." }) .AddTypeHeader(typeof(ResultContainer<ReverseMilepostResult>)); } var response = await request.Content.ReadAsAsync<TopAndEqualMilepostCandidates>(new[] { new TextPlainResponseFormatter() }); if (response.TopResult == null) { return Request.CreateResponse(HttpStatusCode.NotFound, new ResultContainer { Status = (int) HttpStatusCode.NotFound, Message = "No milepost was found within your buffer radius." }) .AddTypeHeader(typeof(ResultContainer<ReverseMilepostResult>)) .AddCache(); } var transformed = new ReverseMilepostResult { Route = response.TopResult.Route, OffsetMeters = response.TopResult.Distance, Milepost = response.TopResult.Milepost, Increasing = response.TopResult.Increasing }; return Request.CreateResponse(HttpStatusCode.OK, new ResultContainer<ReverseMilepostResult> { Status = (int) HttpStatusCode.OK, Result = transformed }) .AddTypeHeader(typeof(ResultContainer<ReverseMilepostResult>)) .AddCache(); }