Example #1
0
        public async Task FindCanReturnResultsAndNoGeometry()
        {
            var gateway = new ArcGISGateway();

            var find = new Find(@"/Network/USA/MapServer".AsEndpoint())
            {
                SearchText       = "route",
                LayerIdsToSearch = new List <int> {
                    1, 2, 3
                },
                SearchFields = new List <string> {
                    "Name", "RouteName"
                },
                ReturnGeometry = false
            };
            var result = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Find(find));
            });

            Assert.NotNull(result);
            Assert.Null(result.Error);
            Assert.True(result.Results.Any());
            Assert.True(result.Results.All(i => i.Geometry == null));
        }
Example #2
0
        public async Task QueryObjectIdsAreHonored()
        {
            var gateway = new ArcGISGateway();

            var queryPoint = new Query(@"Earthquakes/EarthquakesFromLastSevenDays/MapServer/0")
            {
                ReturnGeometry = false
            };
            var resultPoint = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPoint));
            });

            Assert.True(resultPoint.Features.Any());
            Assert.True(resultPoint.Features.All(i => i.Geometry == null));

            var queryPointByOID = new Query(@"Earthquakes/EarthquakesFromLastSevenDays/MapServer/0".AsEndpoint())
            {
                ReturnGeometry = false,
                ObjectIds      = resultPoint.Features.Take(10).Select(f => long.Parse(f.Attributes[resultPoint.ObjectIdFieldName ?? "objectid"].ToString())).ToList()
            };
            var resultPointByOID = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPointByOID));
            });

            Assert.True(resultPointByOID.Features.Any());
            Assert.True(resultPointByOID.Features.All(i => i.Geometry == null));
            Assert.True(resultPoint.Features.Count() > 10);
            Assert.True(resultPointByOID.Features.Count() == 10);
            Assert.False(queryPointByOID.ObjectIds.Except(resultPointByOID.Features.Select(f => f.ObjectID)).Any());
        }
Example #3
0
        public async Task QueryOutFieldsAreHonored()
        {
            var gateway = new ArcGISGateway();

            var queryPolyline = new Query(@"Hydrography/Watershed173811/MapServer/1".AsEndpoint())
            {
                OutFields = new List <string> {
                    "lengthkm"
                }, ReturnGeometry = false
            };
            var resultPolyline = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Polyline>(queryPolyline));
            });

            Assert.True(resultPolyline.Features.Any());
            Assert.True(resultPolyline.Features.All(i => i.Geometry == null));
            Assert.True(resultPolyline.Features.All(i => i.Attributes != null && i.Attributes.Count == 1));

            var queryPolygon = new Query(@"/Hydrography/Watershed173811/MapServer/0")
            {
                Where     = "areasqkm = 0.012",
                OutFields = new List <string> {
                    "areasqkm", "elevation", "resolution", "reachcode"
                }
            };
            var resultPolygon = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Polygon>(queryPolygon));
            });

            Assert.True(resultPolygon.Features.Any());
            Assert.True(resultPolygon.Features.All(i => i.Geometry != null));
            Assert.True(resultPolygon.Features.All(i => i.Attributes != null && i.Attributes.Count == 4));
        }
Example #4
0
        public async Task QueryCanReturnNoGeometry()
        {
            var gateway = new ArcGISGateway();

            var queryPoint = new Query(@"Earthquakes/EarthquakesFromLastSevenDays/MapServer/0".AsEndpoint())
            {
                ReturnGeometry = false
            };
            var resultPoint = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPoint));
            });

            Assert.True(resultPoint.Features.Any());
            Assert.True(resultPoint.Features.All(i => i.Geometry == null));

            var queryPolyline = new Query(@"Hydrography/Watershed173811/MapServer/1")
            {
                OutFields = new List <string> {
                    "lengthkm"
                }, ReturnGeometry = false
            };
            var resultPolyline = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.QueryAsPost <Polyline>(queryPolyline));
            });

            Assert.True(resultPolyline.Features.Any());
            Assert.True(resultPolyline.Features.All(i => i.Geometry == null));
        }
Example #5
0
        public async Task GatewayDoesAutoPost()
        {
            var gateway = new ArcGISGateway()
            {
                IncludeHypermediaWithResponse = true
            };

            var longWhere = new StringBuilder("region = '");

            for (var i = 0; i < 3000; i++)
            {
                longWhere.Append(i);
            }

            var query = new Query(@"/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0")
            {
                Where = longWhere + "'"
            };

            var result = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(query));
            });

            Assert.NotNull(result);
            Assert.Null(result.Error);
            Assert.NotNull(result.SpatialReference);
            Assert.False(result.Features.Any());
            Assert.NotNull(result.Links);
            Assert.Equal("POST", result.Links.First().Method);
        }
Example #6
0
        public async Task QueryCanReturnDifferentGeometryTypes()
        {
            var gateway = new ArcGISGateway();

            var queryPoint = new Query(@"Earthquakes/EarthquakesFromLastSevenDays/MapServer/0".AsEndpoint())
            {
                Where = "magnitude > 2.5"
            };
            var resultPoint = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.QueryAsPost <Point>(queryPoint));
            });

            Assert.True(resultPoint.Features.Any());
            Assert.True(resultPoint.Features.All(i => i.Geometry != null));

            var queryPolyline = new Query(@"Hydrography/Watershed173811/MapServer/1".AsEndpoint())
            {
                OutFields = new List <string> {
                    "lengthkm"
                }
            };
            var resultPolyline = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Polyline>(queryPolyline));
            });

            Assert.True(resultPolyline.Features.Any());
            Assert.True(resultPolyline.Features.All(i => i.Geometry != null));

            gateway = new ArcGISGateway();

            var queryPolygon = new Query(@"/Hydrography/Watershed173811/MapServer/0")
            {
                Where = "areasqkm = 0.012", OutFields = new List <string> {
                    "areasqkm"
                }
            };
            var resultPolygon = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.QueryAsPost <Polygon>(queryPolygon));
            });

            Assert.True(resultPolygon.Features.Any());
            Assert.True(resultPolygon.Features.All(i => i.Geometry != null));
        }
Example #7
0
        public async Task QueryCanUseWhereClause()
        {
            var gateway = new ArcGISGateway();

            var queryPoint = new Query(@"Earthquakes/Since_1970/MapServer/0".AsEndpoint())
            {
                ReturnGeometry = false,
                Where          = "UPPER(Name) LIKE UPPER('New Zea%')"
            };

            queryPoint.OutFields.Add("Name");
            var resultPoint = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPoint));
            });

            Assert.True(resultPoint.Features.Any());
            Assert.True(resultPoint.Features.All(i => i.Geometry == null));
            Assert.True(resultPoint.Features.All(i => i.Attributes["Name"].ToString().StartsWith("New Zea", StringComparison.OrdinalIgnoreCase)));
        }
Example #8
0
        public async Task GatewayDoesAutoPostForMaximumGetRequestLength()
        {
            var gateway = new ArcGISGateway()
            {
                IncludeHypermediaWithResponse = true, MaximumGetRequestLength = 1
            };

            var query = new Query(@"/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0".AsEndpoint());

            var result = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(query));
            });

            Assert.NotNull(result);
            Assert.Null(result.Error);
            Assert.NotNull(result.SpatialReference);
            Assert.True(result.Features.Any());
            Assert.NotNull(result.Links);
            Assert.Equal("POST", result.Links.First().Method);
        }
Example #9
0
        public async Task CanAddUpdateAndDelete()
        {
            var gateway = new ArcGISGateway();

            var feature = new Feature <Point>();

            feature.Attributes.Add("type", 0);
            feature.Geometry = new Point {
                SpatialReference = new SpatialReference {
                    Wkid = SpatialReference.WebMercator.Wkid
                }, X = -13073617.8735768, Y = 4071422.42978062
            };

            var adds = new ApplyEdits <Point>(@"Fire/Sheep/FeatureServer/0".AsEndpoint())
            {
                Adds = new List <Feature <Point> > {
                    feature
                }
            };
            var resultAdd = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.ApplyEdits(adds));
            });

            Assert.True(resultAdd.Adds.Any());
            Assert.True(resultAdd.Adds.First().Success);
            Assert.Equal(resultAdd.ExpectedAdds, resultAdd.ActualAdds);
            Assert.Equal(resultAdd.ActualAdds, resultAdd.ActualAddsThatSucceeded);

            var id = resultAdd.Adds.First().ObjectId;

            feature.Attributes.Add("description", "'something'"); // problem with serialization means we need single quotes around string values
            feature.Attributes.Add("objectId", id);

            var updates = new ApplyEdits <Point>(@"Fire/Sheep/FeatureServer/0")
            {
                Updates = new List <Feature <Point> > {
                    feature
                }
            };
            var resultUpdate = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.ApplyEdits(updates));
            });

            Assert.True(resultUpdate.Updates.Any());
            Assert.True(resultUpdate.Updates.First().Success);
            Assert.Equal(resultUpdate.ExpectedUpdates, resultUpdate.ActualUpdates);
            Assert.Equal(resultUpdate.ActualUpdates, resultUpdate.ActualUpdatesThatSucceeded);
            Assert.Equal(resultUpdate.Updates.First().ObjectId, id);

            var deletes = new ApplyEdits <Point>(@"Fire/Sheep/FeatureServer/0".AsEndpoint())
            {
                Deletes = new List <long> {
                    id
                }
            };
            var resultDelete = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.ApplyEdits(deletes));
            });

            Assert.True(resultDelete.Deletes.Any());
            Assert.True(resultDelete.Deletes.First().Success);
            Assert.Equal(resultDelete.ExpectedDeletes, resultDelete.ActualDeletes);
            Assert.Equal(resultDelete.ActualDeletes, resultDelete.ActualDeletesThatSucceeded);
            Assert.Equal(resultDelete.Deletes.First().ObjectId, id);
        }
Example #10
0
        /// <summary>
        /// Performs unfiltered query, then filters by Extent and Polygon to SE quadrant of globe and verifies both filtered
        /// results contain same number of features as each other, and that both filtered resultsets contain fewer features than unfiltered resultset.
        /// </summary>
        /// <param name="serviceUrl"></param>
        /// <returns></returns>
        async Task QueryGeometryCriteriaHonored(string serviceUrl)
        {
            int countAllResults     = 0;
            int countExtentResults  = 0;
            int countPolygonResults = 0;

            var gateway = new ArcGISGateway();

            var queryPointAllResults = new Query(serviceUrl.AsEndpoint());

            var resultPointAllResults = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPointAllResults));
            });

            var queryPointExtentResults = new Query(serviceUrl.AsEndpoint())
            {
                Geometry = new Extent {
                    XMin = 0, YMin = 0, XMax = 180, YMax = -90, SpatialReference = SpatialReference.WGS84
                },                                                                                                               // SE quarter of globe
                OutputSpatialReference = SpatialReference.WebMercator
            };

            var resultPointExtentResults = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPointExtentResults));
            });

            var rings = new Point[]
            {
                new Point {
                    X = 0, Y = 0
                },
                new Point {
                    X = 180, Y = 0
                },
                new Point {
                    X = 180, Y = -90
                },
                new Point {
                    X = 0, Y = -90
                },
                new Point {
                    X = 0, Y = 0
                }
            }.ToPointCollectionList();

            var queryPointPolygonResults = new Query(serviceUrl)
            {
                Geometry = new Polygon {
                    Rings = rings
                }
            };
            var resultPointPolygonResults = await IntegrationTestFixture.TestPolicy.ExecuteAsync(() =>
            {
                return(gateway.Query <Point>(queryPointPolygonResults));
            });

            countAllResults     = resultPointAllResults.Features.Count();
            countExtentResults  = resultPointExtentResults.Features.Count();
            countPolygonResults = resultPointPolygonResults.Features.Count();

            Assert.Equal(resultPointExtentResults.SpatialReference.Wkid, queryPointExtentResults.OutputSpatialReference.Wkid);
            Assert.True(countAllResults > countExtentResults);
            Assert.True(countPolygonResults == countExtentResults);
        }