public async void Boundaries_OverLimit(string fileName, DxfUnitsType units, int firstBoundaryVertexCount) { const int LIMIT = 5; var request = new DXFBoundariesRequest("", ImportedFileType.SiteBoundary, Convert.ToBase64String(File.ReadAllBytes(Path.Combine("TestData", fileName))), units, LIMIT, false); var executor = new ExtractDXFBoundariesExecutor(DIContext.Obtain <IConfigurationStore>(), DIContext.Obtain <ILoggerFactory>(), DIContext.Obtain <IServiceExceptionHandler>()); executor.Should().NotBeNull(); var result = await executor.ProcessAsync(request); result.Should().NotBeNull(); result.Code.Should().Be(ContractExecutionStatesEnum.ExecutedSuccessfully); result.Message.Should().Be("Success"); if (result is DXFBoundaryResult boundary) { boundary.Boundaries.Count.Should().Be(LIMIT); boundary.Boundaries[0].Fence.Count.Should().Be(firstBoundaryVertexCount); } else { false.Should().BeTrue(); // fail the test } }
private async void TestAFile(string fileName, DxfUnitsType units, int expectedBoundaryCount, int firstBoundaryVertexCount, string expectedName, DXFLineWorkBoundaryType expectedType, bool allowUnclosedBoundaries) { var request = new DXFBoundariesRequest("", ImportedFileType.SiteBoundary, Convert.ToBase64String(File.ReadAllBytes(Path.Combine("TestData", fileName))), units, 10, allowUnclosedBoundaries); var executor = new ExtractDXFBoundariesExecutor(DIContext.Obtain <IConfigurationStore>(), DIContext.Obtain <ILoggerFactory>(), DIContext.Obtain <IServiceExceptionHandler>()); executor.Should().NotBeNull(); var result = await executor.ProcessAsync(request); result.Should().NotBeNull(); result.Code.Should().Be(ContractExecutionStatesEnum.ExecutedSuccessfully); result.Message.Should().Be("Success"); if (result is DXFBoundaryResult boundary) { boundary.Boundaries.Count.Should().Be(expectedBoundaryCount); if (expectedBoundaryCount > 0) { boundary.Boundaries[0].Fence.Count.Should().Be(firstBoundaryVertexCount); boundary.Boundaries[0].Name.Should().Be(expectedName); boundary.Boundaries[0].Type.Should().Be(expectedType); } } else { false.Should().BeTrue(); // fail the test } }
private async Task <DxfLineworkFileResult> ProcessForTRex(LineworkRequest request) { try { log.LogDebug($"{nameof(LineworkFileExecutor)}::{nameof(ProcessForTRex)}()"); var req = new DXFBoundariesRequest(request.CoordinateSystemFileData, ImportedFileType.SiteBoundary, request.DxfFileData, (DxfUnitsType)request.LineworkUnits, (uint)request.NumberOfBoundariesToProcess, request.ConvertLineStringCoordsToPolygon); var returnResult = await trexCompactionDataProxy.SendDataPostRequest <DXFBoundaryResult, DXFBoundariesRequest>(req, "files/dxf/boundaries"); log.LogInformation($"RequestBoundariesFromLineWork: result: {JsonConvert.SerializeObject(returnResult)}"); if (returnResult.Code != ContractExecutionStatesEnum.ExecutedSuccessfully) { throw CreateServiceException <LineworkFileExecutor>(returnResult.Code); } return(new DxfLineworkFileResult(returnResult.Boundaries, returnResult.Code, returnResult.Message)); } catch (ServiceException ex) { var errorMessage = ex.GetResult.Message; log.LogError($"RequestBoundariesFromLinework: exception {errorMessage}"); return(new DxfLineworkFileResult(ContractExecutionStatesEnum.InternalProcessingError, errorMessage, null)); } finally { ContractExecutionStates.ClearDynamic(); } }
public async void Fail_With_InvalidFile() { var request = new DXFBoundariesRequest("", ImportedFileType.SiteBoundary, Convert.ToBase64String(File.ReadAllBytes(Path.Combine("TestData", "TransferTestDesign.ttm"))), DxfUnitsType.Meters, 10, false); var executor = new ExtractDXFBoundariesExecutor(DIContext.Obtain <IConfigurationStore>(), DIContext.Obtain <ILoggerFactory>(), DIContext.Obtain <IServiceExceptionHandler>()); executor.Should().NotBeNull(); Func <Task> act = async() => await executor.ProcessAsync(request); act.Should().Throw <ServiceException>().WithMessage($"Error processing file: {DXFUtilitiesResult.UnknownFileFormat}"); }
public async Task <IActionResult> ExtractBoundariesFromDXF([FromBody] DXFBoundariesRequest request) { Log.LogInformation($"{nameof(ExtractBoundariesFromDXF)}: {JsonConvert.SerializeObject(request, ResolverCache[nameof(DXFBoundariesRequest)])}"); request.Validate(); if (request.FileType == ImportedFileType.Linework || request.FileType == ImportedFileType.SiteBoundary) { var response = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainer .Build <ExtractDXFBoundariesExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler) .ProcessAsync(request)); return(Ok(response)); } return(BadRequest(new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "File type must be DXF"))); }