コード例 #1
0
        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.");
        }
コード例 #2
0
        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.");
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
            }
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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);
            }
        }