예제 #1
0
        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.");
        }
예제 #2
0
        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}.");
        }
예제 #3
0
        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();
        }
예제 #4
0
        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}");
        }
예제 #5
0
        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.");
        }
예제 #6
0
        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.");
        }
예제 #7
0
        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.");
        }
예제 #8
0
        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();
        }
예제 #9
0
        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.");
        }
예제 #10
0
        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();
        }
예제 #11
0
        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}");
        }
예제 #12
0
        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();
        }
예제 #13
0
        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");
        }
예제 #14
0
        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.");
        }
예제 #15
0
        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();
        }
예제 #16
0
        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.");
        }
예제 #17
0
        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.");
        }
예제 #18
0
        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.");
        }
예제 #19
0
        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);
        }
예제 #20
0
        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.");
        }
예제 #21
0
        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.");
        }
예제 #22
0
 private ProjectValidation MapProjectValidation(ProjectValidateDto request) => AutoMapperUtility.Automapper.Map <ProjectValidation>(request);