Exemple #1
0
        public async Task TRexExecutor_Manual_Happy_Project_NoDevice_UsingNE()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var northing = 67.8;
            var easting  = 21.3;
            var getProjectUidsRequest = new GetProjectUidsRequest(projectUid, "cb460Serial", 0, 0, northing, easting);
            // expected convertNEtoLL result
            var points = new[] { new TwoDConversionCoordinate(insideLong.LonDegreesToRadians(), insideLat.LatDegreesToRadians()) };
            var coordinateConversionResult = new CoordinateConversionResult(points);

            var projectForProjectUid = projectOfInterest;

            var platformSerialDevice         = (DeviceData)null;
            var projectListForplatformSerial = (ProjectDataResult)null;

            var expectedResult = new GetProjectUidsResult(projectUid, string.Empty, string.Empty);

            await ExecuteManual
                (getProjectUidsRequest, projectForProjectUid,
                platformSerialDevice, projectListForplatformSerial,
                coordinateConversionResult,
                expectedResult, expectedCode : 0, expectedMessage : "success"
                );
        }
Exemple #2
0
        public async Task TRexExecutor_Manual_Happy_Project_NoValidPosition_Calculated()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var northing = 67.8;
            var easting  = 21.3;
            var getProjectUidsRequest      = new GetProjectUidsRequest(projectUid, "cb450serial", 0, 0, northing, easting);
            var coordinateConversionResult = new CoordinateConversionResult(new TwoDConversionCoordinate[0]);

            var projectForProjectUid = projectOfInterest;

            var platformSerialDevice         = (DeviceData)null;
            var projectListForPlatformSerial = (ProjectDataResult)null;

            var expectedResult = new GetProjectUidsResult(string.Empty, string.Empty, string.Empty);

            await ExecuteManual
                (getProjectUidsRequest, projectForProjectUid,
                platformSerialDevice, projectListForPlatformSerial,
                coordinateConversionResult,
                expectedResult, expectedCode : 3018, expectedMessage : "Manual Import: Unable to determine lat/long from northing/easting position"
                );
        }
Exemple #3
0
        private async Task ExecuteManual(GetProjectUidsRequest request, ProjectData projectForProjectUid,
                                         DeviceData platformDevice, ProjectDataResult projectListForPlatform,
                                         CoordinateConversionResult coordinateConversionResult,
                                         GetProjectUidsResult expectedResult, int expectedCode, string expectedMessage
                                         )
        {
            projectProxy.Setup(p => p.GetProject(request.ProjectUid, It.IsAny <HeaderDictionary>())).ReturnsAsync(projectForProjectUid);

            deviceProxy.Setup(d => d.GetDevice(request.PlatformSerial, It.IsAny <HeaderDictionary>())).ReturnsAsync(platformDevice);
            if (platformDevice != null)
            {
                deviceProxy.Setup(d => d.GetProjectsForDevice(platformDevice.DeviceUID, It.IsAny <HeaderDictionary>())).ReturnsAsync(projectListForPlatform);
            }

            if (coordinateConversionResult != null)
            {
                tRexCompactionDataProxy.Setup(x => x.SendDataPostRequest <CoordinateConversionResult, CoordinateConversionRequest>(
                                                  It.IsAny <CoordinateConversionRequest>(),
                                                  It.IsAny <string>(),
                                                  It.IsAny <HeaderDictionary>(), false))
                .ReturnsAsync(coordinateConversionResult);
            }

            var executor = RequestExecutorContainer.Build <ProjectUidsExecutor>(
                _loggerFactory.CreateLogger <ProjectUidsExecutorManualTests>(), ConfigStore, authorization.Object,
                projectProxy.Object, deviceProxy.Object, tRexCompactionDataProxy.Object, requestCustomHeaders);
            var result = await executor.ProcessAsync(request) as GetProjectUidsResult;

            ValidateResult(result, expectedResult, expectedCode, expectedMessage);
        }
Exemple #4
0
        public async Task TRexExecutor_Manual_Happy_Project_NoDevice_UsingLL()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var getProjectUidsRequest = new GetProjectUidsRequest(projectUid, "CB450", insideLat, insideLong);
            var projectForProjectUid  = projectOfInterest;

            var platformSerialDevice         = (DeviceData)null;
            var projectListForPlatformSerial = (ProjectDataResult)null;

            var expectedResult = new GetProjectUidsResult(projectUid, string.Empty, string.Empty);

            await ExecuteManual
                (getProjectUidsRequest, projectForProjectUid,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 0, expectedMessage : "success"
                );
        }
Exemple #5
0
 private void ValidateResult(GetProjectUidsResult actualResult, GetProjectUidsResult expectedResult)
 {
     Assert.NotNull(actualResult);
     Assert.Equal(expectedResult.ProjectUid, actualResult.ProjectUid);
     Assert.Equal(expectedResult.DeviceUid, actualResult.DeviceUid);
     Assert.Equal(expectedResult.CustomerUid, actualResult.CustomerUid);
     Assert.Equal(expectedResult.Code, actualResult.Code);
     Assert.Equal(expectedResult.Message, actualResult.Message);
 }
Exemple #6
0
 private void ValidateResult(GetProjectUidsResult actualResult, GetProjectUidsResult expectedResult,
                             int resultCode, string resultMessage)
 {
     Assert.IsNotNull(actualResult, "executor returned nothing");
     Assert.AreEqual(expectedResult.ProjectUid, actualResult.ProjectUid, "executor returned incorrect ProjectUid");
     Assert.AreEqual(expectedResult.DeviceUid, actualResult.DeviceUid, "executor returned incorrect DeviceUid");
     Assert.AreEqual(expectedResult.CustomerUid, actualResult.CustomerUid, "executor returned incorrect CustomerUid");
     Assert.AreEqual(resultCode, actualResult.Code, "executor returned incorrect result code");
     Assert.AreEqual(resultMessage, actualResult.Message, "executor returned incorrect result message");
 }
Exemple #7
0
        private async Task <GetProjectUidsResult> HandleManualImport(GetProjectUidsRequest request, DeviceData device)
        {
            // no checking of device or project states or WM licensing at this stage
            var deviceUid   = device == null ? string.Empty : device.DeviceUID;
            var customerUid = device == null ? string.Empty : device.CustomerUID;
            var project     = await dataRepository.GetProject(request.ProjectUid);

            log.LogDebug($"{nameof(HandleManualImport)}: Loaded project? {(project == null ? "project not found" : JsonConvert.SerializeObject(project))}");

            if (project == null)
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: deviceUid, customerUid: customerUid, uniqueCode: 38));
            }

            if (!project.ProjectType.HasFlag(CwsProjectType.AcceptsTagFiles))
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: deviceUid, customerUid: customerUid, uniqueCode: 53));
            }

            // New requirement for WorksOS.
            if (project.IsArchived)
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: deviceUid, customerUid: customerUid, uniqueCode: 43));
            }

            // we need to retain ability to identify specific error codes 38, 43, 41, 53
            if (!request.HasLatLong && request.HasNE && request.Northing != null && request.Easting != null)
            {
                var convertedLL = await dataRepository.ConvertNEtoLL(request.ProjectUid, request.Northing.Value, request.Easting.Value);

                if (convertedLL == null)
                {
                    return(GetProjectUidsResult.FormatResult(deviceUid: deviceUid, customerUid: customerUid, uniqueCode: 18));
                }
                request.Longitude = convertedLL.ConversionCoordinates[0].X;
                request.Latitude  = convertedLL.ConversionCoordinates[0].Y;
            }

            var intersects = PolygonUtils.PointInPolygon(project.ProjectGeofenceWKT, request.Latitude, request.Longitude);

            log.LogDebug($"{nameof(HandleManualImport)}: la/long is with project?: {intersects}");

            if (!intersects)
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: deviceUid, customerUid: customerUid, uniqueCode: 41));
            }

            return(GetProjectUidsResult.FormatResult(project.ProjectUID, deviceUid, customerUid));
        }
Exemple #8
0
        public async Task NoProjectProvided_Auto_Happy_DeviceAndSingleProjectFound()
        {
            var platformSerial = ExecutorTestFixture.dimensionsSerial;
            var latitude       = 15.0;
            var longitude      = 180.0;

            var request = new GetProjectUidsRequest(string.Empty, platformSerial, latitude, longitude);

            request.Validate();
            var expectedResult = new GetProjectUidsResult(ExecutorTestFixture.dimensionsProjectUid, ExecutorTestFixture.dimensionsSerialDeviceUid, ExecutorTestFixture.dimensionsCustomerUID, 0, "success");

            var result = await ExecutorTestFixture.tagFileAuthProjectV5Proxy.GetProjectUids(request);

            ValidateResult(result, expectedResult);
        }
Exemple #9
0
        public async Task NoProjectProvided_Auto_Happy_DeviceAndSingleProjectFound_UsingNE()
        {
            var platformSerial = ExecutorTestFixture.dimensionsSerial;
            var northing       = 2300.77;
            var easting        = 1650.66;

            var request = new GetProjectUidsRequest(string.Empty, platformSerial, 0, 0, northing, easting);

            request.Validate();
            var expectedResult = new GetProjectUidsResult(ExecutorTestFixture.dimensionsProjectUid, ExecutorTestFixture.dimensionsSerialDeviceUid, ExecutorTestFixture.dimensionsCustomerUID, 0, "success");

            var result = await ExecutorTestFixture.tagFileAuthProjectV5Proxy.GetProjectUids(request);

            ValidateResult(result, expectedResult);
        }
Exemple #10
0
        public async Task NoProjectProvided_Auto_Sad_DeviceNotFound()
        {
            var platformSerial = Guid.NewGuid().ToString();
            var latitude       = 89.0;
            var longitude      = 130.0;

            var request = new GetProjectUidsRequest(string.Empty, platformSerial, latitude, longitude);

            request.Validate();
            var expectedResult = new GetProjectUidsResult(string.Empty, string.Empty, string.Empty, uniqueCode: 3100, "Unable to locate device by serialNumber in cws");

            var result = await ExecutorTestFixture.tagFileAuthProjectV5Proxy.GetProjectUids(request);

            ValidateResult(result, expectedResult);
        }
Exemple #11
0
        public async Task ProjectProvided_Manual_Sad_ProjectNotFound()
        {
            var projectUid     = Guid.NewGuid().ToString();
            var platformSerial = ExecutorTestFixture.dimensionsSerial;
            var latitude       = 89.0;
            var longitude      = 130.0;

            var request = new GetProjectUidsRequest(projectUid, platformSerial, latitude, longitude);

            request.Validate();
            var expectedResult = new GetProjectUidsResult(string.Empty, ExecutorTestFixture.dimensionsSerialDeviceUid, ExecutorTestFixture.dimensionsCustomerUID, 3038, "Manual Import: Unable to find the Project requested");

            var result = await ExecutorTestFixture.tagFileAuthProjectV5Proxy.GetProjectUids(request);

            ValidateResult(result, expectedResult);
        }
Exemple #12
0
        public void Validate()
        {
            if (string.IsNullOrEmpty(PlatformSerial))
            {
                throw new ServiceException(System.Net.HttpStatusCode.BadRequest, GetProjectUidsResult.FormatResult(uniqueCode: 51));
            }

            if (Latitude < -90 || Latitude > 90)
            {
                throw new ServiceException(System.Net.HttpStatusCode.BadRequest, GetProjectUidsResult.FormatResult(uniqueCode: 21));
            }

            if (Longitude < -180 || Longitude > 180)
            {
                throw new ServiceException(System.Net.HttpStatusCode.BadRequest, GetProjectUidsResult.FormatResult(uniqueCode: 22));
            }
        }
Exemple #13
0
        public new void Validate()
        {
            base.Validate();

            // if it has a projectUid, then it's a manual import and must have either assetUid or radio/dt
            if (!string.IsNullOrEmpty(ProjectUid) && !Guid.TryParse(ProjectUid, out var _))
            {
                throw new ServiceException(System.Net.HttpStatusCode.BadRequest, GetProjectUidsResult.FormatResult(ProjectUid, uniqueCode: 36));
            }

            if (!HasLatLong && !HasNE)
            {
                throw new ServiceException(System.Net.HttpStatusCode.BadRequest, GetProjectUidsResult.FormatResult(uniqueCode: 54));
            }

            // NE can be negative and zero
        }
Exemple #14
0
        public async Task TRexExecutor_Auto_Happy_CBdevice_TooManyProjects()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };
            var projectOfInterest2 = new ProjectData
            {
                ProjectUID         = Guid.NewGuid().ToString(),
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var getProjectUidsRequest = new GetProjectUidsRequest(string.Empty, "CB450Serial", insideLat, insideLong);

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest, projectOfInterest2
                }
            };

            var expectedResult = new GetProjectUidsResult(string.Empty, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteAuto
                (getProjectUidsRequest,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 3049, expectedMessage : ContractExecutionStatesEnum.FirstNameWithOffset(49)
                );
        }
Exemple #15
0
        public async Task TRexExecutor_Auto_Happy_EC520device_WithProject_UsingNE()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var northing = 67.8;
            var easting  = 21.3;
            var getProjectUidsRequest = new GetProjectUidsRequest(string.Empty, "ec520Serial", 0.0, 0.0, northing, easting);
            // expected convertNEtoLL result
            var points = new [] { new TwoDConversionCoordinate(insideLong.LonDegreesToRadians(), insideLat.LatDegreesToRadians()) };
            var coordinateConversionResult = new CoordinateConversionResult(points);

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest
                }
            };

            var expectedResult = new GetProjectUidsResult(projectUid, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteAuto
                (getProjectUidsRequest,
                platformSerialDevice, projectListForPlatformSerial,
                coordinateConversionResult,
                expectedResult, expectedCode : 0, expectedMessage : "success"
                );
        }
Exemple #16
0
        ///  <summary>
        ///  There are 2 modes this may be called in:
        ///  a) manual a projectUid is provided
        ///     check the project exists and the location is inside the project
        ///     check if device exists, but this is optional. Return deviceUID if we have it
        ///
        ///  b) Auto/Direct Import only a deviceSerial provided.
        ///     check if device exists, obtaining the deviceUID
        ///     get list of projects for the device and check lat/long inside one-only
        ///
        ///  TFA v5 no longer has radio/deviceType -> Asset/Project map to cover special cases
        ///     Radio serial no longer supported as not available in cws
        ///  </summary>
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            if (!(item is GetProjectUidsRequest request))
            {
                throw new ServiceException(HttpStatusCode.BadRequest,
                                           GetProjectUidsResult.FormatResult(uniqueCode: TagFileAuth.Models.ContractExecutionStatesEnum.SerializationError));
            }

            var device = await dataRepository.GetDevice(request.PlatformSerial);

            var deviceStatus = (device?.Code == 0)
             ? string.Empty
             : $"Not found: deviceErrorCode: {device?.Code} message: {contractExecutionStatesEnum.FirstNameWithOffset(device?.Code ?? 0)}";

            log.LogDebug($"{nameof(ProjectUidsExecutor)}: Found by PlatformSerial?: {request.PlatformSerial} device: {JsonConvert.SerializeObject(device)} {deviceStatus}");

            return(request.IsManualImport
        ? await HandleManualImport(request, device)
        : HandleAutoImport(request, device));
        }
Exemple #17
0
        public async Task TRexExecutor_Auto_Sad_EC520device_WithProject_NoValidPosition_Calculated()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var northing = 67.8;
            var easting  = 21.3;
            var getProjectUidsRequest      = new GetProjectUidsRequest(string.Empty, "ec520Serial", 0.0, 0.0, northing, easting);
            var coordinateConversionResult = new CoordinateConversionResult(new TwoDConversionCoordinate[0]);

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest
                }
            };

            var expectedResult = new GetProjectUidsResult(string.Empty, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteAuto
                (getProjectUidsRequest,
                platformSerialDevice, projectListForPlatformSerial,
                coordinateConversionResult,
                expectedResult, expectedCode : 3044, expectedMessage : "No projects found at the location provided"
                );
        }
Exemple #18
0
        public async Task TRexExecutor_Manual_Happy_ProjectAndDevice()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var getProjectUidsRequest = new GetProjectUidsRequest(projectUid, "ec520Serial", insideLat, insideLong);
            var projectForProjectUid  = projectOfInterest;

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest
                }
            };

            var expectedResult = new GetProjectUidsResult(projectUid, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteManual
                (getProjectUidsRequest, projectForProjectUid,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 0, expectedMessage : "success"
                );
        }
Exemple #19
0
        private GetProjectUidsResult HandleAutoImport(GetProjectUidsRequest request, DeviceData device)
        {
            if (device == null || device.Code != 0 || device.DeviceUID == null)
            {
                return(GetProjectUidsResult.FormatResult(uniqueCode: device?.Code ?? 47));
            }

            var potentialProjects = dataRepository.GetIntersectingProjectsForDevice(request, device, out var errorCode);

            log.LogDebug($"{nameof(HandleAutoImport)}: potentialProjects: {JsonConvert.SerializeObject(potentialProjects)}");

            if (!potentialProjects.ProjectDescriptors.Any())
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: device.DeviceUID, customerUid: device.CustomerUID, uniqueCode: errorCode));
            }

            if (potentialProjects.ProjectDescriptors.Count > 1)
            {
                return(GetProjectUidsResult.FormatResult(deviceUid: device.DeviceUID, customerUid: device.CustomerUID, uniqueCode: 49));
            }

            return(GetProjectUidsResult.FormatResult(potentialProjects.ProjectDescriptors[0].ProjectUID, device.DeviceUID, device.CustomerUID));
        }
Exemple #20
0
        public async Task TRexExecutor_Auto_Happy_CBdevice_WithNoProject()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();

            var getProjectUidsRequest = new GetProjectUidsRequest(string.Empty, "cb460serial", 91, 181);

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult();

            var expectedResult = new GetProjectUidsResult(string.Empty, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteAuto
                (getProjectUidsRequest,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 3048, expectedMessage : ContractExecutionStatesEnum.FirstNameWithOffset(48)
                );
        }
Exemple #21
0
        public async Task Test_PlatformSerialNoValidationOk()
        {
            // This test ensures platformSerialNumber (serial/deviceid) is extracted and used in validation. Note this Tagfile has no Radio Serial id. Only Serial id.
            var projectUid = Guid.NewGuid();
            var moqRequest = new GetProjectUidsRequest(projectUid.ToString(), string.Empty, 40, 50);
            var moqResult  = new GetProjectUidsResult(projectUid.ToString(), null, null, 0, "success");

            SetupDITfa(true, moqRequest, moqResult);

            byte[] tagContent;
            using (var tagFileStream =
                       new FileStream(Path.Combine("TestData", "TAGFiles", "2415J078SW-Serial-Test.tag"), FileMode.Open, FileAccess.Read))
            {
                tagContent = new byte[tagFileStream.Length];
                tagFileStream.Read(tagContent, 0, (int)tagFileStream.Length);
            }

            var td = new TagFileDetail()
            {
                assetId        = null,
                projectId      = null, // force validation on serial id
                tagFileName    = "2415J078SW-Serial-Test.tag",
                tagFileContent = tagContent,
                tccOrgId       = "",
                IsJohnDoe      = false
            };

            var tagFilePreScan = new TAGFilePreScan();

            await using (var stream = new MemoryStream(td.tagFileContent))
                tagFilePreScan.Execute(stream);
            var result = await TagfileValidator.ValidSubmission(td, tagFilePreScan).ConfigureAwait(false);

            Assert.True(result.Code == (int)TRexTagFileResultCode.Valid, "Failed to return a Valid request");
            Assert.True(td.projectId != null, "Failed to return a Valid projectID");
            Assert.Equal("success", result.Message);
        }
Exemple #22
0
        public async Task TRexExecutor_Manual_Happy_ProjectArchived()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID  = projectUid,
                ProjectType = CwsProjectType.AcceptsTagFiles,
                CustomerUID = projectAccountUid,
                IsArchived  = true
            };

            var getProjectUidsRequest = new GetProjectUidsRequest(projectUid, "CB450", 91, 181);
            var projectForProjectUid  = projectOfInterest;

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                CustomerUID = platformSerialAccountUid, DeviceUID = platformSerialDeviceUid
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest
                }
            };

            var expectedResult = new GetProjectUidsResult(string.Empty, platformSerialDeviceUid, platformSerialAccountUid);

            await ExecuteManual
                (getProjectUidsRequest, projectForProjectUid,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 3043, expectedMessage : ContractExecutionStatesEnum.FirstNameWithOffset(43)
                );
        }
Exemple #23
0
        public async Task TRexExecutor_Auto_Sad_EC520device_DeviceNotActive()
        {
            var projectUid        = Guid.NewGuid().ToString();
            var projectAccountUid = Guid.NewGuid().ToString();
            var projectOfInterest = new ProjectData
            {
                ProjectUID         = projectUid,
                ProjectType        = CwsProjectType.AcceptsTagFiles,
                CustomerUID        = projectAccountUid,
                IsArchived         = false,
                ProjectGeofenceWKT = projectBoundary
            };

            var getProjectUidsRequest = new GetProjectUidsRequest(string.Empty, "cb450serial", 91, 181);

            var platformSerialDeviceUid  = Guid.NewGuid().ToString();
            var platformSerialAccountUid = Guid.NewGuid().ToString();
            var platformSerialDevice     = new DeviceData {
                Code = 100, Message = "Unable to locate device by serialNumber in cws"
            };
            var projectListForPlatformSerial = new ProjectDataResult()
            {
                ProjectDescriptors = new List <ProjectData>()
                {
                    projectOfInterest
                }
            };

            var expectedResult = new GetProjectUidsResult(string.Empty, string.Empty, string.Empty);

            await ExecuteAuto
                (getProjectUidsRequest,
                platformSerialDevice, projectListForPlatformSerial,
                null,
                expectedResult, expectedCode : 3100, expectedMessage : "Unable to locate device by serialNumber in cws"
                );
        }
Exemple #24
0
        public async Task Test_ValidateFailed_InvalidManualProjectType()
        {
            var projectUid = Guid.NewGuid();
            var moqRequest = new GetProjectUidsRequest(projectUid.ToString(), string.Empty, 0, 0);
            var moqResult  = new GetProjectUidsResult(string.Empty, string.Empty, string.Empty, 3044, "Manual Import: cannot import to a Civil type project");

            SetupDITfa(true, moqRequest, moqResult);

            byte[] tagContent;
            using (var tagFileStream =
                       new FileStream(Path.Combine("TestData", "TAGFiles", "TestTAGFile.tag"),
                                      FileMode.Open, FileAccess.Read))
            {
                tagContent = new byte[tagFileStream.Length];
                tagFileStream.Read(tagContent, 0, (int)tagFileStream.Length);
            }

            var td = new TagFileDetail()
            {
                assetId        = null,
                projectId      = projectUid,
                tagFileName    = "Test.tag",
                tagFileContent = tagContent,
                tccOrgId       = "",
                IsJohnDoe      = false
            };

            var tagFilePreScan = new TAGFilePreScan();

            await using (var stream = new MemoryStream(td.tagFileContent))
                tagFilePreScan.Execute(stream);
            var result = await TagfileValidator.ValidSubmission(td, tagFilePreScan).ConfigureAwait(false);

            Assert.True(result.Code == 3044, "Failed to return correct error code");
            Assert.Equal("Manual Import: cannot import to a Civil type project", result.Message);
        }
Exemple #25
0
        public async Task Test_UsingNEE_ValidateOk()
        {
            var projectUid = Guid.NewGuid();
            var moqRequest = new GetProjectUidsRequest(projectUid.ToString(), "1639J101YU", 0, 0, 5876814.5384829007, 7562822.7801738745);
            var moqResult  = new GetProjectUidsResult(projectUid.ToString(), string.Empty, string.Empty, 0, "success");

            SetupDITfa(true, moqRequest, moqResult);

            byte[] tagContent;
            using (var tagFileStream =
                       new FileStream(Path.Combine("TestData", "TAGFiles", "SeedPosition-usingNEE.tag"),
                                      FileMode.Open, FileAccess.Read))
            {
                tagContent = new byte[tagFileStream.Length];
                tagFileStream.Read(tagContent, 0, (int)tagFileStream.Length);
            }

            var td = new TagFileDetail()
            {
                assetId        = null,
                projectId      = projectUid,
                tagFileName    = "Bug ccssscon-401 NEE SeedPosition.tag",
                tagFileContent = tagContent,
                tccOrgId       = "",
                IsJohnDoe      = false
            };

            var tagFilePreScan = new TAGFilePreScan();

            await using (var stream = new MemoryStream(td.tagFileContent))
                tagFilePreScan.Execute(stream);
            var result = await TagfileValidator.ValidSubmission(td, tagFilePreScan).ConfigureAwait(false);

            Assert.True(result.Code == (int)TRexTagFileResultCode.Valid, "Failed to return a Valid request");
            Assert.Equal("success", result.Message);
        }
Exemple #26
0
        private void SetupDITfa(bool enableTfaService = true, GetProjectUidsRequest getProjectUidsRequest = null, GetProjectUidsResult getProjectUidsResult = null)
        {
            // this setup includes the DITagFileFixture. Done here to try to avoid random test failures.

            var moqStorageProxy = new Mock <IStorageProxy>();

            var moqStorageProxyFactory = new Mock <IStorageProxyFactory>();

            moqStorageProxyFactory.Setup(mk => mk.Storage(StorageMutability.Immutable)).Returns(moqStorageProxy.Object);
            moqStorageProxyFactory.Setup(mk => mk.Storage(StorageMutability.Mutable)).Returns(moqStorageProxy.Object);
            moqStorageProxyFactory.Setup(mk => mk.MutableGridStorage()).Returns(moqStorageProxy.Object);
            moqStorageProxyFactory.Setup(mk => mk.ImmutableGridStorage()).Returns(moqStorageProxy.Object);

            var moqSurveyedSurfaces = new Mock <ISurveyedSurfaces>();

            var moqSiteModels = new Mock <ISiteModels>();

            moqSiteModels.Setup(mk => mk.PrimaryMutableStorageProxy).Returns(moqStorageProxy.Object);

            DIBuilder
            .Continue()
            .Add(x => x.AddSingleton <IStorageProxyFactory>(moqStorageProxyFactory.Object))
            .Add(x => x.AddSingleton <ISiteModels>(moqSiteModels.Object))

            .Add(x => x.AddSingleton <ISurveyedSurfaces>(moqSurveyedSurfaces.Object))
            .Add(x => x.AddSingleton <IProductionEventsFactory>(new ProductionEventsFactory()))
            .Build();

            var newSiteModelGuidTfa = Guid.NewGuid();

            ISiteModel mockedSiteModel = new SiteModel(newSiteModelGuidTfa, StorageMutability.Immutable);

            mockedSiteModel.SetStorageRepresentationToSupply(StorageMutability.Mutable);

            var moqSiteModelFactory = new Mock <ISiteModelFactory>();

            moqSiteModelFactory.Setup(mk => mk.NewSiteModel(StorageMutability.Mutable)).Returns(mockedSiteModel);

            moqSiteModels.Setup(mk => mk.GetSiteModel(newSiteModelGuidTfa)).Returns(mockedSiteModel);

            // Mock the new site model creation API to return just a new site model
            moqSiteModels.Setup(mk => mk.GetSiteModel(newSiteModelGuidTfa, true)).Returns(mockedSiteModel);

            //Moq doesn't support extension methods in IConfiguration/Root.
            var moqConfiguration    = DIContext.Obtain <Mock <IConfigurationStore> >();
            var moqMinTagFileLength = 100;

            moqConfiguration.Setup(x => x.GetValueBool("ENABLE_TFA_SERVICE", It.IsAny <bool>())).Returns(enableTfaService);
            moqConfiguration.Setup(x => x.GetValueBool("ENABLE_TFA_SERVICE")).Returns(enableTfaService);
            moqConfiguration.Setup(x => x.GetValueInt("MIN_TAGFILE_LENGTH", It.IsAny <int>())).Returns(moqMinTagFileLength);
            moqConfiguration.Setup(x => x.GetValueInt("MIN_TAGFILE_LENGTH")).Returns(moqMinTagFileLength);

            var moqTfaProxy = new Mock <ITagFileAuthProjectV5Proxy>();

            if (enableTfaService && getProjectUidsRequest != null)
            {
                moqTfaProxy.Setup(x => x.GetProjectUids(It.IsAny <GetProjectUidsRequest>(), It.IsAny <IHeaderDictionary>())).ReturnsAsync(getProjectUidsResult);
            }

            DIBuilder
            .Continue()
            .Add(x => x.AddSingleton(moqConfiguration.Object))
            .Add(x => x.AddSingleton <ISiteModelFactory>(new SiteModelFactory()))
            .Add(x => x.AddSingleton(moqTfaProxy.Object))
            .Complete();
        }