/// <summary> /// Get the street DTO for operational object. /// </summary> /// <param name="networkLinkID">networkLink unique identifier Guid.</param> /// <returns>Nearest street and the intersection point.</returns> public NetworkLinkDTO GetNetworkLink(Guid networkLinkID) { using (loggingHelper.RMTraceManager.StartTrace("Business.GetNetworkLink")) { string methodName = typeof(NetworkManagerBusinessService) + "." + nameof(GetNetworkLink); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); NetworkLinkDataDTO getNetworkLink = streetNetworkDataService.GetNetworkLink(networkLinkID); NetworkLinkDTO networkLink = new NetworkLinkDTO() { Id = getNetworkLink.ID, LinkGeometry = getNetworkLink.LinkGeometry, NetworkLinkType_GUID = getNetworkLink.NetworkLinkTypeGUID, TOID = getNetworkLink.TOID, DataProvider_GUID = getNetworkLink.DataProviderGUID, StartNode_GUID = getNetworkLink.StartNodeID, EndNode_GUID = getNetworkLink.EndNodeID, LinkGradientType = getNetworkLink.LinkGradientType, LinkLength = getNetworkLink.LinkLength, LinkName = getNetworkLink.LinkName, RoadName_GUID = getNetworkLink.RoadNameGUID, StreetName_GUID = getNetworkLink.StreetNameGUID }; loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(networkLink); } }
/// <summary> /// Setup for Nunit Tests. /// </summary> protected override void OnSetup() { mockStreetNetworkDataService = CreateMock <IStreetNetworkDataService>(); mockNetworkManagerIntegrationService = CreateMock <INetworkManagerIntegrationService>(); mockOsRoadLinkDataService = CreateMock <IOSRoadLinkDataService>(); mockRoadNameDataService = CreateMock <IRoadNameDataService>(); loggingHelperMock = CreateMock <ILoggingHelper>(); dbGeometry = DbGeometry.PointFromText("POINT (488938 197021)", 27700); List <SqlGeometry> listOfnetworkIntersectionPoint = new List <SqlGeometry>(); SqlGeometry networkIntersectionPoint = new SqlGeometry(); coordinates = "POLYGON ((505058.162109375 100281.69677734375, 518986.84887695312 100281.69677734375, 518986.84887695312 114158.546875, 505058.162109375 114158.546875, 505058.162109375 100281.69677734375))"; lineGeometry = DbGeometry.LineFromText("LINESTRING (512722.70000000019 104752.6799999997, 512722.70000000019 104738)", 27700); NetworkLinkDataDTO networkLink = new NetworkLinkDataDTO() { ID = Guid.NewGuid(), LinkGeometry = lineGeometry }; List <Tuple <NetworkLinkDataDTO, SqlGeometry> > listOfTuple = new List <Tuple <NetworkLinkDataDTO, SqlGeometry> > { new Tuple <NetworkLinkDataDTO, SqlGeometry>(networkLink, networkIntersectionPoint) }; Tuple <NetworkLinkDataDTO, SqlGeometry> tuple = new Tuple <NetworkLinkDataDTO, SqlGeometry>(networkLink, networkIntersectionPoint); referenceDataCategoryDTOList = new List <ReferenceDataCategoryDTO>() { new ReferenceDataCategoryDTO() { ReferenceDatas = new List <ReferenceDataDTO>() { new ReferenceDataDTO() { ReferenceDataValue = FileType.Nyb.ToString(), ID = Guid.NewGuid(), } }, CategoryName = PostalAddressType } }; // Setup Methods. mockNetworkManagerIntegrationService.Setup(x => x.GetReferenceDataSimpleLists(It.IsAny <List <string> >())).ReturnsAsync(referenceDataCategoryDTOList); mockNetworkManagerIntegrationService.Setup(x => x.GetReferenceDataNameValuePairs(It.IsAny <List <string> >())).ReturnsAsync(referenceDataCategoryDTOList); mockStreetNetworkDataService.Setup(x => x.GetNearestNamedRoad(It.IsAny <DbGeometry>(), It.IsAny <string>(), It.IsAny <List <ReferenceDataCategoryDTO> >())).Returns(tuple); mockStreetNetworkDataService.Setup(x => x.GetNearestSegment(It.IsAny <DbGeometry>(), It.IsAny <List <ReferenceDataCategoryDTO> >())).Returns(listOfTuple); mockStreetNetworkDataService.Setup(x => x.GetNetworkLink(It.IsAny <Guid>())).Returns(networkLink); mockStreetNetworkDataService.Setup(x => x.GetCrossingNetworkLink(It.IsAny <string>(), It.IsAny <DbGeometry>())).Returns(new List <NetworkLinkDataDTO>() { networkLink }); mockStreetNetworkDataService.Setup(x => x.GetStreetNamesForBasicSearch(It.IsAny <string>(), It.IsAny <Guid>(), "Delivery Office")).ReturnsAsync(new List <StreetNameDataDTO>() { new StreetNameDataDTO() { LocalName = "abc" } }); mockStreetNetworkDataService.Setup(x => x.GetStreetNameCount(It.IsAny <string>(), It.IsAny <Guid>(), "Delivery Office")).ReturnsAsync(5); mockStreetNetworkDataService.Setup(x => x.GetStreetNamesForAdvanceSearch(It.IsAny <string>(), It.IsAny <Guid>(), "Delivery Office")).ReturnsAsync(new List <StreetNameDataDTO>() { new StreetNameDataDTO() { LocalName = "abc" } }); mockOsRoadLinkDataService.Setup(x => x.GetOSRoadLink(It.IsAny <string>())).ReturnsAsync("abc"); mockRoadNameDataService.Setup(x => x.GetRoadRoutes(It.IsAny <string>(), It.IsAny <Guid>(), It.IsAny <List <ReferenceDataCategoryDTO> >(), It.IsAny <string>())).Returns(new List <NetworkLinkDataDTO>() { networkLink }); // Setup for IRMTraceManager. var rmTraceManagerMock = new Mock <IRMTraceManager>(); rmTraceManagerMock.Setup(x => x.StartTrace(It.IsAny <string>(), It.IsAny <Guid>())); loggingHelperMock.Setup(x => x.RMTraceManager).Returns(rmTraceManagerMock.Object); SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); testCandidate = new NetworkManagerBusinessService(mockStreetNetworkDataService.Object, mockNetworkManagerIntegrationService.Object, mockOsRoadLinkDataService.Object, mockRoadNameDataService.Object, loggingHelperMock.Object); }
/// <summary> /// Setup for Nunit Tests. /// </summary> protected override void OnSetup() { mockLoggingHelper = CreateMock <ILoggingHelper>(); unit1Guid = Guid.NewGuid(); unit2Guid = Guid.NewGuid(); unit3Guid = Guid.NewGuid(); user1Id = System.Guid.NewGuid(); user2Id = System.Guid.NewGuid(); var unitBoundary = DbGeometry.PolygonFromText("POLYGON((511570.8590967182 106965.35195621933, 511570.8590967182 107474.95297542136, 512474.1409032818 107474.95297542136, 512474.1409032818 106965.35195621933, 511570.8590967182 106965.35195621933))", 27700); var location = new List <Location>() { new Location() { ID = unit1Guid, Shape = unitBoundary } }; var networkLinks = new List <NetworkLink>() { new NetworkLink() { LinkGeometry = unitBoundary, } }; var networkLink = new NetworkLink() { LinkGeometry = unitBoundary, }; var accessLink = new List <AccessLink>() { new AccessLink() { ID = Guid.NewGuid(), NetworkLink = networkLink } }; var deliveryPoint = new List <DeliveryPoint>() { new DeliveryPoint() { NetworkNode = new NetworkNode() { Location = new Location() { Shape = unitBoundary } } } }; var networkNodeDataDTO = new NetworkNodeDataDTO() { ID = Guid.NewGuid(), Location = new LocationDataDTO() { ID = Guid.NewGuid(), Shape = unitBoundary, RowCreateDateTime = DateTime.UtcNow } }; var accessLinkDataDTOs = new AccessLinkDataDTO() { Approved = true, ID = Guid.NewGuid(), WorkloadLengthMeter = 40, LinkDirectionGUID = Guid.NewGuid(), ConnectedNetworkLinkID = Guid.NewGuid(), AccessLinkTypeGUID = Guid.NewGuid() }; var accessLinkStatus = new AccessLinkStatusDataDTO() { ID = Guid.NewGuid(), NetworkLinkID = Guid.NewGuid(), AccessLinkStatusGUID = Guid.NewGuid(), StartDateTime = DateTime.UtcNow, RowCreateDateTime = DateTime.UtcNow }; netWorkLinkDataDto = new NetworkLinkDataDTO() { ID = Guid.NewGuid(), DataProviderGUID = Guid.NewGuid(), NetworkLinkTypeGUID = Guid.NewGuid(), StartNodeID = Guid.NewGuid(), EndNodeID = Guid.NewGuid(), LinkLength = 40, LinkGeometry = unitBoundary, RowCreateDateTime = DateTime.UtcNow, }; var mockAsynEnumerable = new DbAsyncEnumerable <AccessLink>(accessLink); mockFmoDbContext = CreateMock <AccessLinkDBContext>(); mockFmoDbContext.Setup(x => x.SaveChanges()).Returns(1); var mockAccessLinkDataService = MockDbSet(accessLink); mockFmoDbContext.Setup(x => x.Set <AccessLink>()).Returns(mockAccessLinkDataService.Object); mockFmoDbContext.Setup(x => x.AccessLinks).Returns(mockAccessLinkDataService.Object); // mockFmoDbContext.Setup(c => c.AccessLinks.AsNoTracking()).Returns(mockAccessLinkDataService.Object); mockAccessLinkDataService.Setup(x => x.Include(It.IsAny <string>())).Returns(mockAccessLinkDataService.Object); mockAccessLinkDataService.Setup(x => x.AsNoTracking()).Returns(mockAccessLinkDataService.Object); var mockAccessLinkDataService1 = MockDbSet(networkLinks); mockFmoDbContext.Setup(x => x.Set <NetworkLink>()).Returns(mockAccessLinkDataService1.Object); mockFmoDbContext.Setup(x => x.NetworkLinks).Returns(mockAccessLinkDataService1.Object); // mockFmoDbContext.Setup(c => c.NetworkLinks.AsNoTracking()).Returns(mockAccessLinkDataService1.Object); mockAccessLinkDataService1.Setup(x => x.AsNoTracking()).Returns(mockAccessLinkDataService1.Object); var mockAccessLinkDataService4 = MockDbSet(deliveryPoint); mockFmoDbContext.Setup(x => x.Set <DeliveryPoint>()).Returns(mockAccessLinkDataService4.Object); mockFmoDbContext.Setup(x => x.DeliveryPoints).Returns(mockAccessLinkDataService4.Object); mockAccessLinkDataService4.Setup(x => x.AsNoTracking()).Returns(mockAccessLinkDataService4.Object); var mockAsynEnumerable2 = new DbAsyncEnumerable <Location>(location); var mockAccessLinkDataService2 = MockDbSet(location); mockFmoDbContext.Setup(x => x.Set <Location>()).Returns(mockAccessLinkDataService2.Object); mockFmoDbContext.Setup(x => x.Locations).Returns(mockAccessLinkDataService2.Object); mockFmoDbContext.Setup(c => c.Locations.AsNoTracking()).Returns(mockAccessLinkDataService2.Object); mockDatabaseFactory = CreateMock <IDatabaseFactory <AccessLinkDBContext> >(); mockDatabaseFactory.Setup(x => x.Get()).Returns(mockFmoDbContext.Object); var rmTraceManagerMock = new Mock <IRMTraceManager>(); rmTraceManagerMock.Setup(x => x.StartTrace(It.IsAny <string>(), It.IsAny <Guid>())); mockLoggingHelper.Setup(x => x.RMTraceManager).Returns(rmTraceManagerMock.Object); testCandidate = new AccessLinkDataService(mockDatabaseFactory.Object, mockLoggingHelper.Object); }
/// <summary> /// Get the nearest street for operational object. /// </summary> /// <param name="operationalObjectPoint">Operational object unique identifier.</param> /// <param name="streetName">Street name.</param> /// <param name="referenceDataCategoryList">The reference data category list.</param> /// <returns>Nearest street and the intersection point.</returns> public Tuple <NetworkLinkDataDTO, SqlGeometry> GetNearestNamedRoad(DbGeometry operationalObjectPoint, string streetName, List <ReferenceDataCategoryDTO> referenceDataCategoryList) { using (loggingHelper.RMTraceManager.StartTrace("DataService.GetNearestNamedRoad")) { string methodName = typeof(StreetNetworkDataService) + "." + nameof(GetNearestNamedRoad); loggingHelper.LogMethodEntry(methodName, priority, entryEventId); SqlGeometry networkIntersectionPoint = SqlGeometry.Null; NetworkLinkDataDTO networkLink = null; // find the nearest named road for the provided operational object. var nearestNamedRoad = DataContext.StreetNames .Where(m => m.Descriptor == streetName || m.DesignatedName == streetName || m.LocalName == streetName) .OrderBy(n => operationalObjectPoint.Distance(n.Geometry)) .Select(l => new StreetNameDataDTO { ID = l.ID, StreetType = l.StreetType, NationalRoadCode = l.NationalRoadCode, DesignatedName = l.DesignatedName, Descriptor = l.Descriptor }).FirstOrDefault(); if (nearestNamedRoad != null) { // check if the there are no intersections with any other roads and the access link // intersection point Guid networkPathLinkType = referenceDataCategoryList.Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.NetworkLinkType) .SelectMany(x => x.ReferenceDatas) .Single(x => x.ReferenceDataValue == ReferenceDataValues.NetworkLinkPathLink).ID; Guid networkRoadLinkType = referenceDataCategoryList.Where(x => x.CategoryName.Replace(" ", string.Empty) == ReferenceDataCategoryNames.NetworkLinkType) .SelectMany(x => x.ReferenceDatas) .Single(x => x.ReferenceDataValue == ReferenceDataValues.NetworkLinkRoadLink).ID; networkLink = DataContext.NetworkLinks.AsNoTracking().Where(m => m.StreetNameGUID == nearestNamedRoad.ID) .OrderBy(n => n.LinkGeometry.Distance(operationalObjectPoint)) .Select(l => new NetworkLinkDataDTO { ID = l.ID, LinkGeometry = l.LinkGeometry, NetworkLinkTypeGUID = l.NetworkLinkTypeGUID, TOID = l.TOID }).FirstOrDefault(); if (networkLink != null) { SqlGeometry accessLinkLine = operationalObjectPoint.ToSqlGeometry().ShortestLineTo(networkLink.LinkGeometry.ToSqlGeometry()); if (!accessLinkLine.IsNull) { DbGeometry accessLinkDbGeometry = accessLinkLine.ToDbGeometry(); // find any road or path segment intersects with the planned access link. var intersectionCountForRoadOrPath = DataContext.NetworkLinks.AsNoTracking() .Count(m => m.LinkGeometry.Intersects(accessLinkDbGeometry) && (m.NetworkLinkTypeGUID == networkRoadLinkType || m.NetworkLinkTypeGUID == networkPathLinkType)); if (intersectionCountForRoadOrPath == 0) { networkIntersectionPoint = accessLinkLine.STEndPoint(); } } } } loggingHelper.LogMethodExit(methodName, priority, exitEventId); return(new Tuple <NetworkLinkDataDTO, SqlGeometry>(networkLink, networkIntersectionPoint)); } }