public void AllChangesAreNull() { var data = Fixture.CreateMany <RequestedChange>(10).ToArray(); var index = new Random().Next(0, data.Length); data[index] = new RequestedChange { AddGradeSeparatedJunction = null, AddRoadNode = null, AddRoadSegment = null, AddRoadSegmentToEuropeanRoad = null, AddRoadSegmentToNationalRoad = null, AddRoadSegmentToNumberedRoad = null }; Validator.ShouldHaveValidationErrorFor(c => c.Changes, data); }
public void MoreThanOneChangeIsNotNull() { var data = Fixture.CreateMany <RequestedChange>(10).ToArray(); var index = new Random().Next(0, data.Length); data[index] = new RequestedChange { AddGradeSeparatedJunction = Fixture.Create <Messages.AddGradeSeparatedJunction>(), AddRoadNode = Fixture.Create <Messages.AddRoadNode>(), AddRoadSegment = Fixture.Create <Messages.AddRoadSegment>(), AddRoadSegmentToEuropeanRoad = Fixture.Create <Messages.AddRoadSegmentToEuropeanRoad>(), AddRoadSegmentToNationalRoad = Fixture.Create <Messages.AddRoadSegmentToNationalRoad>(), AddRoadSegmentToNumberedRoad = Fixture.Create <Messages.AddRoadSegmentToNumberedRoad>(), }; Validator.ShouldHaveValidationErrorFor(c => c.Changes, data); }
private static bool HaveExactlyOneNonNullChange(RequestedChange change) { if (change == null) { return(true); } return (new object[] { change.AddRoadNode, change.AddRoadSegment, change.AddRoadSegmentToEuropeanRoad, change.AddRoadSegmentToNationalRoad, change.AddRoadSegmentToNumberedRoad, change.AddGradeSeparatedJunction } .Count(_ => !ReferenceEquals(_, null)) == 1); }
public ChangeRoadNetworkValidatorTests() { Fixture = new Fixture(); Fixture.CustomizePoint(); Fixture.CustomizePolylineM(); Fixture.CustomizeRoadNodeId(); Fixture.CustomizeRoadNodeType(); Fixture.CustomizeRoadSegmentId(); Fixture.CustomizeRoadSegmentCategory(); Fixture.CustomizeRoadSegmentMorphology(); Fixture.CustomizeRoadSegmentStatus(); Fixture.CustomizeRoadSegmentAccessRestriction(); Fixture.CustomizeRoadSegmentLaneCount(); Fixture.CustomizeRoadSegmentLaneDirection(); Fixture.CustomizeRoadSegmentNumberedRoadDirection(); Fixture.CustomizeRoadSegmentGeometryDrawMethod(); Fixture.CustomizeRoadSegmentNumberedRoadOrdinal(); Fixture.CustomizeRoadSegmentSurfaceType(); Fixture.CustomizeRoadSegmentWidth(); Fixture.CustomizeEuropeanRoadNumber(); Fixture.CustomizeNationalRoadNumber(); Fixture.CustomizeNumberedRoadNumber(); Fixture.CustomizeGradeSeparatedJunctionId(); Fixture.CustomizeGradeSeparatedJunctionType(); Fixture.Customize <RoadSegmentEuropeanRoadAttributes>(composer => composer.Do(instance => { instance.AttributeId = Fixture.Create <AttributeId>(); instance.Number = Fixture.Create <EuropeanRoadNumber>(); }).OmitAutoProperties()); Fixture.Customize <RoadSegmentNationalRoadAttributes>(composer => composer.Do(instance => { instance.AttributeId = Fixture.Create <AttributeId>(); instance.Ident2 = Fixture.Create <NationalRoadNumber>(); }).OmitAutoProperties()); Fixture.Customize <RoadSegmentNumberedRoadAttributes>(composer => composer.Do(instance => { instance.AttributeId = Fixture.Create <AttributeId>(); instance.Ident8 = Fixture.Create <NumberedRoadNumber>(); instance.Direction = Fixture.Create <RoadSegmentNumberedRoadDirection>(); instance.Ordinal = Fixture.Create <RoadSegmentNumberedRoadOrdinal>(); }).OmitAutoProperties()); Fixture.Customize <Messages.RoadSegmentLaneAttributes>(composer => composer.Do(instance => { var positionGenerator = new Generator <RoadSegmentPosition>(Fixture); instance.AttributeId = Fixture.Create <AttributeId>(); instance.FromPosition = positionGenerator.First(candidate => candidate >= 0.0m); instance.ToPosition = positionGenerator.First(candidate => candidate > instance.FromPosition); instance.Count = Fixture.Create <RoadSegmentLaneCount>(); instance.Direction = Fixture.Create <RoadSegmentLaneDirection>(); }).OmitAutoProperties()); Fixture.Customize <Messages.RoadSegmentWidthAttributes>(composer => composer.Do(instance => { var positionGenerator = new Generator <RoadSegmentPosition>(Fixture); instance.AttributeId = Fixture.Create <AttributeId>(); instance.FromPosition = positionGenerator.First(candidate => candidate >= 0.0m); instance.ToPosition = positionGenerator.First(candidate => candidate > instance.FromPosition); instance.Width = Fixture.Create <RoadSegmentWidth>(); }).OmitAutoProperties()); Fixture.Customize <Messages.RoadSegmentSurfaceAttributes>(composer => composer.Do(instance => { var positionGenerator = new Generator <RoadSegmentPosition>(Fixture); instance.AttributeId = Fixture.Create <AttributeId>(); instance.FromPosition = positionGenerator.First(candidate => candidate >= 0.0m); instance.ToPosition = positionGenerator.First(candidate => candidate > instance.FromPosition); instance.Type = Fixture.Create <RoadSegmentSurfaceType>(); }).OmitAutoProperties()); Fixture.Customize <Messages.AddRoadNode>( composer => composer.FromFactory(random => new Messages.AddRoadNode { TemporaryId = Fixture.Create <RoadNodeId>(), Type = Fixture.Create <RoadNodeType>(), Geometry = Fixture.Create <RoadNodeGeometry>() } ) ); Fixture.Customize <Messages.AddRoadSegment>( composer => composer.FromFactory(random => new Messages.AddRoadSegment { TemporaryId = Fixture.Create <RoadSegmentId>(), StartNodeId = Fixture.Create <RoadNodeId>(), EndNodeId = Fixture.Create <RoadNodeId>(), Geometry = GeometryTranslator.Translate(Fixture.Create <MultiLineString>()), MaintenanceAuthority = Fixture.Create <string>(), GeometryDrawMethod = Fixture.Create <RoadSegmentGeometryDrawMethod>(), Morphology = Fixture.Create <RoadSegmentMorphology>(), Status = Fixture.Create <RoadSegmentStatus>(), Category = Fixture.Create <RoadSegmentCategory>(), AccessRestriction = Fixture.Create <RoadSegmentAccessRestriction>(), LeftSideStreetNameId = Fixture.Create <Nullable <int> >(), RightSideStreetNameId = Fixture.Create <Nullable <int> >(), Lanes = Fixture.CreateMany <RequestedRoadSegmentLaneAttribute>().ToArray(), Widths = Fixture.CreateMany <RequestedRoadSegmentWidthAttribute>().ToArray(), Surfaces = Fixture.CreateMany <RequestedRoadSegmentSurfaceAttribute>().ToArray() }).OmitAutoProperties() ); Fixture.Customize <Messages.AddGradeSeparatedJunction>( composer => composer.FromFactory(random => new Messages.AddGradeSeparatedJunction { TemporaryId = Fixture.Create <GradeSeparatedJunctionId>(), UpperSegmentId = Fixture.Create <RoadSegmentId>(), LowerSegmentId = Fixture.Create <RoadSegmentId>(), Type = Fixture.Create <GradeSeparatedJunctionType>() } ).OmitAutoProperties() ); Fixture.Customize <RequestedChange>( composer => composer.FromFactory(random => { var result = new RequestedChange(); switch (random.Next(0, 3)) { case 0: result.AddRoadNode = Fixture.Create <Messages.AddRoadNode>(); break; case 1: result.AddRoadSegment = Fixture.Create <Messages.AddRoadSegment>(); break; case 2: result.AddGradeSeparatedJunction = Fixture.Create <Messages.AddGradeSeparatedJunction>(); break; } return(result); } ).OmitAutoProperties() ); Validator = new ChangeRoadNetworkValidator(); }