Exemple #1
0
        public async Task <MachineExecutionResult> GetMachines(string siteModelID,
                                                               [FromServices] ICoordinateServiceUtility coordinateServiceUtility)
        {
            Log.LogInformation($"{nameof(GetMachines)}: siteModelID: {siteModelID}");

            var siteModel = GatewayHelper.ValidateAndGetSiteModel(nameof(GetMachines), siteModelID);
            var CSIB      = siteModel.CSIB();

            if (string.IsNullOrEmpty(CSIB))
            {
                Log.LogError($"{nameof(GetMachines)}: siteModel has no CSIB");
                throw new ServiceException(System.Net.HttpStatusCode.InternalServerError, new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "The SiteModel has no CSIB."));
            }

            var machines = siteModel.Machines.ToList();
            var result   = new MachineExecutionResult(new List <MachineStatus>(machines.Count));

            if (machines.Any())
            {
                var resultMachines = machines.Select(machine => AutoMapperUtility.Automapper.Map <MachineStatus>(machine)).ToList();
                var response       = await coordinateServiceUtility.PatchLLH(siteModel.CSIB(), resultMachines);

                result.MachineStatuses = resultMachines;

                // todo once corex is implemented, we will have a better idea why patching fails
                //if (response == ContractExecutionStatesEnum.ExecutedSuccessfully)
                //  result.MachineStatuses = resultMachines;
                //else
                //  return (MachineExecutionResult) new ContractExecutionResult(response);
            }

            Log.LogInformation($"{nameof(GetMachines)}: result: {JsonConvert.SerializeObject(result)}");
            return(result);
        }
Exemple #2
0
        public void Should_match_contributingMachines_contains_assetUid_using_FilterDescriptor()
        {
            var dateRangeType = DateRangeType.CurrentMonth;
            var asAtDate      = true;

            var nullLegacyAssetId = -1;
            var machineName       = "the machine name";
            var isJohnDoe         = false;
            var assetUid          = Guid.NewGuid();
            var assetId           = assetUid.ToLegacyId();

            var contributingMachinesString =
                $",\"contributingMachines\":[{{\"assetID\":\"{nullLegacyAssetId}\",\"machineName\":\"{machineName}\",\"isJohnDoe\":{(isJohnDoe ? "true" : "false")},\"assetUid\":\"{assetUid}\"}}]";
            var filterDescriptor = new FilterDescriptor
            {
                FilterJson =
                    $"{{\"dateRangeType\":\"{dateRangeType}\",\"asAtDate\":\"{asAtDate}\",\"elevationType\":null{contributingMachinesString}}}"
            };

            var expectedResult = new List <MachineDetails> {
                new MachineDetails(assetId, machineName, isJohnDoe, assetUid)
            };

            var getMachinesExecutionResult = new MachineExecutionResult
                                             (
                new List <MachineStatus>(1)
            {
                new MachineStatus(assetId, machineName, isJohnDoe,
                                  string.Empty, 0, null, null, null, null, null,
                                  assetUid: assetUid)
            }
                                             );

            _mockedProductivity3dV2ProxyCompaction.Setup(x =>
                                                         x.ExecuteGenericV2Request <MachineExecutionResult>(It.IsAny <String>(), It.IsAny <HttpMethod>(), It.IsAny <Stream>(), It.IsAny <IHeaderDictionary>()))
            .ReturnsAsync(getMachinesExecutionResult);

            FilterJsonHelper.ParseFilterJson(
                new ProjectData {
                IanaTimeZone = "America/Los_Angeles", ProjectUID = _projectGuid.ToString()
            }, filterDescriptor,
                _mockedProductivity3dV2ProxyCompaction.Object, new HeaderDictionary());

            var actualResult = JsonConvert.DeserializeObject <Abstractions.Models.Filter>(filterDescriptor.FilterJson);

            Assert.Single(actualResult.ContributingMachines);
            Assert.Equal(expectedResult[0], actualResult.ContributingMachines[0]);
        }
Exemple #3
0
        protected void GetTRexMachineIdsMock(List <MachineStatus> machineStatusList, Guid projectUid,
                                             Mock <IConfigurationStore> configStore, bool enableTRexGateway, bool isTRexAvailable,
                                             Mock <ITRexCompactionDataProxy> tRexProxy)
        {
            var expectedMachineExecutionResult = new MachineExecutionResult
                                                 (
                new List <MachineStatus>(machineStatusList.Count)
                                                 );

            expectedMachineExecutionResult.MachineStatuses.AddRange(machineStatusList);

            tRexProxy.Setup(x => x.SendDataGetRequest <MachineExecutionResult>(projectUid.ToString(),
                                                                               It.IsAny <string>(),
                                                                               It.IsAny <IHeaderDictionary>(),
                                                                               It.IsAny <List <KeyValuePair <string, string> > >()))
            .ReturnsAsync(expectedMachineExecutionResult);

            configStore.Setup(x => x.GetValueBool("ENABLE_TREX_GATEWAY_MACHINES")).Returns(enableTRexGateway);
            configStore.Setup(x => x.GetValueBool("TREX_IS_AVAILABLE")).Returns(isTRexAvailable);
        }
Exemple #4
0
        public async Task Should_return_when_DesignUid_and_AlignmentUid_arent_provided()
        {
            var          name       = Guid.NewGuid().ToString();
            const string filterJson = "{\"startUtc\":\"2012-10-30T00:12:09.109\",\"endUtc\":\"2018-06-14T11:58:13.662\",\"dateRangeType\":7,\"contributingMachines\":[{\"assetID\":\"751877972662699\",\"machineName\":\"KOMATSU PC210\",\"isJohnDoe\":false}],\"onMachineDesignId\":\"1\",\"startStation\":0.0,\"endStation\":197.7762153912619,\"leftOffset\":0.0,\"rightOffset\":197.776}";

            var productivity3dV2ProxyNotification = new Mock <IProductivity3dV2ProxyNotification>();

            productivity3dV2ProxyNotification.Setup(ps => ps.NotifyFilterChange(It.IsAny <Guid>(), It.IsAny <Guid>(), null)).ReturnsAsync(new BaseMasterDataResult());

            var getMachinesExecutionResult      = new MachineExecutionResult(new List <MachineStatus>(0));
            var productivity3dV2ProxyCompaction = new Mock <IProductivity3dV2ProxyCompaction>();

            productivity3dV2ProxyCompaction.Setup(x =>
                                                  x.ExecuteGenericV2Request <MachineExecutionResult>(It.IsAny <string>(), It.IsAny <HttpMethod>(), It.IsAny <Stream>(), It.IsAny <IHeaderDictionary>()))
            .ReturnsAsync(getMachinesExecutionResult);

            var filter = new FilterModel
            {
                CustomerUid = custUid,
                UserId      = userUid,
                ProjectUid  = projectUid,
                Name        = name,
                FilterJson  = filterJson,
                FilterType  = FilterType.Persistent,
            };

            var configStore = serviceProvider.GetRequiredService <IConfigurationStore>();
            var logger      = serviceProvider.GetRequiredService <ILoggerFactory>();
            var filterRepo  = new Mock <FilterRepository>(configStore, logger);

            filterRepo.As <IFilterRepository>().Setup(ps => ps.GetFiltersForProjectUser(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), true)).ReturnsAsync(new List <FilterModel>());
            filterRepo.As <IFilterRepository>().Setup(ps => ps.StoreEvent(It.IsAny <UpdateFilterEvent>())).ReturnsAsync(1);
            filterRepo.As <IFilterRepository>().Setup(ps => ps.StoreEvent(It.IsAny <CreateFilterEvent>())).ReturnsAsync(1);

            var geofenceRepo = new Mock <GeofenceRepository>(configStore, logger);
            var filterToTest = new FilterDescriptorSingleResult(AutoMapperUtility.Automapper.Map <FilterDescriptor>(filter));

            var request = FilterRequestFull.Create(
                null,
                custUid,
                false,
                userUid,
                new ProjectData {
                ProjectUID = projectUid
            },
                new FilterRequest {
                FilterUid = null, Name = name, FilterJson = filterJson, FilterType = FilterType.Persistent
            });

            var executor = RequestExecutorContainer.Build <UpsertFilterExecutor>(configStore, logger, serviceExceptionHandler,
                                                                                 filterRepo.Object, geofenceRepo.Object,
                                                                                 productivity3dV2ProxyNotification: productivity3dV2ProxyNotification.Object, productivity3dV2ProxyCompaction: productivity3dV2ProxyCompaction.Object);

            var result = await executor.ProcessAsync(request) as FilterDescriptorSingleResult;

            Assert.NotNull(result);
            Assert.Equal(filterToTest.FilterDescriptor.Name, result.FilterDescriptor.Name);
            Assert.Equal(filterToTest.FilterDescriptor.FilterType, result.FilterDescriptor.FilterType);

            var resultFilter = JsonConvert.DeserializeObject <Abstractions.Models.Filter>(result.FilterDescriptor.FilterJson);

            Assert.Null(resultFilter.AlignmentFileName);
            Assert.Null(resultFilter.DesignFileName);
        }
Exemple #5
0
        public async Task Should_set_Alignment_and_Design_name_When_both_uids_are_provided()
        {
            var          name       = Guid.NewGuid().ToString();
            const string filterJson = "{\"startUtc\":\"2012-10-30T00:12:09.109\",\"endUtc\":\"2018-06-14T11:58:13.662\",\"dateRangeType\":7,\"contributingMachines\":[{\"assetID\":\"751877972662699\",\"machineName\":\"KOMATSU PC210\",\"isJohnDoe\":false}],\"onMachineDesignId\":\"1\",\"startStation\":0.0,\"endStation\":197.7762153912619,\"leftOffset\":0.0,\"rightOffset\":197.776,\"alignmentUid\":\"6ece671b-7959-4a14-86fa-6bfe6ef4dd62\",\"designUid\":\"dd64fe2e-6f27-4a78-82a3-0c0e8a5e84ff\"}";

            var productivity3dV2ProxyNotification = new Mock <IProductivity3dV2ProxyNotification>();

            productivity3dV2ProxyNotification.Setup(ps => ps.NotifyFilterChange(It.IsAny <Guid>(), It.IsAny <Guid>(), null)).ReturnsAsync(new BaseMasterDataResult());

            var getMachinesExecutionResult      = new MachineExecutionResult(new List <MachineStatus>(0));
            var productivity3dV2ProxyCompaction = new Mock <IProductivity3dV2ProxyCompaction>();

            productivity3dV2ProxyCompaction.Setup(x =>
                                                  x.ExecuteGenericV2Request <MachineExecutionResult>(It.IsAny <string>(), It.IsAny <HttpMethod>(), It.IsAny <Stream>(), It.IsAny <IHeaderDictionary>()))
            .ReturnsAsync(getMachinesExecutionResult);

            var filter = new FilterModel
            {
                CustomerUid = custUid,
                UserId      = userUid,
                ProjectUid  = projectUid,
                Name        = name,
                FilterJson  = filterJson,
                FilterType  = FilterType.Persistent,
            };

            var configStore = serviceProvider.GetRequiredService <IConfigurationStore>();
            var logger      = serviceProvider.GetRequiredService <ILoggerFactory>();
            var filterRepo  = new Mock <FilterRepository>(configStore, logger);

            filterRepo.As <IFilterRepository>().Setup(ps => ps.GetFiltersForProjectUser(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), true)).ReturnsAsync(new List <FilterModel>());
            filterRepo.As <IFilterRepository>().Setup(ps => ps.StoreEvent(It.IsAny <UpdateFilterEvent>())).ReturnsAsync(1);
            filterRepo.As <IFilterRepository>().Setup(ps => ps.StoreEvent(It.IsAny <CreateFilterEvent>())).ReturnsAsync(1);

            var fileData = new List <FileData>
            {
                new FileData
                {
                    Name             = "Large Sites Road.svl",
                    ProjectUid       = projectUid,
                    CustomerUid      = "StationOffsetReportTest",
                    ImportedFileType = ImportedFileType.Alignment,
                    ImportedFileUid  = "6ece671b-7959-4a14-86fa-6bfe6ef4dd62",
                    LegacyFileId     = 112,
                    IsActivated      = true,
                    MinZoomLevel     = 15,
                    MaxZoomLevel     = 17
                },
                new FileData
                {
                    Name             = "Large Sites Road - Trimble Road.TTM",
                    ProjectUid       = projectUid,
                    CustomerUid      = "CutFillAcceptanceTest",
                    ImportedFileType = ImportedFileType.DesignSurface,
                    ImportedFileUid  = "dd64fe2e-6f27-4a78-82a3-0c0e8a5e84ff",
                    LegacyFileId     = 111,
                    IsActivated      = true
                }
            };

            var fileImportProxy = new Mock <IFileImportProxy>();

            fileImportProxy.As <IFileImportProxy>().Setup(ps => ps.GetFiles(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(fileData);

            var geofenceRepo = new Mock <GeofenceRepository>(configStore, logger);
            var filterToTest = new FilterDescriptorSingleResult(AutoMapperUtility.Automapper.Map <FilterDescriptor>(filter));

            var request = FilterRequestFull.Create(
                null,
                custUid,
                false,
                userUid,
                new ProjectData {
                ProjectUID = projectUid
            },
                new FilterRequest {
                FilterUid = null, Name = name, FilterJson = filterJson, FilterType = FilterType.Persistent
            });

            var executor = RequestExecutorContainer.Build <UpsertFilterExecutor>(configStore, logger, serviceExceptionHandler,
                                                                                 filterRepo.Object, geofenceRepo.Object,
                                                                                 productivity3dV2ProxyNotification: productivity3dV2ProxyNotification.Object, productivity3dV2ProxyCompaction: productivity3dV2ProxyCompaction.Object,
                                                                                 fileImportProxy: fileImportProxy.Object);

            var result = await executor.ProcessAsync(request) as FilterDescriptorSingleResult;

            Assert.NotNull(result);
            Assert.Equal(filterToTest.FilterDescriptor.Name, result.FilterDescriptor.Name);
            Assert.Equal(filterToTest.FilterDescriptor.FilterType, result.FilterDescriptor.FilterType);

            var resultFilter = JsonConvert.DeserializeObject <Abstractions.Models.Filter>(result.FilterDescriptor.FilterJson);

            Assert.Equal("Large Sites Road.svl", resultFilter.AlignmentFileName);
            Assert.Equal("Large Sites Road - Trimble Road.TTM", resultFilter.DesignFileName);
        }