Ejemplo n.º 1
0
        public async Task <FileResult> PostGriddedReport(
            [FromBody] CompactionReportGridTRexRequest reportGridRequest,
            [FromServices] IReportDataValidationUtility reportDataValidationUtility)
        {
            Log.LogInformation($"{nameof(PostGriddedReport)}: {Request.QueryString}");

            reportGridRequest.Validate();
            reportDataValidationUtility.ValidateData(nameof(PostGriddedReport), reportGridRequest.ProjectUid, (object)reportGridRequest);
            ValidateFilterMachines(nameof(PostGriddedReport), reportGridRequest.ProjectUid, reportGridRequest.Filter);

            var griddedReportDataResult = await WithServiceExceptionTryExecuteAsync(() =>
                                                                                    RequestExecutorContainer
                                                                                    .Build <GriddedReportExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler)
                                                                                    .ProcessAsync(reportGridRequest)) as GriddedReportDataResult;

            if (griddedReportDataResult?.GriddedData == null)
            {
                var code   = griddedReportDataResult == null ? HttpStatusCode.BadRequest : HttpStatusCode.NoContent;
                var exCode = griddedReportDataResult == null ? ContractExecutionStatesEnum.FailedToGetResults : ContractExecutionStatesEnum.ValidationError;

                throw new ServiceException(code, new ContractExecutionResult(exCode, $"Failed to get gridded report data for projectUid: {reportGridRequest.ProjectUid}"));
            }

            return(new FileStreamResult(new MemoryStream(griddedReportDataResult.GriddedData), ContentTypeConstants.ApplicationOctetStream));
        }
Ejemplo n.º 2
0
        public async Task CSVExportExecutor_GotSiteAndFilter()
        {
            bool   reportElevation     = true;
            bool   reportCmv           = true;
            bool   reportMdp           = true;
            bool   reportPassCount     = true;
            bool   reportTemperature   = true;
            bool   reportCutFill       = false;
            Guid?  cutFillDesignUid    = null;
            double?cutFillDesignOffset = null;
            double?gridInterval        = null;
            var    gridReportOption    = GridReportOption.Automatic;
            double startNorthing       = 800000;
            double startEasting        = 400000;
            double endNorthing         = 800010;
            double endEasting          = 400010;
            double azimuth             = 4;

            var filter = new Productivity3D.Filter.Abstractions.Models.Filter(
                DateTime.SpecifyKind(new DateTime(2018, 1, 10), DateTimeKind.Utc),
                DateTime.SpecifyKind(new DateTime(2019, 2, 11), DateTimeKind.Utc), "", "",
                new List <MachineDetails>(), null, null, null, null, null, null
                );
            var filterResult = new FilterResult(null, filter, null, null, null, null, null, null, null);
            var siteModel    = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();

            var request = new CompactionReportGridTRexRequest(
                siteModel.ID, filterResult,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutFillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();

            // Mock the export request functionality to return an empty gridded report reponse to stimulate the desired success
            var mockCompute = IgniteMock.Immutable.mockCompute;

            mockCompute.Setup(x => x.ApplyAsync(It.IsAny <GriddedReportRequestComputeFunc>(), It.IsAny <GriddedReportRequestArgument>(), It.IsAny <CancellationToken>())).Returns((GriddedReportRequestComputeFunc func, GriddedReportRequestArgument argument, CancellationToken token) => Task.FromResult(new GriddedReportRequestResponse()));

            var executor = RequestExecutorContainer
                           .Build <GriddedReportExecutor>(DIContext.Obtain <IConfigurationStore>(),
                                                          DIContext.Obtain <ILoggerFactory>(),
                                                          DIContext.Obtain <IServiceExceptionHandler>());
            var result = await executor.ProcessAsync(request) as GriddedReportDataResult;

            result?.Code.Should().Be(ContractExecutionStatesEnum.ExecutedSuccessfully);
            result?.GriddedData.Should().NotBeNull();
            result?.GriddedData.Should().NotBeEmpty();
        }
Ejemplo n.º 3
0
        public void GriddedTRexRequest_Successful(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth)
        {
            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();
        }
Ejemplo n.º 4
0
        public void GriddedTRexRequest_Unsuccessful(
            Guid projectUid, FilterResult filter,
            bool reportElevation, bool reportCmv, bool reportMdp, bool reportPassCount, bool reportTemperature, bool reportCutFill,
            Guid?cutFillDesignUid, double?cutfillDesignOffset,
            double?gridInterval, GridReportOption gridReportOption,
            double startNorthing, double startEasting, double endNorthing, double endEasting, double azimuth,
            string errorMessage)
        {
            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutfillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            var ex = Assert.Throws <ServiceException>(() => request.Validate());

            Assert.Equal(HttpStatusCode.BadRequest, ex.Code);
            Assert.Equal(ContractExecutionStatesEnum.ValidationError, ex.GetResult.Code);
            Assert.Equal(errorMessage, ex.GetResult.Message);
        }
Ejemplo n.º 5
0
        public async Task GriddedReportExecutor_SiteModelNotFound()
        {
            var          projectUid          = Guid.NewGuid();
            FilterResult filter              = null;
            bool         reportElevation     = true;
            bool         reportCmv           = true;
            bool         reportMdp           = true;
            bool         reportPassCount     = true;
            bool         reportTemperature   = true;
            bool         reportCutFill       = false;
            Guid?        cutFillDesignUid    = null;
            double?      cutFillDesignOffset = null;
            double?      gridInterval        = null;
            var          gridReportOption    = GridReportOption.Automatic;
            double       startNorthing       = 800000;
            double       startEasting        = 400000;
            double       endNorthing         = 800010;
            double       endEasting          = 400010;
            double       azimuth             = 4;

            var request = new CompactionReportGridTRexRequest(
                projectUid, filter,
                reportElevation, reportCmv, reportMdp, reportPassCount, reportTemperature, reportCutFill,
                cutFillDesignUid, cutFillDesignOffset,
                gridInterval, gridReportOption, startNorthing, startEasting, endNorthing, endEasting, azimuth, null, null);

            request.Validate();

            var executor = RequestExecutorContainer
                           .Build <GriddedReportExecutor>(DIContext.Obtain <IConfigurationStore>(),
                                                          DIContext.Obtain <ILoggerFactory>(),
                                                          DIContext.Obtain <IServiceExceptionHandler>());
            var result = await Assert.ThrowsAsync <ServiceException>(() => executor.ProcessAsync(request));

            Assert.Equal(HttpStatusCode.BadRequest, result.Code);
            Assert.Equal(ContractExecutionStatesEnum.InternalProcessingError, result.GetResult.Code);
            Assert.Equal($"Site model {projectUid} is unavailable", result.GetResult.Message);
        }