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)); }
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(); }
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(); }
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); }
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); }