public async Task ValidateProjectExecutor_UpdateCoordSysFile_MissingCoordSysFileContents() { var project = CreateProjectDetailModel(_customerTrn, _projectTrn); var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); cwsProjectClient.Setup(ps => ps.GetMyProject(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(project); var coordSystemResult = new CoordinateSystemSettingsResult(); var coordProxy = new Mock <IProductivity3dV1ProxyCoord>(); coordProxy.Setup(cp => cp.CoordinateSystemValidate(It.IsAny <byte[]>(), It.IsAny <string>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(coordSystemResult); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.CalibrationUpdate, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = null }; var executor = CreateExecutor(productivity3dV1ProxyCoord: coordProxy.Object, cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(134, "Both coordinate system file name and contents must be provided."); }
public async Task ValidateProjectExecutor_UpdateCoordSysFile_Failed() { var project = CreateProjectDetailModel(_customerTrn, _projectTrn); var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); cwsProjectClient.Setup(ps => ps.GetMyProject(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(project); var coordSystemResult = new CoordinateSystemSettingsResult { Code = 99, Message = "Failed!" }; var coordProxy = new Mock <IProductivity3dV1ProxyCoord>(); coordProxy.Setup(cp => cp.CoordinateSystemValidate(It.IsAny <byte[]>(), It.IsAny <string>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(coordSystemResult); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.CalibrationUpdate, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var executor = CreateExecutor(productivity3dV1ProxyCoord: coordProxy.Object, cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(47, $"Unable to validate CoordinateSystem in 3dpm: {coordSystemResult.Code} {coordSystemResult.Message}."); }
public async Task ValidateProjectExecutor_Create_Valid() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var coordSystemResult = new CoordinateSystemSettingsResult(); var coordProxy = new Mock <IProductivity3dV1ProxyCoord>(); coordProxy.Setup(cp => cp.CoordinateSystemValidate(It.IsAny <byte[]>(), It.IsAny <string>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(coordSystemResult); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = null, ProjectName = "some project", ProjectType = CwsProjectType.AcceptsTagFiles, Boundary = CreateNonOverlappingBoundary(), UpdateType = CwsUpdateType.CreateProject, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var result = await CreateExecutor(coordProxy.Object, cwsProjectClient.Object) .ProcessAsync(MapProjectValidation(request)); result.IsSuccessResponse(); }
public async Task ValidateProjectExecutor_UpdateCoordSysFile_WithException() { var project = CreateProjectDetailModel(_customerTrn, _projectTrn); var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); cwsProjectClient.Setup(ps => ps.GetMyProject(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(project); const string EX_MESSAGE = "some problem here"; var coordProxy = new Mock <IProductivity3dV1ProxyCoord>(); coordProxy.Setup(cp => cp.CoordinateSystemValidate(It.IsAny <byte[]>(), It.IsAny <string>(), It.IsAny <IHeaderDictionary>())).ThrowsAsync(new Exception(EX_MESSAGE)); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.CalibrationUpdate, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var executor = CreateExecutor(productivity3dV1ProxyCoord: coordProxy.Object, cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(57, $"A problem occurred at the validate CoordinateSystem endpoint in 3dpm. Exception: {EX_MESSAGE}"); }
public async Task ValidateProjectExecutor_UnknownUpdateType() { var request = new ProjectValidateDto { AccountTrn = TRNHelper.MakeTRN(Guid.NewGuid(), TRNHelper.TRN_ACCOUNT) }; var result = await CreateExecutor().ProcessAsync(MapProjectValidation(request)); result.ShouldBe(135, "Mismatched customerUid."); }
public async Task ValidateProjectExecutor_MismatchedCustomerUid() { var request = new ProjectValidateDto { AccountTrn = _customerTrn, UpdateType = CwsUpdateType.DeleteDeviceFromAccount }; var result = await CreateExecutor().ProcessAsync(MapProjectValidation(request)); result.ShouldBe(136, "Unknown update type in project validation."); }
public async Task ValidateProjectExecutor_Archive_MissingProjectUid() { var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = null, UpdateType = CwsUpdateType.ArchiveProject }; var result = await CreateExecutor().ProcessAsync(MapProjectValidation(request)); result.ShouldBe(5, "Missing ProjectUID."); }
public async Task ValidateProjectExecutor_Archive_Valid() { var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.ArchiveProject }; var result = await CreateExecutor().ProcessAsync(MapProjectValidation(request)); result.IsSuccessResponse(); }
public async Task ValidateProjectExecutor_UpdateBoundary_Overlapping() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = TRNHelper.MakeTRN(Guid.NewGuid()), Boundary = projectList.Projects[0].ProjectSettings.Boundary, UpdateType = CwsUpdateType.BoundaryUpdate }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(43, "Project boundary overlaps another project."); }
public async Task ValidateProjectExecutor_UpdateBoundary_Valid() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, Boundary = CreateNonOverlappingBoundary(), UpdateType = CwsUpdateType.BoundaryUpdate }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.IsSuccessResponse(); }
public async Task ValidateProjectExecutor_Delete_NonExistentProject() { var exception = new Exception("Invalid project id"); var extentsProxy = new Mock <IProductivity3dV2ProxyCompaction>(); extentsProxy.Setup(ep => ep.GetProjectStatistics(It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ThrowsAsync(exception); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.DeleteProject }; var executor = CreateExecutor(productivity3dV2ProxyCompaction: extentsProxy.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(57, $"A problem occurred at the validate project deletion endpoint in 3dpm. Exception: {exception.Message}"); }
public async Task ValidateProjectExecutor_Delete_Non3d_NoData() { var exception = new Exception($"GetStatistics: SiteModel: {_projectUid} not found"); var extentsProxy = new Mock <IProductivity3dV2ProxyCompaction>(); extentsProxy.Setup(ep => ep.GetProjectStatistics(It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ThrowsAsync(exception); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.DeleteProject }; var executor = CreateExecutor(productivity3dV2ProxyCompaction: extentsProxy.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.IsSuccessResponse(); }
public async Task ValidateProjectExecutor_Delete_3d_HasData() { var extents = new ProjectStatisticsResult { extents = new BoundingBox3DGrid(10, 10, 10, 20, 20, 20) }; var extentsProxy = new Mock <IProductivity3dV2ProxyCompaction>(); extentsProxy.Setup(ep => ep.GetProjectStatistics(It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(extents); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.DeleteProject }; var executor = CreateExecutor(productivity3dV2ProxyCompaction: extentsProxy.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(141, "Cannot delete a project that has 3D production (tag file) data"); }
public async Task ValidateProjectExecutor_Create_MissingCoordSysFileName() { var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = null, ProjectName = "some project", ProjectType = CwsProjectType.AcceptsTagFiles, Boundary = CreateNonOverlappingBoundary(), UpdateType = CwsUpdateType.CreateProject, CoordinateSystemFileName = null, CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var result = await CreateExecutor().ProcessAsync(MapProjectValidation(request)); result.ShouldBe(132, "Missing coordinate system file name."); }
public async Task ValidateProjectExecutor_Delete_3d_NoData_2() { var extents = new ProjectStatisticsResult { extents = new BoundingBox3DGrid(0, 0, 0, 0, 0, 0) }; var extentsProxy = new Mock <IProductivity3dV2ProxyCompaction>(); extentsProxy.Setup(ep => ep.GetProjectStatistics(It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(extents); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, UpdateType = CwsUpdateType.DeleteProject }; var executor = CreateExecutor(productivity3dV2ProxyCompaction: extentsProxy.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.IsSuccessResponse(); }
public async Task ValidateProjectExecutor_UpdateName_Duplicate() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = TRNHelper.MakeTRN(Guid.NewGuid()), ProjectName = projectList.Projects[0].ProjectName, UpdateType = CwsUpdateType.UpdateProject }; var executor = RequestExecutorContainerFactory.Build <ValidateProjectExecutor> (_loggerFactory, _configStore, ServiceExceptionHandler, _customerUid.ToString(), _userUid.ToString(), null, _customHeaders, null, cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(109, "Project Name must be unique. 1 active project duplicates found."); }
public async Task ValidateProjectExecutor_Update_MissingProject() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = null, ProjectName = "some new project name", UpdateType = CwsUpdateType.UpdateProject }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(5, "Missing ProjectUID."); }
public async Task ValidateProjectExecutor_UpdateProjectType_MissingProject() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); cwsProjectClient.Setup(ps => ps.GetMyProject(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync((ProjectDetailResponseModel)null); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, ProjectType = CwsProjectType.AcceptsTagFiles, UpdateType = CwsUpdateType.UpdateProjectType, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(7, "Project does not exist."); }
public async Task <ContractExecutionResult> IsProjectValid([FromBody] ProjectValidateDto validateDto) { Logger.LogInformation($"{nameof(IsProjectValid)} Project Validation Check {JsonConvert.SerializeObject(validateDto)}"); // Nothing to validate for a non 3d-enabled project except deletion if (validateDto.ProjectType.HasValue && !validateDto.ProjectType.Value.HasFlag(CwsProjectType.AcceptsTagFiles) && validateDto.UpdateType != CwsUpdateType.DeleteProject) { return(new ContractExecutionResult()); } var data = AutoMapperUtility.Automapper.Map <ProjectValidation>(validateDto); var result = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainerFactory .Build <ValidateProjectExecutor>(LoggerFactory, ConfigStore, ServiceExceptionHandler, CustomerUid, UserId, null, customHeaders, Productivity3dV1ProxyCoord, dataOceanClient : DataOceanClient, authn : Authorization, cwsProjectClient : CwsProjectClient, cwsProfileSettingsClient : CwsProfileSettingsClient, productivity3dV2ProxyCompaction : Productivity3dV2ProxyCompaction) .ProcessAsync(data) ); return(result); }
public async Task ValidateProjectExecutor_UpdateProjectType_MissingCoordSysFileContents() { var project = CreateProjectDetailModel(_customerTrn, _projectTrn); var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); cwsProjectClient.Setup(ps => ps.GetMyProject(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(project); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = _projectTrn, ProjectType = CwsProjectType.AcceptsTagFiles, UpdateType = CwsUpdateType.CalibrationUpdate, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = null }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(133, "Missing coordinate system file contents."); }
public async Task ValidateProjectExecutor_Create_OverlappingBoundary() { var projectList = CreateProjectListModel(_customerTrn, _projectTrn); var cwsProjectClient = new Mock <ICwsProjectClient>(); cwsProjectClient.Setup(ps => ps.GetProjectsForCustomer(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <CwsProjectType?>(), It.IsAny <ProjectStatus?>(), It.IsAny <bool>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(projectList); var request = new ProjectValidateDto { AccountTrn = _customerTrn, ProjectTrn = null, ProjectName = "some project", ProjectType = CwsProjectType.AcceptsTagFiles, Boundary = projectList.Projects[0].ProjectSettings.Boundary, UpdateType = CwsUpdateType.CreateProject, CoordinateSystemFileName = "some file name", CoordinateSystemFileContent = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 } }; var executor = CreateExecutor(cwsProjectClient: cwsProjectClient.Object); var result = await executor.ProcessAsync(MapProjectValidation(request)); result.ShouldBe(43, "Project boundary overlaps another project."); }
private ProjectValidation MapProjectValidation(ProjectValidateDto request) => AutoMapperUtility.Automapper.Map <ProjectValidation>(request);