コード例 #1
0
        public void Should_return_project_extents_for_project_extents(DateRangeType dateRangeType, bool useNullDate)
        {
            var startUtc = useNullDate ? (DateTime?)null : new DateTime(2017, 11, 5);
            var endUtc   = useNullDate ? (DateTime?)null : new DateTime(2017, 11, 6);

            //Json deserialize interprets date as mm/dd/yyyy so format date that way
            var startUtcStr      = startUtc?.ToString("MM/dd/yyyy");
            var endUtcStr        = endUtc?.ToString("MM/dd/yyyy");
            var filterDescriptor = new FilterDescriptor
            {
                FilterJson =
                    $"{{\"dateRangeType\":\"{dateRangeType}\",\"asAtDate\":\"false\",\"startUTC\":\"{startUtcStr}\",\"endUTC\":\"{endUtcStr}\",\"elevationType\":null}}"
            };

            FilterJsonHelper.ParseFilterJson(
                new ProjectData {
                IanaTimeZone = "America/Los_Angeles", ProjectUID = _projectGuid.ToString()
            }, filterDescriptor,
                productivity3dV2ProxyCompaction: _mockedProductivity3dV2ProxyCompaction.Object, customHeaders: new HeaderDictionary());

            Abstractions.Models.Filter filterObj =
                JsonConvert.DeserializeObject <Abstractions.Models.Filter>(filterDescriptor.FilterJson);
            Assert.Equal(MockedStartTime, filterObj.StartUtc);
            Assert.Equal(_mockedEndTime, filterObj.EndUtc);
        }
コード例 #2
0
        /// <summary>
        /// Combines the set of filters per the request into a single combined filter according to the roloe of each filter and
        /// the buisness rules relevant to how it contributes to the combined filter.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="filters"></param>
        /// <returns></returns>
        private static Abstractions.Models.Filter CombineFilters(FilterRequest request, List <MasterData.Repositories.DBModels.Filter> filters)
        {
            Abstractions.Models.Filter combinedFilter = null;

            var masterFilter = ExtractFilterFromRequest(request, filters, FilterCombinationRole.MasterFilter);

            if (masterFilter == null)
            {
                return(null);
            }

            // Is there a widget filter?
            var widgetFilter = ExtractFilterFromRequest(request, filters, FilterCombinationRole.WidgetFilter);

            if (widgetFilter != null)
            {
                // Combine the widget filter into the combined filter
                combinedFilter = CombineWidgetFilterIntoMasterFilter(masterFilter, widgetFilter);
            }

            // Is there a volumes filter?
            var volumesFilter = ExtractFilterFromRequest(request, filters, FilterCombinationRole.VolumesFilter);

            if (volumesFilter != null)
            {
                // Combine the volumes filter into the combined filter
                combinedFilter = CombineFilterAndVolumeFilter(combinedFilter, volumesFilter);
            }

            return(combinedFilter);
        }
コード例 #3
0
        public void Should_not_set_dates_based_on_DateRangeType_When_using_Custom(DateRangeType dateRangeType,
                                                                                  bool asAtDate)
        {
            var startUtc = dateRangeType == DateRangeType.Custom ? new DateTime(2017, 11, 5) : (DateTime?)null;
            var endUtc   = dateRangeType == DateRangeType.Custom ? new DateTime(2017, 11, 6) : (DateTime?)null;


            //Json deserialize interprets date as mm/dd/yyyy so format date that way
            var startUtcStr      = startUtc?.ToString("MM/dd/yyyy");
            var endUtcStr        = endUtc?.ToString("MM/dd/yyyy");
            var filterDescriptor = new FilterDescriptor
            {
                FilterJson =
                    $"{{\"dateRangeType\":\"{dateRangeType}\",\"asAtDate\":\"{asAtDate}\",\"startUTC\":\"{startUtcStr}\",\"endUTC\":\"{endUtcStr}\",\"elevationType\":null}}"
            };

            FilterJsonHelper.ParseFilterJson(
                new ProjectData {
                IanaTimeZone = "America/Los_Angeles", ProjectUID = _projectGuid.ToString()
            }, filterDescriptor,
                _mockedProductivity3dV2ProxyCompaction.Object, new HeaderDictionary());

            Abstractions.Models.Filter filterObj =
                JsonConvert.DeserializeObject <Abstractions.Models.Filter>(filterDescriptor.FilterJson);
            Assert.Equal(asAtDate ? MockedStartTime : startUtc, filterObj.StartUtc);
            Assert.Equal(endUtc, filterObj.EndUtc);
        }
コード例 #4
0
        public async Task Should_not_set_dates_based_on_DateRangeType(DateRangeType dateRangeType, bool asAtDate)
        {
            var startUtc = dateRangeType == DateRangeType.Custom ? new DateTime(2017, 11, 5) : (DateTime?)null;
            var endUtc   = dateRangeType == DateRangeType.Custom ? new DateTime(2017, 11, 6) : (DateTime?)null;
            //Json deserialize interprets date as mm/dd/yyyy so format date that way
            var startUtcStr = startUtc?.ToString("MM/dd/yyyy");
            var endUtcStr   = endUtc?.ToString("MM/dd/yyyy");
            var filter      = new MasterData.Repositories.DBModels.Filter
            {
                FilterJson =
                    $"{{\"dateRangeType\":\"{dateRangeType}\",\"asAtDate\":\"{asAtDate}\",\"startUTC\":\"{startUtcStr}\",\"endUTC\":\"{endUtcStr}\",\"elevationType\":null}}"
            };

            await FilterJsonHelper.ParseFilterJson(
                new ProjectData { IanaTimeZone = "America/Los_Angeles", ProjectUID = _projectGuid.ToString() }, filter,
                productivity3dV2ProxyCompaction : _mockedProductivity3dV2ProxyCompaction.Object, customHeaders : new HeaderDictionary());

            Abstractions.Models.Filter filterObj =
                JsonConvert.DeserializeObject <Abstractions.Models.Filter>(filter.FilterJson);
            Assert.Equal(dateRangeType, filterObj.DateRangeType);
            if (asAtDate)
            {
                Assert.Equal(MockedStartTime, filterObj.StartUtc);
            }
            else
            {
                Assert.Equal(startUtc, filterObj.StartUtc);
            }
            Assert.Equal(endUtc, filterObj.EndUtc);
        }
コード例 #5
0
        /// <summary>
        /// Combine summary volume related elements from a 'volume' filter into another filter to produce a filter that
        /// is an extension of 'filter' with summary volume related aspects overridden from the 'volume' filter
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="volumeFilter"></param>
        /// <returns></returns>
        private static Abstractions.Models.Filter CombineFilterAndVolumeFilter(Abstractions.Models.Filter filter, Abstractions.Models.Filter volumeFilter)
        {
            // Currently, the volume role filter is intended to provide date range and volume design reference information, so these are the only
            // elements extracted from the volume filter and used to override matching elements in the combined filter

            var combinedFilter = new Abstractions.Models.Filter(
                elevationType: filter.ElevationType,
                layerNumber: filter.LayerNumber,
                contributingMachines: filter.ContributingMachines,
                onMachineDesignId: filter.OnMachineDesignId,
                onMachineDesignName: filter.OnMachineDesignName,
                vibeStateOn: filter.VibeStateOn,
                forwardDirection: filter.ForwardDirection,
                polygonUid: filter.PolygonUid,
                passCountRangeMin: filter.PassCountRangeMin,
                passCountRangeMax: filter.PassCountRangeMax,
                temperatureRangeMin: filter.TemperatureRangeMin,
                temperatureRangeMax: filter.TemperatureRangeMax,
                automaticsType: filter.AutomaticsType,
                alignmentUid: filter.AlignmentUid,
                startStation: filter.StartStation,
                endStation: filter.EndStation,
                leftOffset: filter.LeftOffset,
                rightOffset: filter.RightOffset,

                // Volume specific overrides:
                designUid: volumeFilter.DesignUid ?? filter.DesignUid,
                designFileName: volumeFilter.DesignFileName ?? filter.DesignFileName,

                // Todo: These members are never override in the client code, so will be hard coded to null here until otherwise indicated
                polygonLL: null,
                polygonName: null,
                alignmentFileName: null,
                asAtDate: null,
                polygonType: null
                );

            combinedFilter.DateRangeType = volumeFilter.DateRangeType ?? filter.DateRangeType;
            combinedFilter.StartUtc      = volumeFilter?.DateRangeType == DateRangeType.Custom ? volumeFilter.StartUtc : null;
            combinedFilter.EndUtc        = volumeFilter?.DateRangeType == DateRangeType.Custom ? volumeFilter.EndUtc : null;

            return(combinedFilter);
        }
コード例 #6
0
        private static Abstractions.Models.Filter CombineTwoFilters(Abstractions.Models.Filter parent, Abstractions.Models.Filter child)
        {
            var combinedFilter = new Abstractions.Models.Filter(
                elevationType: child.ElevationType ?? parent.ElevationType,
                layerNumber: child.LayerNumber ?? parent.LayerNumber,
                contributingMachines: child.ContributingMachines ?? parent.ContributingMachines,
                onMachineDesignId: child.OnMachineDesignId ?? parent.OnMachineDesignId,
                onMachineDesignName: child.OnMachineDesignName ?? parent.OnMachineDesignName,
                vibeStateOn: child.VibeStateOn ?? parent.VibeStateOn,
                forwardDirection: child.ForwardDirection ?? parent.ForwardDirection,
                designUid: child.DesignUid ?? parent.DesignUid,
                designFileName: child.DesignFileName ?? parent.DesignFileName,
                polygonUid: child.PolygonUid ?? parent.PolygonUid,
                passCountRangeMin: child.PassCountRangeMin ?? parent.PassCountRangeMin,
                passCountRangeMax: child.PassCountRangeMax ?? parent.PassCountRangeMax,
                temperatureRangeMin: child.TemperatureRangeMin ?? parent.TemperatureRangeMin,
                temperatureRangeMax: child.TemperatureRangeMax ?? parent.TemperatureRangeMax,
                automaticsType: child.AutomaticsType ?? parent.AutomaticsType,
                alignmentUid: child.AlignmentUid ?? parent.AlignmentUid,
                startStation: child.StartStation ?? parent.StartStation,
                endStation: child.EndStation ?? parent.EndStation,
                leftOffset: child.LeftOffset ?? parent.LeftOffset,
                rightOffset: child.RightOffset ?? parent.RightOffset,

                // Todo: These members are never override in the client code, so will be hard coded to null here until otherwise indicated
                polygonLL: null,
                polygonName: null,
                alignmentFileName: null,
                asAtDate: null,
                polygonType: null
                );

            // Any time constraint in the widget filter overrides the time constraint in the masterfilter.
            combinedFilter.DateRangeType = child.DateRangeType ?? parent.DateRangeType;
            combinedFilter.StartUtc      = child?.DateRangeType == DateRangeType.Custom ? child.StartUtc : null;
            combinedFilter.EndUtc        = child?.DateRangeType == DateRangeType.Custom ? child.EndUtc : null;

            return(combinedFilter);
        }
コード例 #7
0
        /// <summary>
        /// Combines the widget filter into the master filter, returning a modified master filter
        /// </summary>
        /// <param name="masterFilter"></param>
        /// <param name="widgetFilter"></param>
        private static Abstractions.Models.Filter CombineWidgetFilterIntoMasterFilter(Abstractions.Models.Filter masterFilter, Abstractions.Models.Filter widgetFilter)
        {
            // Create a new filter where all filter aspects are copied preferenially from the widget filter, and then the master filter.

            return(CombineTwoFilters(masterFilter, widgetFilter));
        }