public async Task CreateUpdatedEvent_ShouldThrowException_OnGeometryBeingInvalid() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); var routeSegmentShadowTable = A.Fake <RouteSegment>(); A.CallTo(() => routeSegmentAfter.Mrid).Returns(Guid.NewGuid()); A.CallTo(() => geoDatabase.GetRouteSegmentShadowTable(routeSegmentAfter.Mrid, false)).Returns(routeSegmentShadowTable); A.CallTo(() => routeSegmentShadowTable.Mrid).Returns(routeSegmentAfter.Mrid); A.CallTo(() => routeSegmentAfter.GetLineString()).Returns(A.Fake <LineString>()); A.CallTo(() => routeSegmentAfter.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 378238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentShadowTable.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentValidator.LineIsValid(routeSegmentAfter.GetLineString())).Returns(false); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); Func <Task> act = async() => await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter); await act.Should().ThrowExactlyAsync <Exception>("Linestring is not valid."); }
public async Task CreateUpdatedEvent_ShouldThrowException_OnEndRouteNodeCountBeingTwoOrMore() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); var routeSegmentShadowTable = A.Fake <RouteSegment>(); A.CallTo(() => applicationSettings.Value) .Returns(new ApplicationSetting { ApplicationName = "GDB_INTEGRATOR" }); A.CallTo(() => routeSegmentAfter.GetLineString()).Returns(A.Fake <LineString>()); A.CallTo(() => routeSegmentAfter.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 378238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentShadowTable.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentValidator.LineIsValid(routeSegmentAfter.GetLineString())).Returns(true); A.CallTo(() => geoDatabase.GetIntersectingEndRouteNodes(routeSegmentAfter)).Returns(new List <RouteNode> { A.Fake <RouteNode>(), A.Fake <RouteNode>() }); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); Func <Task> act = async() => await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter); await act.Should().ThrowExactlyAsync <Exception>("Has more than 2 intersecting start or end nodes."); }
public async Task CreateUpdatedEvent_ShouldReturnRouteSegmentMarkedForDeletion_OnRouteSegmentAfterMarkedToBeDeletedTrueAndHasRelatedEquipmentFalse() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); A.CallTo(() => routeSegmentAfter.GetLineString()).Returns(A.Fake <LineString>()); A.CallTo(() => routeSegmentValidator.LineIsValid(routeSegmentAfter.GetLineString())).Returns(true); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(true); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); var result = await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter); var routeSegmentDeleted = (RouteSegmentDeleted)result.First(); using (var scope = new AssertionScope()) { result.Count().Should().Be(1); routeSegmentDeleted.RouteSegment.Should().Be(routeSegmentAfter); } }
public async Task CreateUpdatedEvent_ShouldReturnDoNothing_OnGetRouteSegmentFromShadowTableBeingNull() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); RouteSegment routeSegmentShadowTable = null; A.CallTo(() => geoDatabase.GetRouteSegmentShadowTable(routeSegmentAfter.Mrid, false)).Returns(routeSegmentShadowTable); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); var result = (DoNothing)(await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter)).First(); result.Should().BeOfType(typeof(DoNothing)); }
public async Task CreateUpdatedEvent_ShouldReturnTwoSplitEventsAndConnectivityChanged_OnRouteSegmentBeingValidAndIntersectsWithOtherRouteSegmentNotEdge() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); var routeSegmentShadowTable = A.Fake <RouteSegment>(); A.CallTo(() => routeSegmentAfter.Mrid).Returns(Guid.NewGuid()); A.CallTo(() => geoDatabase.GetRouteSegmentShadowTable(routeSegmentAfter.Mrid, false)).Returns(routeSegmentShadowTable); A.CallTo(() => routeSegmentShadowTable.Mrid).Returns(routeSegmentAfter.Mrid); A.CallTo(() => routeSegmentAfter.GetLineString()).Returns(A.Fake <LineString>()); A.CallTo(() => routeSegmentAfter.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 378238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentShadowTable.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentValidator.LineIsValid(routeSegmentAfter.GetLineString())).Returns(true); A.CallTo(() => geoDatabase.GetIntersectingStartRouteSegments(routeSegmentAfter)).Returns(new List <RouteSegment> { A.Fake <RouteSegment>() }); A.CallTo(() => geoDatabase.GetIntersectingEndRouteSegments(routeSegmentAfter)).Returns(new List <RouteSegment> { A.Fake <RouteSegment>() }); A.CallTo(() => geoDatabase.GetIntersectingStartRouteNodes(routeSegmentAfter)).Returns(new List <RouteNode>()); A.CallTo(() => geoDatabase.GetIntersectingEndRouteNodes(routeSegmentAfter)).Returns(new List <RouteNode>()); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); var result = (await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter)).ToList(); using (var scope = new AssertionScope()) { result.Count().Should().Be(3); result[0].Should().BeOfType(typeof(ExistingRouteSegmentSplitted)); result[1].Should().BeOfType(typeof(ExistingRouteSegmentSplitted)); result[2].Should().BeOfType(typeof(RouteSegmentConnectivityChanged)); } }
public async Task CreateUpdatedEvent_ShouldReturnDoNothing_OnRouteSegmentAfterAndShadowTableBeforeBeingEqual() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); var routeSegmentShadowTable = A.Fake <RouteSegment>(); A.CallTo(() => routeSegmentAfter.Mrid).Returns(Guid.NewGuid()); A.CallTo(() => routeSegmentShadowTable.Mrid).Returns(routeSegmentAfter.Mrid); A.CallTo(() => geoDatabase.GetRouteSegmentShadowTable(routeSegmentAfter.Mrid, false)).Returns(routeSegmentShadowTable); A.CallTo(() => routeSegmentAfter.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(false); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); var result = (DoNothing)(await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter)).First(); result.Should().BeOfType(typeof(DoNothing)); }
public async Task CreateUpdatedEvent_ShouldReturnRouteSegmentLocationChanged_OnGeometryChangedAndNodesBeingSameAsBeforeUpdate() { var applicationSettings = A.Fake <IOptions <ApplicationSetting> >(); var routeSegmentValidator = A.Fake <IRouteSegmentValidator>(); var geoDatabase = A.Fake <IGeoDatabase>(); var routeNodeFactory = A.Fake <IRouteNodeFactory>(); var routeSegmentBefore = A.Fake <RouteSegment>(); var routeSegmentAfter = A.Fake <RouteSegment>(); var routeSegmentShadowTable = A.Fake <RouteSegment>(); var currentStartNode = A.Fake <RouteNode>(); var currentEndNode = A.Fake <RouteNode>(); var previousStartNode = A.Fake <RouteNode>(); var previousEndNode = A.Fake <RouteNode>(); A.CallTo(() => routeSegmentAfter.Mrid).Returns(Guid.NewGuid()); A.CallTo(() => geoDatabase.GetRouteSegmentShadowTable(routeSegmentAfter.Mrid, false)).Returns(routeSegmentShadowTable); A.CallTo(() => routeSegmentShadowTable.Mrid).Returns(routeSegmentAfter.Mrid); A.CallTo(() => routeSegmentAfter.GetLineString()).Returns(A.Fake <LineString>()); A.CallTo(() => routeSegmentAfter.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 578238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentShadowTable.GetGeoJsonCoordinate()).Returns("LINESTRING(578223.64355838 6179284.23759438, 378238.4182511 6179279.78494725)"); A.CallTo(() => routeSegmentAfter.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentShadowTable.MarkAsDeleted).Returns(false); A.CallTo(() => routeSegmentValidator.LineIsValid(routeSegmentAfter.GetLineString())).Returns(true); A.CallTo(() => geoDatabase.GetIntersectingStartRouteSegments(routeSegmentAfter)).Returns(new List <RouteSegment> { A.Fake <RouteSegment>() }); A.CallTo(() => geoDatabase.GetIntersectingEndRouteSegments(routeSegmentAfter)).Returns(new List <RouteSegment> { A.Fake <RouteSegment>() }); // Important for this test var startNodeMrid = Guid.NewGuid(); var endNodeMrId = Guid.NewGuid(); A.CallTo(() => geoDatabase.GetIntersectingStartRouteNodes(routeSegmentAfter)).Returns(new List <RouteNode> { currentStartNode }); A.CallTo(() => geoDatabase.GetIntersectingEndRouteNodes(routeSegmentAfter)).Returns(new List <RouteNode> { currentEndNode }); A.CallTo(() => currentStartNode.Mrid).Returns(startNodeMrid); A.CallTo(() => currentEndNode.Mrid).Returns(endNodeMrId); A.CallTo(() => geoDatabase.GetIntersectingStartRouteNodes(routeSegmentShadowTable.Coord)).Returns(new List <RouteNode> { previousStartNode }); A.CallTo(() => geoDatabase.GetIntersectingEndRouteNodes(routeSegmentShadowTable.Coord)).Returns(new List <RouteNode> { previousEndNode }); A.CallTo(() => previousStartNode.Mrid).Returns(startNodeMrid); A.CallTo(() => previousEndNode.Mrid).Returns(endNodeMrId); var factory = new RouteSegmentCommandFactory(applicationSettings, routeSegmentValidator, geoDatabase, routeNodeFactory); var result = (RouteSegmentLocationChanged)(await factory.CreateUpdatedEvent(routeSegmentBefore, routeSegmentAfter)).First(); using (var scope = new AssertionScope()) { result.Should().BeOfType(typeof(RouteSegmentLocationChanged)); result.RouteSegment.Should().Be(routeSegmentAfter); } }