public void UpdateProjectBoundaryTest() { var customerUid = new Guid("560c2a6c-6b7e-48d8-b1a5-e4009e2d4c97"); //var accountTrn = "trn::profilex:us-west-2:account:{customerUid}"; string projectUid = "560c2a6c-6b7e-48d8-b1a5-e4009e2d4c97"; string projectTrn = TRNHelper.MakeTRN(projectUid, TRNHelper.TRN_PROJECT); var projectBoundary = new ProjectBoundary() { type = "Polygon", coordinates = new List <List <double[]> > { new List <double[]> { new [] { 151.3, 1.2 }, new[] { 151.4, 1.2 }, new[] { 151.4, 1.3 }, new[] { 151.4, 1.4 }, new[] { 151.3, 1.2 } } } }; string route = $"/projects/{projectTrn}/boundary"; var expectedUrl = $"{baseUrl}{route}"; mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint( It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl)); MockUtilities.TestRequestSendsCorrectJson("Update a projects boundary", mockWebRequest, null, expectedUrl, HttpMethod.Post, projectBoundary, async() => { var client = ServiceProvider.GetRequiredService <ICwsProjectClient>(); await client.UpdateProjectBoundary(new Guid(projectUid), projectBoundary); return(true); }); }
public async Task ProjectChangedExecutor_MetadataChanged_Project(NotificationType notificationType) { var projectUid = Guid.NewGuid(); var projectTrn = TRNHelper.MakeTRN(projectUid, TRNHelper.TRN_ACCOUNT); var notificationHubClient = new Mock <INotificationHubClient>(); notificationHubClient.Setup(n => n.Notify(It.IsAny <Notification>())).Returns(Task.CompletedTask); var request = new ProjectChangeNotificationDto { AccountTrn = null, ProjectTrn = projectTrn, NotificationType = notificationType, CoordinateSystemFileName = null, CoordinateSystemFileContent = null }; var executor = RequestExecutorContainerFactory.Build <ProjectChangedExecutor> (_loggerFactory, _configStore, ServiceExceptionHandler, _customerUid.ToString(), _userUid.ToString(), null, _customHeaders, notificationHubClient: notificationHubClient.Object); var result = await executor.ProcessAsync(request); Assert.Equal(ContractExecutionStatesEnum.ExecutedSuccessfully, result.Code); Assert.Equal(ContractExecutionResult.DefaultMessage, result.Message); }
public void GetProjectConfiguration() { var projectUid = new Guid("560c2a6c-6b7e-48d8-b1a5-e4009e2d4c97"); var projectConfigurationModel = new ProjectConfigurationModel { FileName = "MyTestFilename.dc", FileDownloadLink = "http//whatever", FileType = ProjectConfigurationFileType.CALIBRATION.ToString(), CreatedAt = DateTime.UtcNow.ToString(), UpdatedAt = DateTime.UtcNow.ToString(), Size = 66 }; string route = $"/projects/{TRNHelper.MakeTRN(projectUid)}/configuration/CALIBRATION"; var expectedUrl = $"{baseUrl}{route}"; mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint( It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl)); MockUtilities.TestRequestSendsCorrectJson("Get a project calibration file", mockWebRequest, null, expectedUrl, HttpMethod.Get, projectConfigurationModel, async() => { var client = ServiceProvider.GetRequiredService <ICwsProfileSettingsClient>(); var result = await client.GetProjectConfiguration(projectUid, ProjectConfigurationFileType.CALIBRATION); Assert.NotNull(result); Assert.Equal(projectConfigurationModel.FileName, result.FileName); return(true); }); }
public void ValidateMapToCreate() { var boundaryString = "POLYGON((172.6 -43.5,172.6 -43.5003,172.603 -43.5003,172.603 -43.5,172.6 -43.5))"; var csContent = "MDBUTVNDIFYxMC03MCAgICAgICAwICAgMDkvMDEvMjAyMCAxNToxOTExMzExMQ0KMTBUTVVudGl0bGVkIEpvYiAgICAxMjIyMTINCjc4VE0xMQ0KRDVUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KRDhUTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo2NFRNMzM2LjIwNjU1NTM3MTAwMDAtMTE1LjAyNjI2NzgxODAwMC4wMDAwMDAwMDAwMDAwMDExMTkuNzQ4NDM3ODk2OTAyMTkzLjk3OTQ3Njc1OTAwMC4wMDAwMDAwMDAwMDAwMDEuMDAwMDg2NzIzMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KNjVUTTYzNzgxMzcuMDAwMDAxMDAyOTguMjU3MjIyOTMyODkwDQo0OVRNMzYzNzgxMzcuMDAwMDAwMDAyOTguMjU3MjIzNTYzMDAwMC4wMDAwMDAwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAwLjAwMDAwMDAwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAwLjAwMDAwMDAwMDAwMDAwMC4wMDAwMDAwMDAwMDAwMA0KNTBUTTExOTguNzk3MzM5MDkwNzAyNDkxLjQ4Mjg5MTU0MTgwMC4wMDI2NjA5MDkzMjE4MDAuMDAwMTM3MTYwMjc0MzAwLjAwMTkwNzk5NzAwMDAwMS4wMDAwMTMwMTMwMDAwMA0KQzhUTTRTQ1M5MDAgTG9jYWxpemF0aW9uICAgICAgICAgICAgIFNDUzkwMCBSZWNvcmQgICAgICAgICAgICAgICAgICAgRGF0dW0gZnJvbSBEYXRhIENvbGxlY3RvciAgICAgICANCg=="; var csContentBase64 = "TURCVVRWTkRJRll4TUMwM01DQWdJQ0FnSUNBd0lDQWdNRGt2TURFdk1qQXlNQ0F4TlRveE9URXhNekV4TVEwS01UQlVUVlZ1ZEdsMGJHVmtJRXB2WWlBZ0lDQXhNakl5TVRJTkNqYzRWRTB4TVEwS1JEVlVUU0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBMEtSRGhVVFNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdEUW8yTkZSTk16TTJMakl3TmpVMU5UTTNNVEF3TURBdE1URTFMakF5TmpJMk56Z3hPREF3TUM0d01EQXdNREF3TURBd01EQXdNREV4TVRrdU56UTRORE0zT0RrMk9UQXlNVGt6TGprM09UUTNOamMxT1RBd01DNHdNREF3TURBd01EQXdNREF3TURFdU1EQXdNRGcyTnpJek1EQXdNREFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBMEtOalZVVFRZek56Z3hNemN1TURBd01EQXhNREF5T1RndU1qVTNNakl5T1RNeU9Ea3dEUW8wT1ZSTk16WXpOemd4TXpjdU1EQXdNREF3TURBeU9UZ3VNalUzTWpJek5UWXpNREF3TUM0d01EQXdNREF3TURBd01EQXdNREF1TURBd01EQXdNREF3TURBd01EQXdMakF3TURBd01EQXdNREF3TURBd01DNHdNREF3TURBd01EQXdNREF3TURBdU1EQXdNREF3TURBd01EQXdNREF3TGpBd01EQXdNREF3TURBd01EQXdNQzR3TURBd01EQXdNREF3TURBd01BMEtOVEJVVFRFeE9UZ3VOemszTXpNNU1Ea3dOekF5TkRreExqUTRNamc1TVRVME1UZ3dNQzR3TURJMk5qQTVNRGt6TWpFNE1EQXVNREF3TVRNM01UWXdNamMwTXpBd0xqQXdNVGt3TnprNU56QXdNREF3TVM0d01EQXdNVE13TVRNd01EQXdNQTBLUXpoVVRUUlRRMU01TURBZ1RHOWpZV3hwZW1GMGFXOXVJQ0FnSUNBZ0lDQWdJQ0FnSUZORFV6a3dNQ0JTWldOdmNtUWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdSR0YwZFcwZ1puSnZiU0JFWVhSaElFTnZiR3hsWTNSdmNpQWdJQ0FnSUNBTkNnPT0="; var projectValidation = new ProjectValidation { CustomerUid = new Guid("372854b8-64f8-4fd0-885f-d663503ffbca"), ProjectType = CwsProjectType.AcceptsTagFiles, ProjectName = "Beside Dimensions JeanieTest1", ProjectBoundaryWKT = boundaryString, UpdateType = ProjectUpdateType.Created, CoordinateSystemFileName = "myOne.dc", CoordinateSystemFileContent = System.Text.Encoding.ASCII.GetBytes(csContent) }; var createProjectRequestModel = AutoMapperUtility.Automapper.Map <CreateProjectRequestModel>(projectValidation); Assert.Equal(TRNHelper.MakeTRN(projectValidation.CustomerUid, TRNHelper.TRN_ACCOUNT), createProjectRequestModel.TRN); Assert.Equal(projectValidation.CustomerUid.ToString(), createProjectRequestModel.AccountId); Assert.Equal(projectValidation.ProjectName, createProjectRequestModel.ProjectName); Assert.Equal(projectValidation.ProjectType, createProjectRequestModel.ProjectType); Assert.Null(createProjectRequestModel.Timezone); Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).type, createProjectRequestModel.Boundary.type); Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).coordinates.Count, createProjectRequestModel.Boundary.coordinates.Count); Assert.Equal(GeometryConversion.MapProjectBoundary(projectValidation.ProjectBoundaryWKT).coordinates.ToArray(), createProjectRequestModel.Boundary.coordinates.ToArray()); Assert.Equal(projectValidation.CoordinateSystemFileName, createProjectRequestModel.CalibrationFileName); Assert.Equal(csContentBase64, createProjectRequestModel.CalibrationFileBase64Content); Assert.Equal(csContent, System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(createProjectRequestModel.CalibrationFileBase64Content))); }
public void CreateFileTest() { string projectUid = Guid.NewGuid().ToString(); var createFileRequestModel = new CreateFileRequestModel { FileName = "myFirstProject.dc" }; var createFileResponseModel = new CreateFileResponseModel { FileSpaceId = Guid.NewGuid().ToString(), UploadUrl = $"{createFileRequestModel.FileName} {projectUid}" }; string route = $"/projects/{TRNHelper.MakeTRN(projectUid)}/file"; var expectedUrl = $"{baseUrl}{route}"; mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint( It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl)); MockUtilities.TestRequestSendsCorrectJson("Create a file", mockWebRequest, null, expectedUrl, HttpMethod.Post, createFileResponseModel, async() => { var client = ServiceProvider.GetRequiredService <ICwsDesignClient>(); var result = await client.CreateFile(new Guid(projectUid), createFileRequestModel); Assert.NotNull(result); Assert.Equal(createFileResponseModel.FileSpaceId, result.FileSpaceId); return(true); }); }
public void UpdateProjectDetailsTest() { var customerUid = new Guid("560c2a6c-6b7e-48d8-b1a5-e4009e2d4c97"); //var accountTrn = "trn::profilex:us-west-2:account:{customerUid}"; string projectUid = "560c2a6c-6b7e-48d8-b1a5-e4009e2d4c97"; string projectTrn = TRNHelper.MakeTRN(projectUid, TRNHelper.TRN_PROJECT); var updateProjectDetailsRequestModel = new UpdateProjectDetailsRequestModel { projectName = "my updated project" }; string route = $"/projects/{projectTrn}"; var expectedUrl = $"{baseUrl}{route}"; mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint( It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl)); MockUtilities.TestRequestSendsCorrectJson("Update a projects details", mockWebRequest, null, expectedUrl, HttpMethod.Post, updateProjectDetailsRequestModel, async() => { var client = ServiceProvider.GetRequiredService <ICwsProjectClient>(); await client.UpdateProjectDetails(new Guid(projectUid), updateProjectDetailsRequestModel); return(true); }); }
public UnitTestsDIFixture() { AutoMapperUtility.AutomapperConfiguration.AssertConfigurationIsValid(); var loggerFactory = new LoggerFactory().AddSerilog(SerilogExtensions.Configure("VSS.Project.UnitTests.log")); ServiceCollection = new ServiceCollection(); ServiceCollection.AddLogging(); ServiceCollection.AddSingleton(loggerFactory); ServiceCollection .AddTransient <IProjectRepository, ProjectRepository>() .AddSingleton <IConfigurationStore, GenericConfiguration>() .AddTransient <IServiceExceptionHandler, ServiceExceptionHandler>() .AddTransient <IProductivity3dV1ProxyCoord, Productivity3dV1ProxyCoord>() .AddTransient <IProductivity3dV2ProxyNotification, Productivity3dV2ProxyNotification>() .AddTransient <IProductivity3dV2ProxyCompaction, Productivity3dV2ProxyCompaction>() .AddTransient <IErrorCodesProvider, ProjectErrorCodesProvider>(); ServiceProvider = ServiceCollection.BuildServiceProvider(); ServiceExceptionHandler = ServiceProvider.GetRequiredService <IServiceExceptionHandler>(); _log = ServiceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <T>(); _loggerFactory = ServiceProvider.GetRequiredService <ILoggerFactory>(); _customHeaders = new HeaderDictionary(); _configStore = ServiceProvider.GetRequiredService <IConfigurationStore>(); _userUid = Guid.NewGuid(); _customerUid = Guid.NewGuid(); _customerTrn = TRNHelper.MakeTRN(_customerUid, TRNHelper.TRN_ACCOUNT); _projectUid = Guid.NewGuid(); _projectTrn = TRNHelper.MakeTRN(_projectUid); _customHeaders.Add("X-VisionLink-CustomerUID", new StringValues(_customerUid.ToString())); }
public async Task GetDevice_NoAccountFound_UnhappyPath() { var cwsDevice = new DeviceResponseModel() { TRN = TRNHelper.MakeTRN(_deviceUid, TRNHelper.TRN_DEVICE), DeviceName = _deviceName, SerialNumber = _serialNumber }; var cwsDeviceClient = new Mock <ICwsDeviceClient>(); cwsDeviceClient.Setup(pr => pr.GetDeviceBySerialNumber(It.IsAny <string>(), _customHeaders)) .ReturnsAsync(cwsDevice); cwsDeviceClient.Setup(pr => pr.GetAccountsForDevice(It.IsAny <Guid>(), _customHeaders)) .ReturnsAsync((DeviceAccountListResponseModel)null); var getDeviceBySerialExecutor = RequestExecutorContainerFactory.Build <GetDeviceBySerialExecutor> (_logger, _configStore, _serviceExceptionHandler, headers: _customHeaders, cwsDeviceClient: cwsDeviceClient.Object); var response = await getDeviceBySerialExecutor.ProcessAsync(new DeviceSerial(_serialNumber)) as DeviceDescriptorSingleResult; Assert.NotNull(response); Assert.Equal(102, response.Code); Assert.Equal("Unable to locate any account for the device in cws", response.Message); Assert.NotNull(response.DeviceDescriptor); Assert.Equal(102, response.DeviceDescriptor.Code); Assert.Null(response.DeviceDescriptor.CustomerUID); Assert.Equal(_deviceUid, response.DeviceDescriptor.DeviceUID); Assert.Equal(_deviceName, response.DeviceDescriptor.DeviceName); Assert.Equal(_serialNumber, response.DeviceDescriptor.SerialNumber); Assert.Equal("UNKNOWN", response.DeviceDescriptor.RelationStatus.ToString().ToUpper()); Assert.Equal("Unknown", response.DeviceDescriptor.TccDeviceStatus.ToString()); Assert.Null(response.DeviceDescriptor.ShortRaptorAssetId); }
public Task <ProjectListResponseModel> GetProjectsForDevice(Guid deviceUid, bool includeProjectSettings = true, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetProjectsForDevice)} Mock: deviceUid {deviceUid}"); var projectListResponseModel = new ProjectListResponseModel() { Projects = new List <ProjectResponseModel>() { new ProjectResponseModel() { AccountTRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_ACCOUNT), ProjectTRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString()), ProjectName = "this is a project", Timezone = "Timbucktoo", Boundary = new ProjectBoundary() { type = "Polygon", coordinates = new List <List <double[]> > { new List <double[]> { new[] { 150.3, 1.2 }, new[] { 150.4, 1.2 }, new[] { 150.4, 1.3 }, new[] { 150.4, 1.4 }, new[] { 150.3, 1.2 } } } } } } }; log.LogDebug($"{nameof(GetProjectsForDevice)} Mock: projectListResponseModel {JsonConvert.SerializeObject(projectListResponseModel)}"); return(Task.FromResult(projectListResponseModel)); }
public CreateProjectResponseModel CreateProject([Mvc.FromBody] CreateProjectRequestModel createProjectRequestModel) { var newProjectUid = Guid.NewGuid(); var newProjectTrn = TRNHelper.MakeTRN(newProjectUid); var projectDetailResponseModel = new ProjectDetailResponseModel() { AccountTRN = TRNHelper.MakeTRN(createProjectRequestModel.AccountId, TRNHelper.TRN_ACCOUNT), ProjectTRN = newProjectTrn, ProjectName = createProjectRequestModel.ProjectName, ProjectType = CwsProjectType.AcceptsTagFiles, Status = ProjectStatus.Active, UserProjectRole = UserProjectRoleEnum.Admin, LastUpdate = DateTime.UtcNow, ProjectSettings = new ProjectSettingsModel() { ProjectTRN = newProjectTrn, Boundary = createProjectRequestModel.Boundary, Config = new List <ProjectConfigurationModel>(), } }; if (!_projects.ContainsKey(projectDetailResponseModel.AccountTRN)) { _projects.Add(projectDetailResponseModel.AccountTRN, new Dictionary <string, ProjectDetailResponseModel>()); } _projects[projectDetailResponseModel.AccountTRN].Add(newProjectTrn, projectDetailResponseModel); var createProjectResponseModel = new CreateProjectResponseModel() { TRN = newProjectTrn }; Logger.LogInformation($"{nameof(CreateProject)}: createProjectRequestModel {JsonConvert.SerializeObject(createProjectRequestModel)} createProjectResponseModel {JsonConvert.SerializeObject(createProjectResponseModel)}"); return(createProjectResponseModel); }
public Task <ProjectDetailResponseModel> GetMyProject(Guid projectUid, Guid?userUid = null, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetMyProject)} Mock: projectUid {projectUid} userUid {userUid}"); var customerUid = customHeaders?[HeaderConstants.X_VISION_LINK_CUSTOMER_UID]; var customerTrn = TRNHelper.MakeTRN((string.IsNullOrEmpty(customerUid) ? new Guid() : new Guid(customerUid)), TRNHelper.TRN_ACCOUNT); var projectTrn = TRNHelper.MakeTRN(projectUid); var projectDetailResponseModel = new ProjectDetailResponseModel() { AccountTRN = customerTrn, ProjectTRN = projectTrn, ProjectType = CwsProjectType.AcceptsTagFiles, Status = ProjectStatus.Active, UserProjectRole = UserProjectRoleEnum.Admin, LastUpdate = DateTime.UtcNow.AddDays(-1), ProjectSettings = new ProjectSettingsModel() { ProjectTRN = projectTrn, TimeZone = "Pacific/Auckland", Boundary = new ProjectBoundary() { type = "Polygon", coordinates = new List <List <double[]> > { new List <double[]> { new[] { 150.3, 1.2 }, new[] { 150.4, 1.2 }, new[] { 150.4, 1.3 }, new[] { 150.4, 1.4 }, new[] { 150.3, 1.2 } } } }, Config = new List <ProjectConfigurationModel>() } }; log.LogDebug($"{nameof(GetMyProject)} Mock: projectDetailResponseModel {JsonConvert.SerializeObject(projectDetailResponseModel)}"); return(Task.FromResult(projectDetailResponseModel)); }
public ProjectListResponseModel GetProjectsForDevice(string deviceTrn) { var projectListResponseModel = new ProjectListResponseModel() { Projects = new List <ProjectResponseModel> { new ProjectResponseModel { AccountTRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_ACCOUNT), ProjectTRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_PROJECT), ProjectName = "this is a project", Timezone = "Timbucktoo", Boundary = new ProjectBoundary() { type = "Polygon", coordinates = new List <List <double[]> > { new List <double[]> { new double[] { 180, 90 }, new double[] { 180, 90 } } } } } } }; Logger.LogInformation($"{nameof(GetProjectsForDevice)}: deviceTrn {deviceTrn}. projectListResponseModel {JsonConvert.SerializeObject(projectListResponseModel)}"); return(projectListResponseModel); }
public List <DeviceLKSResponseModel> GetDevicesLKSForProject( [FromQuery] string projectId, [FromQuery] DateTime?lastReported) { Logger.LogInformation($"{nameof(GetDevicesLKSForProject)} projectId {projectId} lastReported {lastReported}"); var result = new List <DeviceLKSResponseModel>(); if (TRNHelper.ExtractGuid(projectId) == new Guid(ConstantsUtil.DIMENSIONS_PROJECT_UID)) { result.Add(new DeviceLKSResponseModel() { DeviceTrn = TRNHelper.MakeTRN(ConstantsUtil.DIMENSIONS_SERIAL_DEVICEUID, TRNHelper.TRN_DEVICE), AccountTrn = TRNHelper.MakeTRN(ConstantsUtil.DIMENSIONS_CUSTOMER_UID, TRNHelper.TRN_ACCOUNT), AssetSerialNumber = ConstantsUtil.DIMENSIONS_SERIAL, Latitude = 89.9, Longitude = 34.6, AssetType = "Grader", DeviceName = $"{CWSDeviceTypeEnum.EC520}-{ConstantsUtil.DIMENSIONS_SERIAL}", ProjectName = "DimensionsProject", LastReportedUtc = DateTime.UtcNow.AddDays(-1) }); } return(result); }
public void MakeTRNFromGuidTest(string guidString, string TRNtype, string expectedUserTRN) { var guid = new Guid(guidString); var convertedUserTRN = TRNHelper.MakeTRN(guid, TRNtype); Assert.Equal(expectedUserTRN, convertedUserTRN); }
/// <summary> /// Update a project with core detail only (not calibration file and boundary) /// </summary> public async Task UpdateProjectDetails(Guid projectUid, UpdateProjectDetailsRequestModel updateProjectDetailsRequest, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(UpdateProjectDetails)}: projectUid {projectUid} updateProjectDetailsRequest {JsonConvert.SerializeObject(updateProjectDetailsRequest)}"); var projectTrn = TRNHelper.MakeTRN(projectUid); await UpdateData($"/projects/{projectTrn}", updateProjectDetailsRequest, null, customHeaders); }
/// <summary> /// Only 1 of each project calibrationtype is allowed, so this will delete that type /// </summary> public Task DeleteProjectConfiguration(Guid projectUid, ProjectConfigurationFileType projectConfigurationFileType, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(DeleteProjectConfiguration)}: projectUid {projectUid} projectConfigurationFileType {projectConfigurationFileType}"); var projectTrn = TRNHelper.MakeTRN(projectUid); return(DeleteData($"/projects/{projectTrn}/configuration/{projectConfigurationFileType.ToString().ToUpper()}", null, customHeaders)); }
/// <summary> /// Update a project boundary /// </summary> public async Task UpdateProjectBoundary(Guid projectUid, ProjectBoundary projectBoundary, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(UpdateProjectBoundary)}: projectUid {projectUid} projectBoundary {JsonConvert.SerializeObject(projectBoundary)}"); var projectTrn = TRNHelper.MakeTRN(projectUid); await UpdateData($"/projects/{projectTrn}/boundary", projectBoundary, null, customHeaders); }
/// <summary> /// Gets projects using a user token. /// The user must have access to this account. /// Cache to include userUid as different users have access to a different project set /// This ONLY works with a user token. /// </summary> private async Task <ProjectSummaryListResponseModel> GetProjectsForMyCustomer(Guid customerUid, Guid?userUid = null, bool includeSettings = true, CwsProjectType?type = null, ProjectStatus?status = null, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetProjectsForMyCustomer)}: customerUid {customerUid} userUid {userUid}"); var accountTrn = TRNHelper.MakeTRN(customerUid, TRNHelper.TRN_ACCOUNT); ProjectSummaryListResponseModel projectSummaryListResponseModel; try { // We need settings to get the boundary var queryParams = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("includeSettings", includeSettings.ToString()), }; // Do we need to filter for a specific type? if (type != null) { queryParams.Add(new KeyValuePair <string, string>("projectType", ((int)type.Value).ToString())); } if (status != null) { var statusString = status.Value.GetEnumMemberValue(); // CWS Expects the EnumMember value (e.g ARCHIVED instead of 1) queryParams.Add(new KeyValuePair <string, string>("status", statusString)); } projectSummaryListResponseModel = await GetAllPagedData <ProjectSummaryListResponseModel, ProjectSummaryResponseModel>($"/accounts/{accountTrn}/projects", customerUid, userUid, queryParams, customHeaders); // CWS doesn't return a project status - so set Archived if needed if (status == ProjectStatus.Archived) { foreach (var project in projectSummaryListResponseModel.Projects) { project.Status = status.Value; } } } catch (HttpRequestException e) { /* * todo what are possible exceptions? * // account doesn't exist * { * "status": 403, * "code": 9054, * "message": "Forbidden", * "moreInfo": "Please provide this id to support, while contacting, TraceId 5ebda82aec2fae46fed484afed7959f2", * "timestamp": 1589487658105 * } */ log.LogError(e, $"{nameof(GetProjectsForMyCustomer)}: failed to get list of projects. "); throw; } log.LogDebug($"{nameof(GetProjectsForMyCustomer)}: projectSummaryListResponseModel {JsonConvert.SerializeObject(projectSummaryListResponseModel)}"); return(projectSummaryListResponseModel); }
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."); }
/// <summary> /// gets accounts related to a device /// should only be 1 RelationStatus.Active /// this is a temp requirement until CCSSSCON-28 /// </summary> public async Task <DeviceAccountListResponseModel> GetAccountsForDevice(Guid deviceUid, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetAccountsForDevice)}: deviceUid {deviceUid}"); var deviceTrn = TRNHelper.MakeTRN(deviceUid, TRNHelper.TRN_DEVICE); var deviceAccountListResponseModel = await GetAllPagedData <DeviceAccountListResponseModel, DeviceAccountResponseModel>($"/devices/{deviceTrn}/accounts", deviceUid, null, null, customHeaders); log.LogDebug($"{nameof(GetAccountsForDevice)}: deviceAccountListResponseModel {JsonConvert.SerializeObject(deviceAccountListResponseModel)}"); return(deviceAccountListResponseModel); }
/// <summary> /// used by TFA ProjectIDExecutor, projectBoundariesAtDateExecutor /// response fields: DeviceTRN, AccountTrn, DeviceType, deviceName, Status ("ACTIVE" etal?), serialNumber /// </summary> public async Task <DeviceResponseModel> GetDeviceByDeviceUid(Guid deviceUid, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetDeviceByDeviceUid)}: deviceUid {deviceUid}"); var deviceTrn = TRNHelper.MakeTRN(deviceUid, TRNHelper.TRN_DEVICE); var deviceResponseModel = await GetData <DeviceResponseModel>($"/devices/{deviceTrn}", deviceUid, null, null, customHeaders); log.LogDebug($"{nameof(GetDeviceByDeviceUid)}: deviceResponseModel {JsonConvert.SerializeObject(deviceResponseModel)}"); return(deviceResponseModel); }
/// <summary> /// user token /// used by ProjectSvc v6 and v5TBC /// </summary> public async Task <CreateFileResponseModel> CreateFile(Guid projectUid, CreateFileRequestModel createFileRequest, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(CreateFile)}: createFileRequest {JsonConvert.SerializeObject(createFileRequest)}"); var projectTrn = TRNHelper.MakeTRN(projectUid); var createFileResponse = await PostData <CreateFileRequestModel, CreateFileResponseModel>($"/projects/{projectTrn}/file", createFileRequest, null, customHeaders); log.LogDebug($"{nameof(CreateFile)}: createFileResponse {JsonConvert.SerializeObject(createFileResponse)}"); return(createFileResponse); }
/// <summary> /// application token and user token /// used by UI to determine functionality allowed by user token /// used by TFA using an application token /// </summary> public async Task <DeviceLicenseResponseModel> GetDeviceLicenses(Guid customerUid, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetDeviceLicenses)}: customerUid {customerUid}"); var accountTrn = TRNHelper.MakeTRN(customerUid, TRNHelper.TRN_ACCOUNT); var deviceLicenseResponseModel = await GetData <DeviceLicenseResponseModel>($"/accounts/{accountTrn}/devicelicense", customerUid, null, null, customHeaders); log.LogDebug($"{nameof(GetDeviceLicenses)}: deviceLicenseResponseModel {JsonConvert.SerializeObject(deviceLicenseResponseModel)}"); return(deviceLicenseResponseModel); }
///// <summary> ///// POST https://trimble.com/connectedsiteprofilesettings/1.0/projects/{projectId}/configuration/{fileType} ///// user token ///// used by ProjectSvc v6 and v5TBC ///// </summary> public async Task <ProjectConfigurationModel> SaveProjectConfiguration(Guid projectUid, ProjectConfigurationFileType projectConfigurationFileType, ProjectConfigurationFileRequestModel projectConfigurationFileRequest, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(SaveProjectConfiguration)}: projectUid {projectUid} projectConfigurationFileType {projectConfigurationFileType} projectConfigurationFileRequest {JsonConvert.SerializeObject(projectConfigurationFileRequest)}"); var projectTrn = TRNHelper.MakeTRN(projectUid); var projectConfigurationResponse = await PostData <ProjectConfigurationFileRequestModel, ProjectConfigurationModel>($"/projects/{projectTrn}/configuration/{projectConfigurationFileType.ToString().ToUpper()}", projectConfigurationFileRequest, null, customHeaders); log.LogDebug($"{nameof(SaveProjectConfiguration)}: projectConfigurationResponse {JsonConvert.SerializeObject(projectConfigurationResponse)}"); return(projectConfigurationResponse); }
///// <summary> ///// GET https://trimble.com/connectedsiteprofilesettings/1.0/projects/{projectId}/configuration/{fileType} ////// Only 1 of each project calibrationtype is allowed ///// user token ///// used by ProjectSvc v6 and v5TBC ///// </summary> public async Task <ProjectConfigurationModel> GetProjectConfiguration(Guid projectUid, ProjectConfigurationFileType projectConfigurationFileType, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetProjectConfiguration)}: projectUid {projectUid} projectConfigurationFileType {projectConfigurationFileType}"); var projectTrn = TRNHelper.MakeTRN(projectUid); var projectConfigurationModel = await GetData <ProjectConfigurationModel>($"/projects/{projectTrn}/configuration/{projectConfigurationFileType.ToString().ToUpper()}", null, null, null, customHeaders); log.LogDebug($"{nameof(GetProjectConfiguration)}: projectConfigurationModel {JsonConvert.SerializeObject(projectConfigurationModel)}"); return(projectConfigurationModel); }
///// <summary> ///// GET https://trimble.com/connectedsiteprofilesettings/1.0/projects/{projectId}/configuration ////// Only 1 of each project calibrationtype is allowed ///// user token ///// used by ProjectSvc v6 and v5TBC ///// </summary> public async Task <ProjectConfigurationFileListResponseModel> GetProjectConfigurations(Guid projectUid, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(GetProjectConfigurations)}: projectUid {projectUid}"); var projectTrn = TRNHelper.MakeTRN(projectUid); var projectConfigurationFileListResponse = await GetData <ProjectConfigurationFileListResponseModel>($"/projects/{projectTrn}/configuration", null, null, null, customHeaders); log.LogDebug($"{nameof(GetProjectConfigurations)}: projectConfigurationFileListResponse {JsonConvert.SerializeObject(projectConfigurationFileListResponse)}"); return(projectConfigurationFileListResponse); }
public void GetMyProject() { var customerUid = Guid.NewGuid(); var userUid = Guid.NewGuid(); var projectUid = Guid.NewGuid(); var projectDetailResponseModel = new ProjectDetailResponseModel() { AccountTRN = TRNHelper.MakeTRN(customerUid, TRNHelper.TRN_ACCOUNT), ProjectTRN = TRNHelper.MakeTRN(projectUid), ProjectSettings = new ProjectSettingsModel() { ProjectTRN = TRNHelper.MakeTRN(projectUid), TimeZone = "Pacific/Auckland", Boundary = new ProjectBoundary() { type = "Polygon", coordinates = new List <List <double[]> > { new List <double[]> { new double[] { 150.3, 1.2 }, new double[] { 150.4, 1.2 }, new double[] { 150.4, 1.3 }, new double[] { 150.4, 1.4 }, new double[] { 150.3, 1.2 } } } }, Config = new List <ProjectConfigurationModel>() { new ProjectConfigurationModel() { FileType = ProjectConfigurationFileType.CALIBRATION.ToString() } } } }; var route = $"/projects/{TRNHelper.MakeTRN(projectUid)}"; var expectedUrl = $"{baseUrl}{route}"; mockServiceResolution.Setup(m => m.ResolveRemoteServiceEndpoint( It.IsAny <string>(), It.IsAny <ApiType>(), It.IsAny <ApiVersion>(), route, It.IsAny <IList <KeyValuePair <string, string> > >())).Returns(Task.FromResult(expectedUrl)); MockUtilities.TestRequestSendsCorrectJson("Get my project", mockWebRequest, null, expectedUrl, HttpMethod.Get, projectDetailResponseModel, async() => { var client = ServiceProvider.GetRequiredService <ICwsProjectClient>(); var result = await client.GetMyProject(projectUid, userUid); Assert.NotNull(result); Assert.Equal(customerUid.ToString(), result.AccountId); Assert.Equal(projectUid.ToString(), result.ProjectId); Assert.Equal(projectUid.ToString(), result.ProjectSettings.ProjectId); Assert.Equal("Polygon", result.ProjectSettings.Boundary.type); Assert.Equal(ProjectConfigurationFileType.CALIBRATION.ToString(), result.ProjectSettings.Config[0].FileType); return(true); }); }
public Task <CreateProjectResponseModel> CreateProject(CreateProjectRequestModel createProjectRequest, IHeaderDictionary customHeaders = null) { log.LogDebug($"{nameof(CreateProject)} Mock: createProjectRequest {JsonConvert.SerializeObject(createProjectRequest)}"); var createProjectResponseModel = new CreateProjectResponseModel { TRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_PROJECT) }; log.LogDebug($"{nameof(CreateProject)} Mock: createProjectResponseModel {JsonConvert.SerializeObject(createProjectResponseModel)}"); return(Task.FromResult(createProjectResponseModel)); }
public DeviceResponseModel GetDeviceBySerialNumber([FromQuery] string serialNumber) { var deviceResponseModel = new DeviceResponseModel() { TRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_DEVICE), DeviceType = "EC520", DeviceName = "this is a device", SerialNumber = serialNumber }; Logger.LogInformation($"{nameof(GetDeviceBySerialNumber)}: serialNumber {serialNumber}. deviceResponseModel {JsonConvert.SerializeObject(deviceResponseModel)}"); return(deviceResponseModel); }
public async Task GetDevice_TooManyActiveAccounts_UnhappyPath() { var cwsDevice = new DeviceResponseModel() { TRN = TRNHelper.MakeTRN(_deviceUid, TRNHelper.TRN_DEVICE), DeviceName = _deviceName, SerialNumber = _serialNumber }; var cwsDeviceClient = new Mock <ICwsDeviceClient>(); cwsDeviceClient.Setup(pr => pr.GetDeviceBySerialNumber(It.IsAny <string>(), _customHeaders)) .ReturnsAsync(cwsDevice); var cwsDeviceAccountList = new DeviceAccountListResponseModel() { Accounts = new List <DeviceAccountResponseModel>() { new DeviceAccountResponseModel() { TRN = TRNHelper.MakeTRN(_customerUid, TRNHelper.TRN_ACCOUNT), AccountName = "the customer name", RelationStatus = _relationStatus, TccDeviceStatus = _tccDeviceStatus }, new DeviceAccountResponseModel() { TRN = TRNHelper.MakeTRN(Guid.NewGuid().ToString(), TRNHelper.TRN_ACCOUNT), AccountName = "the other customer name", RelationStatus = _relationStatus, TccDeviceStatus = _tccDeviceStatus } } }; cwsDeviceClient.Setup(pr => pr.GetAccountsForDevice(It.IsAny <Guid>(), _customHeaders)) .ReturnsAsync(cwsDeviceAccountList); var getDeviceBySerialExecutor = RequestExecutorContainerFactory.Build <GetDeviceBySerialExecutor> (_logger, _configStore, _serviceExceptionHandler, headers: _customHeaders, cwsDeviceClient: cwsDeviceClient.Object); var response = await getDeviceBySerialExecutor.ProcessAsync(new DeviceSerial(_serialNumber)) as DeviceDescriptorSingleResult; Assert.NotNull(response); Assert.Equal(103, response.Code); Assert.Equal("There is >1 active account for the device in cws", response.Message); Assert.NotNull(response.DeviceDescriptor); Assert.Equal(103, response.DeviceDescriptor.Code); Assert.Null(response.DeviceDescriptor.CustomerUID); Assert.Equal(_deviceUid, response.DeviceDescriptor.DeviceUID); Assert.Equal(_deviceName, response.DeviceDescriptor.DeviceName); Assert.Equal(_serialNumber, response.DeviceDescriptor.SerialNumber); Assert.Equal("UNKNOWN", response.DeviceDescriptor.RelationStatus.ToString().ToUpper()); Assert.Equal("Unknown", response.DeviceDescriptor.TccDeviceStatus.ToString()); Assert.Null(response.DeviceDescriptor.ShortRaptorAssetId); }