示例#1
0
        public async Task HydrateJsonWithBoundary_HappyPath_Custom(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();
            var geofence     = new Geofence {
                GeofenceUID = boundaryUid, Name = Name, GeometryWKT = GeometryWKT, GeofenceType = GeofenceType.Filter
            };

            geofenceRepo.Setup(g => g.GetGeofence(It.IsAny <string>())).ReturnsAsync(geofence);
            //var geofenceProxy = new Mock<IGeofenceProxy>();
            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                Name       = "a filter",
                FilterType = filterType,
                FilterJson = "{\"designUid\": \"id\", \"vibeStateOn\": true, \"polygonUid\": \"" + geofence.GeofenceUID +
                             "\"}"
            });

            var result = await ValidationUtil
                         .HydrateJsonWithBoundary(/*geofenceProxy.Object,*/ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false);

            var expectedResult =
                "{\"designUid\":\"id\",\"vibeStateOn\":true,\"polygonUid\":\"" + geofence.GeofenceUID +
                "\",\"polygonName\":\"" + geofence.Name +
                "\",\"polygonLL\":[{\"Lat\":12.677856,\"Lon\":80.257874},{\"Lat\":13.039345,\"Lon\":79.856873},{\"Lat\":13.443052,\"Lon\":80.375977}]," +
                "\"polygonType\":" + (int)geofence.GeofenceType + "}";

            Assert.Equal(expectedResult, result);
        }
示例#2
0
        /// <summary>
        /// Processes the PutFilter Request
        /// </summary>
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var request = CastRequestObjectTo <FilterRequestFull>(item, 38);
            FilterDescriptorSingleResult result;

            // Hydrate the polygon filter if present.
            request.FilterJson = await ValidationUtil.HydrateJsonWithBoundary(/* GeofenceProxy,*/ auxRepository as GeofenceRepository, log, serviceExceptionHandler, request);

            // Perform any required combination of filters of the request to create a new filter lists a set of filter UIDs and combination roles
            request.FilterJson = await CombineFilters(request);

            if (request.FilterType == FilterType.Transient)
            {
                result = await ProcessTransient(request);
            }
            else
            {
                // Hydrate the alignment and design filenames if present (persistent filters only).
                FilterFilenameUtil.GetFilterFileNames(log, serviceExceptionHandler, fileImportProxy, request);
                result = await ProcessPersistent(request);
            }

            await FilterJsonHelper.ParseFilterJson(request.ProjectData, result.FilterDescriptor, Productivity3dV2ProxyCompaction, request.CustomHeaders);

            return(result);
        }
示例#3
0
        public async Task HydrateJsonWithBoundary_InvalidBoundary2(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();
            var geofence     = new Geofence
            {
                GeofenceType = GeofenceType.Filter,
                GeometryWKT  =
                    "POLYGON((-115.0200886019198 36.20745605916501,-115.02005976817289 36.20734622441246,-115.01992699882665 36.2073559634608,-115.0198176988093 36.207342978062755,-115.01973320922532 36.20734027277125,-115.01974729082266 36.20738950906242,-115.01975466689743 36.2074300884,-115.01996052643932 36.20746201079744))"
            };

            // var geofence = new Geofence { GeometryWKT = "POLYGON((-115.02022874734084 36.20751287018342,-115.02025556943099 36.207300775504265,-115.02001953503766 36.20729428280093,-115.01966816565673 36.20726506562927,-115.01945493004004 36.20714170411769,-115.0192846097676 36.20734189594616,-115.01962927362601 36.20748581732266,-115.02022874734084 36.20751287018342))" };
            geofenceRepo.Setup(g => g.GetGeofence(It.IsAny <string>())).ReturnsAsync(geofence);
            //var geofenceProxy = new Mock<IGeofenceProxy>();
            //var geofenceData = new GeofenceData { GeofenceType = GeofenceType.Generic.ToString(), GeometryWKT = geofence.GeometryWKT };
            //geofenceProxy.Setup(g => g.GetGeofenceForCustomer(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<HeaderDictionary>())).ReturnsAsync(geofenceData);

            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                Name       = "a filter",
                FilterType = filterType,
                FilterJson = "{\"designUID\": \"id\", \"vibeStateOn\": true, \"polygonUID\": \"" + boundaryUid + "\"}"
            });

            var ex = await Assert.ThrowsAsync <ServiceException>(async() => await ValidationUtil
                                                                 .HydrateJsonWithBoundary(/*geofenceProxy.Object,*/ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false));

            Assert.Contains("2045", ex.GetContent);
            Assert.Contains("Invalid spatial filter boundary. One or more polygon components are missing.", ex.GetContent);
        }
示例#4
0
        public async Task HydrateJsonWithBoundary_InvalidBoundary(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();
            var geofence     = new Geofence {
                GeometryWKT = "This is not a valid polygon WKT", GeofenceType = GeofenceType.Filter
            };

            geofenceRepo.Setup(g => g.GetGeofence(It.IsAny <string>())).ReturnsAsync(geofence);
            //var geofenceProxy = new Mock<IGeofenceProxy>();
            var geofenceData = new GeofenceData {
                GeometryWKT = geofence.GeometryWKT, GeofenceType = GeofenceType.Generic.ToString()
            };
            //geofenceProxy.Setup(g => g.GetGeofenceForCustomer(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<HeaderDictionary>())).ReturnsAsync(geofenceData);

            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                Name       = "a filter",
                FilterType = filterType,
                FilterJson = "{\"designUID\": \"id\", \"vibeStateOn\": true, \"polygonUID\": \"" + boundaryUid + "\"}"
            });

            var ex = await Assert.ThrowsAsync <ServiceException>(async() => await ValidationUtil
                                                                 .HydrateJsonWithBoundary(/*geofenceProxy.Object,*/ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false));

            Assert.Contains("2045", ex.GetContent);
            Assert.Contains("Invalid spatial filter boundary. One or more polygon components are missing.", ex.GetContent);
        }
示例#5
0
        public async Task HydrateJsonWithBoundary_NoGeofence(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();

            geofenceRepo.Setup(g => g.GetGeofence(It.IsAny <string>())).ReturnsAsync((Geofence)null);
            //var geofenceProxy = new Mock<IGeofenceProxy>();
            //geofenceProxy.Setup(g => g.GetGeofenceForCustomer(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<HeaderDictionary>())).ReturnsAsync(
            //  (GeofenceData)null);

            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                Name       = "a filter",
                FilterType = filterType,
                FilterJson = "{\"designUID\": \"id\", \"vibeStateOn\": true, \"polygonUID\": \"" + boundaryUid + "\"}"
            });

            var ex = await Assert.ThrowsAsync <ServiceException>(async() => await ValidationUtil
                                                                 .HydrateJsonWithBoundary(/*geofenceProxy.Object,*/ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false));

            Assert.Contains("2040", ex.GetContent);
            Assert.Contains("Validation of Project/Boundary failed. Not allowed.", ex.GetContent);
        }
示例#6
0
        public async Task HydrateJsonWithBoundary_IncludeAlignment(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();
            //var geofenceProxy = new Mock<IGeofenceProxy>();
            var alignmentUid = Guid.NewGuid().ToString();
            var startStation = 100.456;
            var endStation   = 200.5;
            var leftOffset   = 4.5;
            var rightOffset  = 2.5;

            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                Name       = "a filter",
                FilterType = filterType,
                FilterJson = "{\"designUID\": \"id\", \"vibeStateOn\": true, \"alignmentUid\": \"" + alignmentUid +
                             "\", \"startStation\":" + startStation + ", \"endStation\":" + endStation + ", \"leftOffset\":" +
                             leftOffset + ", \"rightOffset\":" + rightOffset + "}"
            });

            var result = await ValidationUtil
                         .HydrateJsonWithBoundary(/*geofenceProxy.Object,*/ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false);

            Assert.Equal(request.FilterJson, result);
        }
示例#7
0
        public async Task HydrateJsonWithBoundary_NoPolygonUid(FilterType filterType)
        {
            var log          = serviceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <ValidationTests>();
            var geofenceRepo = new Mock <IGeofenceRepository>();
            //var geofenceProxy = new Mock<IGeofenceProxy>();

            var request = FilterRequestFull.Create(null, custUid, false, userUid, new ProjectData {
                ProjectUID = projectUid
            },
                                                   new FilterRequest
            {
                FilterUid  = filterUid,
                FilterType = filterType,
                FilterJson = "{\"designUID\": \"id\", \"vibeStateOn\": true}",
                Name       = "a filter"
            });

            var result = await ValidationUtil
                         .HydrateJsonWithBoundary(/*geofenceProxy.Object, */ geofenceRepo.Object, log, serviceExceptionHandler, request).ConfigureAwait(false);

            Assert.Equal(request.FilterJson, result);
        }