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